< Summary

Class:ECSSystemsController
Assembly:ECS7Plugin.Systems
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/ECSSystemsController.cs
Covered lines:25
Uncovered lines:10
Coverable lines:35
Total lines:111
Line coverage:71.4% (25 of 35)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSSystemsController(...)0%110100%
Dispose()0%110100%
Update()0%6200%
LateUpdate()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/ECSSystemsController.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using ECSSystems.BillboardSystem;
 5using ECSSystems.CameraSystem;
 6using ECSSystems.InputSenderSystem;
 7using ECSSystems.MaterialSystem;
 8using ECSSystems.PlayerSystem;
 9using ECSSystems.PointerInputSystem;
 10using ECSSystems.ScenesUiSystem;
 11using ECSSystems.VisibilitySystem;
 12using UnityEngine;
 13using UnityEngine.UIElements;
 14using ECS7System = System.Action;
 15using Environment = DCL.Environment;
 16using Object = UnityEngine.Object;
 17
 18public class ECSSystemsController : IDisposable
 19{
 20    private readonly IList<ECS7System> updateSystems;
 21    private readonly IList<ECS7System> lateUpdateSystems;
 22    private readonly IUpdateEventHandler updateEventHandler;
 23    private readonly ECS7System componentWriteSystem;
 24    private readonly ECS7System internalComponentWriteSystem;
 25    private readonly ECSScenesUiSystem uiSystem;
 26    private readonly ECSBillboardSystem billboardSystem;
 27    private readonly GameObject hoverCanvas;
 28    private readonly GameObject scenesUi;
 29
 130    public ECSSystemsController(ECS7System componentWriteSystem, SystemsContext context)
 31    {
 132        this.updateEventHandler = Environment.i.platform.updateEventHandler;
 133        this.componentWriteSystem = componentWriteSystem;
 134        this.internalComponentWriteSystem = context.internalEcsComponents.WriteSystemUpdate;
 35
 136        var canvas = Resources.Load<GameObject>("ECSInteractionHoverCanvas");
 137        hoverCanvas = Object.Instantiate(canvas);
 138        hoverCanvas.name = "_ECSInteractionHoverCanvas";
 139        IECSInteractionHoverCanvas interactionHoverCanvas = hoverCanvas.GetComponent<IECSInteractionHoverCanvas>();
 40
 141        var scenesUiResource = Resources.Load<UIDocument>("ScenesUI");
 142        var scenesUiDocument = Object.Instantiate(scenesUiResource);
 143        scenesUiDocument.name = "_ECSScenesUI";
 144        scenesUi = scenesUiDocument.gameObject;
 45
 146        uiSystem = new ECSScenesUiSystem(scenesUiDocument,
 47            context.internalEcsComponents.uiContainerComponent,
 48            DataStore.i.ecs7.scenes, Environment.i.world.state, DataStore.i.HUDs.loadingHUD.visible);
 49
 150        billboardSystem = new ECSBillboardSystem(context.billboards, DataStore.i.camera);
 51
 152        updateEventHandler.AddListener(IUpdateEventHandler.EventType.Update, Update);
 153        updateEventHandler.AddListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 54
 155        updateSystems = new ECS7System[]
 56        {
 57            ECSTransformParentingSystem.Update,
 58            ECSMaterialSystem.CreateSystem(context.componentGroups.texturizableGroup,
 59                context.internalEcsComponents.texturizableComponent, context.internalEcsComponents.materialComponent),
 60            ECSVisibilitySystem.CreateSystem(context.componentGroups.visibilityGroup,
 61                context.internalEcsComponents.renderersComponent, context.internalEcsComponents.visibilityComponent),
 62            ECSPointerInputSystem.CreateSystem(
 63                context.internalEcsComponents.onPointerColliderComponent,
 64                context.internalEcsComponents.inputEventResultsComponent,
 65                context.pointerEvents,
 66                interactionHoverCanvas,
 67                Environment.i.world.state,
 68                DataStore.i.ecs7),
 69            ECSInputSenderSystem.CreateSystem(context.internalEcsComponents.inputEventResultsComponent, context.componen
 70            uiSystem.Update,
 71            billboardSystem.Update
 72        };
 73
 174        lateUpdateSystems = new ECS7System[]
 75        {
 76            ECSCameraEntitySystem.CreateSystem(context.componentWriter),
 77            ECSPlayerTransformSystem.CreateSystem(context.componentWriter)
 78        };
 179    }
 80
 81    public void Dispose()
 82    {
 183        updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.Update, Update);
 184        updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 185        uiSystem.Dispose();
 186        Object.Destroy(hoverCanvas);
 187        Object.Destroy(scenesUi);
 188    }
 89
 90    private void Update()
 91    {
 092        componentWriteSystem.Invoke();
 93
 094        int count = updateSystems.Count;
 095        for (int i = 0; i < count; i++)
 96        {
 097            updateSystems[i].Invoke();
 98        }
 99
 0100        internalComponentWriteSystem.Invoke();
 0101    }
 102
 103    private void LateUpdate()
 104    {
 0105        int count = lateUpdateSystems.Count;
 0106        for (int i = 0; i < count; i++)
 107        {
 0108            lateUpdateSystems[i].Invoke();
 109        }
 0110    }
 111}