< Summary

Class:DCL.ECSRuntime.ECSComponentsManager
Assembly:DCL.ECSRuntime.ComponentsManager
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSRuntime/ComponentsManager/ECSComponentsManager.cs
Covered lines:31
Uncovered lines:3
Coverable lines:34
Total lines:117
Line coverage:91.1% (31 of 34)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSComponentsManager(...)0%110100%
GetComponent(...)0%110100%
GetOrCreateComponent(...)0%4.184077.78%
DeserializeComponent(...)0%220100%
RemoveComponent(...)0%2.152066.67%
RemoveAllComponents(...)0%220100%
HasAnyComponent(...)0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSRuntime/ComponentsManager/ECSComponentsManager.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL.Controllers;
 4using DCL.Models;
 5
 6namespace DCL.ECSRuntime
 7{
 8    public class ECSComponentsManager
 9    {
 10        private readonly IReadOnlyDictionary<int, ECSComponentsFactory.ECSComponentBuilder> componentBuilders;
 911        internal readonly Dictionary<int, IECSComponent> sceneComponents = new Dictionary<int, IECSComponent>();
 12        private readonly IParcelScene scene;
 13
 914        public ECSComponentsManager(IParcelScene scene, IReadOnlyDictionary<int, ECSComponentsFactory.ECSComponentBuilde
 15        {
 916            this.componentBuilders = componentBuilders;
 917            this.scene = scene;
 918        }
 19
 20        /// <summary>
 21        /// get a component instance using it id
 22        /// </summary>
 23        /// <param name="componentId"></param>
 24        /// <returns>component instance of null if it does not exist</returns>
 25        public IECSComponent GetComponent(int componentId)
 26        {
 127            sceneComponents.TryGetValue(componentId, out IECSComponent component);
 128            return component;
 29        }
 30
 31        /// <summary>
 32        /// get or create a component for an entity
 33        /// </summary>
 34        /// <param name="componentId"></param>
 35        /// <param name="entity"></param>
 36        /// <returns>the instance of existing or newly created component</returns>
 37        public IECSComponent GetOrCreateComponent(int componentId, IDCLEntity entity)
 38        {
 1439            if (sceneComponents.TryGetValue(componentId, out IECSComponent component))
 40            {
 241                if (!component.HasComponent(entity))
 42                {
 043                    component.Create(entity);
 44                }
 045            }
 1246            else if (componentBuilders.TryGetValue(componentId, out ECSComponentsFactory.ECSComponentBuilder componentBu
 47            {
 1248                component = componentBuilder.Invoke(scene);
 1249                sceneComponents.Add(componentId, component);
 1250                component.Create(entity);
 51            }
 1452            return component;
 53        }
 54
 55        /// <summary>
 56        /// deserialize data for a component. it will create the component if it does not exists
 57        /// </summary>
 58        /// <param name="componentId"></param>
 59        /// <param name="entity"></param>
 60        /// <param name="message"></param>
 61        public void DeserializeComponent(int componentId, IDCLEntity entity, object message)
 62        {
 763            var component = GetOrCreateComponent(componentId, entity);
 764            component?.Deserialize(entity, message);
 765        }
 66
 67        /// <summary>
 68        /// remove a component from an entity
 69        /// </summary>
 70        /// <param name="componentId"></param>
 71        /// <param name="entity"></param>
 72        /// <returns>true if component removed successfully, false if entity didn't contain component</returns>
 73        public bool RemoveComponent(int componentId, IDCLEntity entity)
 74        {
 575            if (sceneComponents.TryGetValue(componentId, out IECSComponent component))
 76            {
 577                return component.Remove(entity);
 78            }
 079            return false;
 80        }
 81
 82        /// <summary>
 83        /// remove all components of a given entity
 84        /// </summary>
 85        /// <param name="entity"></param>
 86        public void RemoveAllComponents(IDCLEntity entity)
 87        {
 188            using (var iterator = sceneComponents.GetEnumerator())
 89            {
 390                while (iterator.MoveNext())
 91                {
 292                    iterator.Current.Value.Remove(entity);
 93                }
 194            }
 195        }
 96
 97        /// <summary>
 98        /// get if entity has any component
 99        /// </summary>
 100        /// <param name="entity"></param>
 101        /// <returns></returns>
 102        public bool HasAnyComponent(IDCLEntity entity)
 103        {
 3104            using (var iterator = sceneComponents.GetEnumerator())
 105            {
 6106                while (iterator.MoveNext())
 107                {
 4108                    if (iterator.Current.Value.HasComponent(entity))
 109                    {
 1110                        return true;
 111                    }
 112                }
 2113            }
 2114            return false;
 1115        }
 116    }
 117}