< Summary

Class:DCL.ECS7.ECS7Plugin
Assembly:ECS7Plugin
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECS7Plugin.cs
Covered lines:32
Uncovered lines:29
Coverable lines:61
Total lines:138
Line coverage:52.4% (32 of 61)
Covered branches:0
Total branches:0
Covered methods:2
Total methods:4
Method coverage:50% (2 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECS7Plugin()0%11110100%
Dispose()0%110100%
SceneControllerOnNewSceneAdded(...)0%6200%
SceneControllerOnSceneRemoved(...)0%20400%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/ECS7Plugin.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.CRDT;
 3using DCL.ECS7.ComponentWrapper;
 4using DCL.ECS7.ComponentWrapper.Generic;
 5using DCL.ECSComponents;
 6using DCL.ECSRuntime;
 7using RPC.Context;
 8using System.Collections.Generic;
 9
 10namespace DCL.ECS7
 11{
 12    public class ECS7Plugin : IPlugin
 13    {
 14        private const int MAX_EXPECTED_SCENES = 81; // Scene Load Radius 4 -> max scenes 81
 15
 16        private readonly IECSComponentWriter componentWriter;
 17        private readonly ECS7ComponentsComposer componentsComposer;
 18        private readonly ECSSystemsController systemsController;
 19        private readonly ECSComponentsFactory componentsFactory;
 20        private readonly InternalECSComponents internalEcsComponents;
 21        private readonly CrdtExecutorsManager crdtExecutorsManager;
 22        private readonly Dictionary<int, IParcelScene> sceneNumberMapping;
 23        internal readonly ECSComponentsManager componentsManager;
 24        private readonly BaseList<IParcelScene> loadedScenes;
 25        private readonly ISceneController sceneController;
 26        private readonly SceneStateHandler sceneStateHandler;
 27
 28        private readonly Dictionary<int, ComponentWriter> componentWriters;
 29        private readonly Dictionary<int, DualKeyValueSet<long, int, WriteData>> scenesOutgoingMsgs;
 30
 131        public ECS7Plugin()
 32        {
 133            DataStore.i.ecs7.isEcs7Enabled = true;
 134            loadedScenes = DataStore.i.ecs7.scenes;
 135            CRDTServiceContext crdtContext = DataStore.i.rpc.context.crdt;
 136            RestrictedActionsContext rpcRestrictedActionsContext = DataStore.i.rpc.context.restrictedActions;
 37
 138            sceneController = Environment.i.world.sceneController;
 139            Dictionary<int, ICRDTExecutor> crdtExecutors = new Dictionary<int, ICRDTExecutor>(MAX_EXPECTED_SCENES);
 140            crdtContext.CrdtExecutors = crdtExecutors;
 41
 142            componentWriters = new Dictionary<int, ComponentWriter>(MAX_EXPECTED_SCENES);
 143            scenesOutgoingMsgs = crdtContext.ScenesOutgoingMsgs;
 44
 145            componentsFactory = new ECSComponentsFactory();
 46
 147            componentsManager = new ECSComponentsManager(componentsFactory.componentBuilders);
 148            internalEcsComponents = new InternalECSComponents(componentsManager, componentsFactory, crdtExecutors);
 49
 150            crdtExecutorsManager = new CrdtExecutorsManager(crdtExecutors, componentsManager, sceneController, crdtConte
 51
 152            componentWriter = new ECSComponentWriter();
 53
 154            componentsComposer = new ECS7ComponentsComposer(componentsFactory, componentWriter, internalEcsComponents);
 55
 156            SystemsContext systemsContext = new SystemsContext(
 57                componentWriters,
 58                internalEcsComponents,
 59                new ComponentGroups(componentsManager),
 60                (ECSComponent<PBBillboard>)componentsManager.GetOrCreateComponent(ComponentID.BILLBOARD),
 61                (ECSComponent<ECSTransform>)componentsManager.GetOrCreateComponent(ComponentID.TRANSFORM),
 062                new WrappedComponentPool<IWrappedComponent<PBCameraMode>>(MAX_EXPECTED_SCENES, () => new ProtobufWrapped
 063                new WrappedComponentPool<IWrappedComponent<PBPointerLock>>(MAX_EXPECTED_SCENES, () => new ProtobufWrappe
 064                new WrappedComponentPool<IWrappedComponent<ECSTransform>>(MAX_EXPECTED_SCENES * 2, () => new TransformWr
 065                new WrappedComponentPool<IWrappedComponent<PBVideoEvent>>(MAX_EXPECTED_SCENES, () => new ProtobufWrapped
 066                new WrappedComponentPool<IWrappedComponent<PBRaycastResult>>(MAX_EXPECTED_SCENES, () => new ProtobufWrap
 067                new WrappedComponentPool<IWrappedComponent<PBGltfContainerLoadingState>>(MAX_EXPECTED_SCENES * 10, () =>
 068                new WrappedComponentPool<IWrappedComponent<PBEngineInfo>>(MAX_EXPECTED_SCENES, () => new ProtobufWrapped
 069                new WrappedComponentPool<IWrappedComponent<PBUiCanvasInformation>>(MAX_EXPECTED_SCENES, () => new Protob
 070                new WrappedComponentPool<IWrappedComponent<PBPointerEventsResult>>(MAX_EXPECTED_SCENES * 10, () => new P
 071                new WrappedComponentPool<IWrappedComponent<PBTweenState>>(MAX_EXPECTED_SCENES * 10, () => new ProtobufWr
 72            );
 73
 174            systemsController = new ECSSystemsController(systemsContext);
 75
 176            sceneNumberMapping = new Dictionary<int, IParcelScene>(MAX_EXPECTED_SCENES); // Scene Load Radius 4 -> max s
 77
 178            sceneStateHandler = new SceneStateHandler(
 79                crdtContext,
 80                rpcRestrictedActionsContext,
 81                sceneNumberMapping,
 82                internalEcsComponents.EngineInfo,
 83                internalEcsComponents.GltfContainerLoadingStateComponent);
 84
 185            sceneController.OnNewSceneAdded += SceneControllerOnNewSceneAdded;
 186            sceneController.OnSceneRemoved += SceneControllerOnSceneRemoved;
 187        }
 88
 89        public void Dispose()
 90        {
 191            componentsComposer.Dispose();
 192            componentWriter.Dispose();
 193            systemsController.Dispose();
 194            internalEcsComponents.Dispose();
 195            crdtExecutorsManager.Dispose();
 196            sceneStateHandler.Dispose();
 97
 198            sceneController.OnNewSceneAdded -= SceneControllerOnNewSceneAdded;
 199            sceneController.OnSceneRemoved -= SceneControllerOnSceneRemoved;
 1100        }
 101
 102        private void SceneControllerOnNewSceneAdded(IParcelScene scene)
 103        {
 0104            if (!scene.sceneData.sdk7) return;
 105
 0106            int sceneNumber = scene.sceneData.sceneNumber;
 0107            sceneNumberMapping.Add(sceneNumber, scene);
 0108            sceneStateHandler.InitializeEngineInfoComponent(sceneNumber);
 0109            var outgoingMsgs = new DualKeyValueSet<long, int, WriteData>(10);
 0110            scenesOutgoingMsgs.Add(sceneNumber, outgoingMsgs);
 0111            componentWriters.Add(sceneNumber, new ComponentWriter(outgoingMsgs));
 112
 0113            loadedScenes.Add(scene);
 0114        }
 115
 116        private void SceneControllerOnSceneRemoved(IParcelScene scene)
 117        {
 0118            if (!scene.sceneData.sdk7) return;
 119
 0120            loadedScenes.Remove(scene);
 121
 0122            int sceneNumber = scene.sceneData.sceneNumber;
 0123            sceneNumberMapping.Remove(sceneNumber);
 124
 0125            if (scenesOutgoingMsgs.TryGetValue(sceneNumber, out var outgoingMsgs))
 126            {
 0127                var pairs = outgoingMsgs.Pairs;
 128
 0129                for (int i = 0; i < pairs.Count; i++)
 130                {
 0131                    pairs[i].value.Dispose();
 132                }
 133            }
 134
 0135            componentWriters.Remove(sceneNumber);
 0136        }
 137    }
 138}