< Summary

Class:DCL.ECSComponentsManagerLegacy
Assembly:ECSComponentManagerLegacy
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSComponentManagerLegacy/ECSComponentsManagerLegacy.cs
Covered lines:176
Uncovered lines:80
Coverable lines:256
Total lines:642
Line coverage:68.7% (176 of 256)
Covered branches:0
Total branches:0
Covered methods:27
Total methods:37
Method coverage:72.9% (27 of 37)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSComponentsManagerLegacy(...)0%110100%
ECSComponentsManagerLegacy(...)0%110100%
AddSharedComponent(...)0%3.023087.5%
RemoveSharedComponent(...)0%6.026091.67%
TryGetComponent[T](...)0%56700%
TryGetBaseComponent(...)0%220100%
TryGetSharedComponent(...)0%20400%
GetSharedComponent(...)0%3.073080%
HasComponent(...)0%220100%
HasSharedComponent(...)0%6200%
RemoveComponent(...)0%330100%
AddComponent(...)0%330100%
GetComponent(...)0%3.583060%
GetComponents()0%30500%
GetSharedComponents()0%30500%
GetComponentsDictionary(...)0%110100%
GetSharedComponentsDictionary(...)0%2100%
GetComponentsCount()0%6200%
CleanComponents(...)0%770100%
HasSceneSharedComponent(...)0%110100%
GetSceneSharedComponent(...)0%110100%
TryGetSceneSharedComponent(...)0%2100%
GetSceneSharedComponentsDictionary()0%110100%
GetSceneSharedComponentsCount()0%110100%
AddSceneSharedComponent(...)0%220100%
RemoveSceneSharedComponent(...)0%2100%
SceneSharedComponentCreate(...)0%5.125083.33%
GetSceneSharedComponent[T]()0%220100%
SceneSharedComponentAttach(...)0%3.043083.33%
EntityComponentCreateOrUpdate(...)0%12.6712083.33%
EntityComponentUpdate(...)0%8.95046.15%
SceneSharedComponentDispose(...)0%330100%
SceneSharedComponentUpdate(...)0%2.062075%
SceneSharedComponentUpdate(...)0%2.062075%
SceneSharedComponentUpdate(...)0%6200%
EntityComponentRemove(...)0%38.5932081.4%
DisposeAllSceneComponents()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSComponentManagerLegacy/ECSComponentsManagerLegacy.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using DCL.Components;
 5using DCL.Controllers;
 6using DCL.Helpers;
 7using DCL.Models;
 8using DCL.Rendering;
 9using UnityEngine;
 10using Decentraland.Sdk.Ecs6;
 11
 12namespace DCL
 13{
 14    public class ECSComponentsManagerLegacy : IECSComponentsManagerLegacy
 15    {
 43816        private readonly Dictionary<string, ISharedComponent> disposableComponents = new Dictionary<string, ISharedCompo
 17
 43818        private readonly Dictionary<long, Dictionary<Type, ISharedComponent>> entitiesSharedComponents =
 19            new Dictionary<long, Dictionary<Type, ISharedComponent>>();
 20
 43821        private readonly Dictionary<long, Dictionary<CLASS_ID_COMPONENT, IEntityComponent>> entitiesComponents =
 22            new Dictionary<long, Dictionary<CLASS_ID_COMPONENT, IEntityComponent>>();
 23
 24        private readonly IParcelScene scene;
 25        private readonly IRuntimeComponentFactory componentFactory;
 26        private readonly IParcelScenesCleaner parcelScenesCleaner;
 27        private readonly ISceneBoundsChecker sceneBoundsChecker;
 28        private readonly IPhysicsSyncController physicsSyncController;
 29        private readonly ICullingController cullingController;
 30        private readonly DataStore_FeatureFlag dataStoreFeatureFlag;
 31        private readonly bool isSBCNerfEnabled;
 32
 33        public event Action<string, ISharedComponent> OnAddSharedComponent;
 34
 35        public ECSComponentsManagerLegacy(IParcelScene scene)
 43836            : this(scene,
 37                Environment.i.world.componentFactory,
 38                Environment.i.platform.parcelScenesCleaner,
 39                Environment.i.world.sceneBoundsChecker,
 40                Environment.i.platform.physicsSyncController,
 41                Environment.i.platform.cullingController,
 43842                DataStore.i.featureFlags.flags.Get()) { }
 43
 43844        public ECSComponentsManagerLegacy(IParcelScene scene,
 45            IRuntimeComponentFactory componentFactory,
 46            IParcelScenesCleaner parcelScenesCleaner,
 47            ISceneBoundsChecker sceneBoundsChecker,
 48            IPhysicsSyncController physicsSyncController,
 49            ICullingController cullingController,
 50            FeatureFlag featureFlags)
 51        {
 43852            this.scene = scene;
 43853            this.componentFactory = componentFactory;
 43854            this.parcelScenesCleaner = parcelScenesCleaner;
 43855            this.sceneBoundsChecker = sceneBoundsChecker;
 43856            this.physicsSyncController = physicsSyncController;
 43857            this.cullingController = cullingController;
 58
 43859            isSBCNerfEnabled = featureFlags.IsFeatureEnabled("NERF_SBC");
 43860        }
 61
 62        public void AddSharedComponent(IDCLEntity entity, Type componentType, ISharedComponent component)
 63        {
 37664            if (component == null)
 65            {
 066                return;
 67            }
 68
 37669            RemoveSharedComponent(entity, componentType);
 70
 37671            if (!entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityComp
 72            {
 27073                entityComponents = new Dictionary<Type, ISharedComponent>();
 27074                entitiesSharedComponents.Add(entity.entityId, entityComponents);
 75            }
 76
 37677            entityComponents.Add(componentType, component);
 37678        }
 79
 80        public void RemoveSharedComponent(IDCLEntity entity, Type targetType, bool triggerDetaching = true)
 81        {
 75882            if (!entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityComp
 83            {
 29684                return;
 85            }
 46286            if (!entityComponents.TryGetValue(targetType, out ISharedComponent component))
 87            {
 15388                return;
 89            }
 30990            if (component == null)
 091                return;
 92
 30993            entityComponents.Remove(targetType);
 94
 30995            if (entityComponents.Count == 0)
 96            {
 21097                entitiesSharedComponents.Remove(entity.entityId);
 98            }
 99
 309100            if (triggerDetaching)
 37101                component.DetachFrom(entity, targetType);
 309102        }
 103
 104        public T TryGetComponent<T>(IDCLEntity entity) where T : class
 105        {
 0106            T component = null;
 0107            if (entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> ent
 108            {
 0109                component = entityComponents.Values.FirstOrDefault(x => x is T) as T;
 110
 0111                if (component != null)
 0112                    return component;
 113            }
 114
 0115            if (entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityShare
 116            {
 0117                component = entitySharedComponents.Values.FirstOrDefault(x => x is T) as T;
 118
 0119                if (component != null)
 0120                    return component;
 121            }
 122
 0123            return null;
 124        }
 125
 126        public bool TryGetBaseComponent(IDCLEntity entity, CLASS_ID_COMPONENT componentId, out IEntityComponent componen
 127        {
 236128            if (entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> ent
 129            {
 65130                return entityComponents.TryGetValue(componentId, out component);
 131            }
 171132            component = null;
 171133            return false;
 134        }
 135
 136        public bool TryGetSharedComponent(IDCLEntity entity, CLASS_ID componentId, out ISharedComponent component)
 137        {
 0138            component = null;
 0139            if (!entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityComp
 140            {
 0141                return false;
 142            }
 143
 0144            using (var iterator = entityComponents.GetEnumerator())
 145            {
 0146                while (iterator.MoveNext())
 147                {
 0148                    if (iterator.Current.Value.GetClassId() != (int)componentId)
 149                        continue;
 150
 0151                    component = iterator.Current.Value;
 0152                    break;
 153                }
 0154            }
 155
 0156            return component != null;
 157        }
 158
 159        public ISharedComponent GetSharedComponent(IDCLEntity entity, Type targetType)
 160        {
 68161            if (!entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityComp
 162            {
 11163                return null;
 164            }
 165
 57166            if (entityComponents.TryGetValue(targetType, out ISharedComponent component))
 167            {
 57168                return component;
 169            }
 170
 0171            return null;
 172        }
 173
 174        public bool HasComponent(IDCLEntity entity, CLASS_ID_COMPONENT componentId)
 175        {
 748176            if (entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> ent
 177            {
 456178                return entityComponents.ContainsKey(componentId);
 179            }
 292180            return false;
 181        }
 182
 183        public bool HasSharedComponent(IDCLEntity entity, CLASS_ID componentId)
 184        {
 0185            if (TryGetSharedComponent(entity, componentId, out ISharedComponent component))
 186            {
 0187                return component != null;
 188            }
 0189            return false;
 190        }
 191
 192        public void RemoveComponent(IDCLEntity entity, CLASS_ID_COMPONENT componentId)
 193        {
 21194            if (entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> ent
 195            {
 21196                entityComponents.Remove(componentId);
 197
 21198                if (entityComponents.Count == 0)
 199                {
 16200                    entitiesComponents.Remove(entity.entityId);
 201                }
 202            }
 21203        }
 204
 205        public void AddComponent(IDCLEntity entity, CLASS_ID_COMPONENT componentId, IEntityComponent component)
 206        {
 286207            if (!entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> en
 208            {
 244209                entityComponents = new Dictionary<CLASS_ID_COMPONENT, IEntityComponent>();
 244210                entitiesComponents.Add(entity.entityId, entityComponents);
 211
 244212                entity.OnBaseComponentAdded?.Invoke(componentId, entity);
 213            }
 286214            entityComponents.Add(componentId, component);
 286215        }
 216
 217        public IEntityComponent GetComponent(IDCLEntity entity, CLASS_ID_COMPONENT componentId)
 218        {
 103219            if (!entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> en
 220            {
 0221                return null;
 222            }
 103223            if (entityComponents.TryGetValue(componentId, out IEntityComponent component))
 224            {
 103225                return component;
 226            }
 0227            return null;
 228        }
 229
 230        public IEnumerator<IEntityComponent> GetComponents(IDCLEntity entity)
 231        {
 0232            if (!entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> en
 233            {
 0234                yield break;
 235            }
 236
 0237            using (var iterator = entityComponents.GetEnumerator())
 238            {
 0239                while (iterator.MoveNext())
 240                {
 0241                    yield return iterator.Current.Value;
 242                }
 0243            }
 0244        }
 245
 246        public IEnumerator<ISharedComponent> GetSharedComponents(IDCLEntity entity)
 247        {
 0248            if (!entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityComp
 249            {
 0250                yield break;
 251            }
 252
 0253            using (var iterator = entityComponents.GetEnumerator())
 254            {
 0255                while (iterator.MoveNext())
 256                {
 0257                    yield return iterator.Current.Value;
 258                }
 0259            }
 0260        }
 261
 262        public IReadOnlyDictionary<CLASS_ID_COMPONENT, IEntityComponent> GetComponentsDictionary(IDCLEntity entity)
 263        {
 29264            entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> entityC
 29265            return entityComponents;
 266        }
 267
 268        public IReadOnlyDictionary<Type, ISharedComponent> GetSharedComponentsDictionary(IDCLEntity entity)
 269        {
 0270            entitiesSharedComponents.TryGetValue(entity.entityId, out Dictionary<Type, ISharedComponent> entityComponent
 0271            return entityComponents;
 272        }
 273
 274        public int GetComponentsCount()
 275        {
 0276            int count = 0;
 0277            using (var entityIterator = entitiesComponents.GetEnumerator())
 278            {
 0279                while (entityIterator.MoveNext())
 280                {
 0281                    count += entityIterator.Current.Value.Count;
 282                }
 0283            }
 0284            return count;
 285        }
 286
 287        public void CleanComponents(IDCLEntity entity)
 288        {
 240289            if (!entitiesComponents.TryGetValue(entity.entityId, out Dictionary<CLASS_ID_COMPONENT, IEntityComponent> en
 290            {
 76291                return;
 292            }
 293
 164294            using (var iterator = entityComponents.GetEnumerator())
 295            {
 341296                while (iterator.MoveNext())
 297                {
 177298                    if (iterator.Current.Value == null)
 299                        continue;
 300
 177301                    if (iterator.Current.Value is ICleanable cleanableComponent)
 177302                        cleanableComponent.Cleanup();
 303
 177304                    if (!(iterator.Current.Value is IPoolableObjectContainer poolableContainer))
 305                        continue;
 306
 43307                    if (poolableContainer.poolableObject == null)
 308                        continue;
 309
 7310                    poolableContainer.poolableObject.Release();
 311                }
 164312            }
 164313            entitiesComponents.Remove(entity.entityId);
 164314        }
 315
 316        public bool HasSceneSharedComponent(string component)
 317        {
 213318            return disposableComponents.ContainsKey(component);
 319        }
 320
 321        public ISharedComponent GetSceneSharedComponent(string component)
 322        {
 843323            disposableComponents.TryGetValue(component, out ISharedComponent sharedComponent);
 843324            return sharedComponent;
 325        }
 326
 327        public bool TryGetSceneSharedComponent(string component, out ISharedComponent sharedComponent)
 328        {
 0329            return disposableComponents.TryGetValue(component, out sharedComponent);
 330        }
 331
 332        public IReadOnlyDictionary<string, ISharedComponent> GetSceneSharedComponentsDictionary()
 333        {
 3334            return disposableComponents;
 335        }
 336
 337        public int GetSceneSharedComponentsCount()
 338        {
 398339            return disposableComponents.Count;
 340        }
 341
 342        public void AddSceneSharedComponent(string component, ISharedComponent sharedComponent)
 343        {
 579344            disposableComponents.Add(component, sharedComponent);
 579345            OnAddSharedComponent?.Invoke(component, sharedComponent);
 4346        }
 347
 348        public bool RemoveSceneSharedComponent(string component)
 349        {
 0350            return disposableComponents.Remove(component);
 351        }
 352
 353        public ISharedComponent SceneSharedComponentCreate(string id, int classId)
 354        {
 576355            if (disposableComponents.TryGetValue(id, out ISharedComponent component))
 1356                return component;
 357
 575358            IRuntimeComponentFactory factory = componentFactory;
 359
 575360            if (factory.createConditions.ContainsKey(classId))
 361            {
 46362                if (!factory.createConditions[(int)classId].Invoke(scene.sceneData.sceneNumber, classId))
 0363                    return null;
 364            }
 365
 575366            ISharedComponent newComponent = componentFactory.CreateComponent(classId) as ISharedComponent;
 367
 575368            if (newComponent == null)
 0369                return null;
 370
 575371            AddSceneSharedComponent(id, newComponent);
 372
 575373            newComponent.Initialize(scene, id);
 374
 575375            return newComponent;
 376        }
 377
 378        public T GetSceneSharedComponent<T>() where T : class
 379        {
 128380            return disposableComponents.Values.FirstOrDefault(x => x is T) as T;
 381        }
 382
 383        /**
 384          * This method is called when we need to attach a disposable component to the entity
 385          */
 386        public void SceneSharedComponentAttach(long entityId, string componentId)
 387        {
 376388            IDCLEntity entity = scene.GetEntityById(entityId);
 389
 376390            if (entity == null)
 0391                return;
 392
 376393            if (disposableComponents.TryGetValue(componentId, out ISharedComponent sharedComponent))
 394            {
 376395                sharedComponent.AttachTo(entity);
 396            }
 376397        }
 398
 399        public IEntityComponent EntityComponentCreateOrUpdate(long entityId, CLASS_ID_COMPONENT classId, object data)
 400        {
 362401            IDCLEntity entity = scene.GetEntityById(entityId);
 402
 362403            if (entity == null)
 404            {
 0405                Debug.LogError($"scene '{scene.sceneData.sceneNumber}': Can't create entity component if the entity {ent
 0406                return null;
 407            }
 408
 362409            IEntityComponent targetComponent = null;
 410
 362411            var overrideCreate = Environment.i.world.componentFactory.createOverrides;
 412
 362413            if (overrideCreate.ContainsKey((int)classId))
 414            {
 299415                int classIdAsInt = (int)classId;
 299416                overrideCreate[(int)classId].Invoke(scene.sceneData.sceneNumber, entityId, ref classIdAsInt, data);
 299417                classId = (CLASS_ID_COMPONENT)classIdAsInt;
 418            }
 419
 362420            bool wasCreated = false;
 362421            if (!HasComponent(entity, classId))
 422            {
 285423                targetComponent = componentFactory.CreateComponent((int) classId) as IEntityComponent;
 424
 285425                if (targetComponent != null)
 426                {
 285427                    AddComponent(entity, classId, targetComponent);
 428
 285429                    targetComponent.Initialize(scene, entity);
 430
 431                    switch (data)
 432                    {
 433                        case string json:
 285434                            targetComponent.UpdateFromJSON(json);
 285435                            break;
 436                        case ComponentBodyPayload payload:
 0437                            targetComponent.UpdateFromPb(payload);
 0438                            break;
 439                        default:
 0440                            targetComponent.UpdateFromModel(data as BaseModel);
 441                            break;
 442                    }
 443
 285444                    wasCreated = true;
 445                }
 446            }
 447            else
 448            {
 77449                targetComponent = EntityComponentUpdate(entity, classId, data);
 450            }
 451
 362452            var isTransform = classId == CLASS_ID_COMPONENT.TRANSFORM;
 362453            var avoidThrottling = isSBCNerfEnabled ? isTransform && wasCreated : isTransform;
 454
 362455            if (targetComponent != null && targetComponent is IOutOfSceneBoundariesHandler)
 305456                sceneBoundsChecker?.AddEntityToBeChecked(entity, runPreliminaryEvaluation: avoidThrottling);
 457
 362458            physicsSyncController.MarkDirty();
 362459            cullingController.MarkDirty();
 460
 362461            return targetComponent;
 462        }
 463
 464        public IEntityComponent EntityComponentUpdate(IDCLEntity entity, CLASS_ID_COMPONENT classId,
 465            object data)
 466        {
 101467            if (entity == null)
 468            {
 0469                Debug.LogError($"Can't update the {classId} component of a nonexistent entity!", scene.GetSceneTransform
 0470                return null;
 471            }
 472
 101473            if (!HasComponent(entity, classId))
 474            {
 0475                Debug.LogError($"Entity {entity.entityId} doesn't have a {classId} component to update!", scene.GetScene
 0476                return null;
 477            }
 478
 101479            var targetComponent = GetComponent(entity, classId);
 101480            if (data is string json)
 101481                targetComponent.UpdateFromJSON(json);
 0482            else if (data is Decentraland.Sdk.Ecs6.ComponentBodyPayload payload)
 0483                targetComponent.UpdateFromPb(payload);
 484            else
 0485                targetComponent.UpdateFromModel(data as BaseModel);
 486
 101487            return targetComponent;
 488        }
 489
 490        public void SceneSharedComponentDispose(string id)
 491        {
 93492            if (disposableComponents.TryGetValue(id, out ISharedComponent sharedComponent))
 493            {
 93494                sharedComponent?.Dispose();
 93495                disposableComponents.Remove(id);
 496            }
 93497        }
 498
 499        public ISharedComponent SceneSharedComponentUpdate(string id, BaseModel model)
 500        {
 28501            if (disposableComponents.TryGetValue(id, out ISharedComponent sharedComponent))
 502            {
 28503                sharedComponent.UpdateFromModel(model);
 28504                return sharedComponent;
 505            }
 506
 0507            return null;
 508        }
 509
 510        public ISharedComponent SceneSharedComponentUpdate(string id, string json)
 511        {
 727512            if (disposableComponents.TryGetValue(id, out ISharedComponent disposableComponent))
 513            {
 727514                disposableComponent.UpdateFromJSON(json);
 727515                return disposableComponent;
 516            }
 517
 0518            return null;
 519        }
 520
 521        public ISharedComponent SceneSharedComponentUpdate(string id, ComponentBodyPayload payload)
 522        {
 0523            if (!disposableComponents.TryGetValue(id, out ISharedComponent disposableComponent)) return null;
 524
 0525            disposableComponent.UpdateFromPb(payload);
 0526            return disposableComponent;
 527        }
 528
 529        public void EntityComponentRemove(long entityId, string componentName)
 530        {
 36531            IDCLEntity entity = scene.GetEntityById(entityId);
 532
 36533            if (entity == null)
 534            {
 0535                return;
 536            }
 537
 538            switch (componentName)
 539            {
 540                case ComponentNameLiterals.Shape:
 0541                    if (entity.meshesInfo.currentShape is BaseShape baseShape)
 542                    {
 0543                        baseShape.DetachFrom(entity);
 544                    }
 545
 0546                    return;
 547
 548                case ComponentNameLiterals.OnClick:
 549                    {
 1550                        if (TryGetBaseComponent(entity, CLASS_ID_COMPONENT.UUID_ON_CLICK, out IEntityComponent component
 551                        {
 1552                            Utils.SafeDestroy(component.GetTransform().gameObject);
 1553                            RemoveComponent(entity, CLASS_ID_COMPONENT.UUID_ON_CLICK);
 554                        }
 555
 1556                        return;
 557                    }
 558                case ComponentNameLiterals.OnPointerDown:
 559                    {
 1560                        if (TryGetBaseComponent(entity, CLASS_ID_COMPONENT.UUID_ON_DOWN, out IEntityComponent component)
 561                        {
 1562                            Utils.SafeDestroy(component.GetTransform().gameObject);
 1563                            RemoveComponent(entity, CLASS_ID_COMPONENT.UUID_ON_DOWN);
 564                        }
 565                    }
 1566                    return;
 567                case ComponentNameLiterals.OnPointerUp:
 568                    {
 1569                        if (TryGetBaseComponent(entity, CLASS_ID_COMPONENT.UUID_ON_UP, out IEntityComponent component))
 570                        {
 1571                            Utils.SafeDestroy(component.GetTransform().gameObject);
 1572                            RemoveComponent(entity, CLASS_ID_COMPONENT.UUID_ON_UP);
 573                        }
 574                    }
 1575                    return;
 576                case ComponentNameLiterals.OnPointerHoverEnter:
 577                    {
 2578                        if (TryGetBaseComponent(entity, CLASS_ID_COMPONENT.UUID_ON_HOVER_ENTER, out IEntityComponent com
 579                        {
 2580                            Utils.SafeDestroy(component.GetTransform().gameObject);
 2581                            RemoveComponent(entity, CLASS_ID_COMPONENT.UUID_ON_HOVER_ENTER);
 582                        }
 583                    }
 2584                    return;
 585                case ComponentNameLiterals.OnPointerHoverExit:
 586                    {
 2587                        if (TryGetBaseComponent(entity, CLASS_ID_COMPONENT.UUID_ON_HOVER_EXIT, out IEntityComponent comp
 588                        {
 2589                            Utils.SafeDestroy(component.GetTransform().gameObject);
 2590                            RemoveComponent(entity, CLASS_ID_COMPONENT.UUID_ON_HOVER_EXIT);
 591                        }
 592                    }
 2593                    return;
 594                case ComponentNameLiterals.Transform:
 595                    {
 0596                        if (TryGetBaseComponent(entity, CLASS_ID_COMPONENT.AVATAR_ATTACH, out IEntityComponent component
 597                        {
 0598                            component.Cleanup();
 0599                            RemoveComponent(entity, CLASS_ID_COMPONENT.AVATAR_ATTACH);
 600                        }
 601                    }
 0602                    return;
 603
 604                default:
 605                    {
 73606                        IEntityComponent component = GetComponentsDictionary(entity).FirstOrDefault(kp => kp.Value.compo
 29607                        if (component == null)
 608                            break;
 609
 14610                        RemoveComponent(entity, (CLASS_ID_COMPONENT)component.GetClassId());
 611
 14612                        if (component is ICleanable cleanableComponent)
 14613                            cleanableComponent.Cleanup();
 614
 14615                        bool released = false;
 14616                        if (component is IPoolableObjectContainer poolableContainer)
 617                        {
 12618                            if (poolableContainer.poolableObject != null)
 619                            {
 2620                                poolableContainer.poolableObject.Release();
 2621                                released = true;
 622                            }
 623                        }
 14624                        if (!released)
 625                        {
 12626                            Utils.SafeDestroy(component.GetTransform()?.gameObject);
 627                        }
 628                        break;
 629                    }
 630            }
 29631        }
 632
 633        public void DisposeAllSceneComponents()
 634        {
 736635            List<string> allDisposableComponents = disposableComponents.Select(x => x.Key).ToList();
 1472636            foreach (string id in allDisposableComponents)
 637            {
 443638                parcelScenesCleaner.MarkDisposableComponentForCleanup(scene, id);
 639            }
 293640        }
 641    }
 642}

Methods/Properties

ECSComponentsManagerLegacy(DCL.Controllers.IParcelScene, DCL.IRuntimeComponentFactory, DCL.IParcelScenesCleaner, DCL.Controllers.ISceneBoundsChecker, DCL.IPhysicsSyncController, DCL.Rendering.ICullingController, FeatureFlag)
ECSComponentsManagerLegacy(DCL.Controllers.IParcelScene)
AddSharedComponent(DCL.Models.IDCLEntity, System.Type, DCL.Components.ISharedComponent)
RemoveSharedComponent(DCL.Models.IDCLEntity, System.Type, System.Boolean)
TryGetComponent[T](DCL.Models.IDCLEntity)
TryGetBaseComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID_COMPONENT, DCL.Components.IEntityComponent&)
TryGetSharedComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID, DCL.Components.ISharedComponent&)
GetSharedComponent(DCL.Models.IDCLEntity, System.Type)
HasComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID_COMPONENT)
HasSharedComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID)
RemoveComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID_COMPONENT)
AddComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID_COMPONENT, DCL.Components.IEntityComponent)
GetComponent(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID_COMPONENT)
GetComponents()
GetSharedComponents()
GetComponentsDictionary(DCL.Models.IDCLEntity)
GetSharedComponentsDictionary(DCL.Models.IDCLEntity)
GetComponentsCount()
CleanComponents(DCL.Models.IDCLEntity)
HasSceneSharedComponent(System.String)
GetSceneSharedComponent(System.String)
TryGetSceneSharedComponent(System.String, DCL.Components.ISharedComponent&)
GetSceneSharedComponentsDictionary()
GetSceneSharedComponentsCount()
AddSceneSharedComponent(System.String, DCL.Components.ISharedComponent)
RemoveSceneSharedComponent(System.String)
SceneSharedComponentCreate(System.String, System.Int32)
GetSceneSharedComponent[T]()
SceneSharedComponentAttach(System.Int64, System.String)
EntityComponentCreateOrUpdate(System.Int64, DCL.Models.CLASS_ID_COMPONENT, System.Object)
EntityComponentUpdate(DCL.Models.IDCLEntity, DCL.Models.CLASS_ID_COMPONENT, System.Object)
SceneSharedComponentDispose(System.String)
SceneSharedComponentUpdate(System.String, BaseModel)
SceneSharedComponentUpdate(System.String, System.String)
SceneSharedComponentUpdate(System.String, Decentraland.Sdk.Ecs6.ComponentBodyPayload)
EntityComponentRemove(System.Int64, System.String)
DisposeAllSceneComponents()