< Summary

Class:ECSSystemsController
Assembly:ECS7Plugin.Systems
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/ECSSystemsController.cs
Covered lines:43
Uncovered lines:1
Coverable lines:44
Total lines:143
Line coverage:97.7% (43 of 44)
Covered branches:0
Total branches:0

Metrics

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

File(s)

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

#LineLine coverage
 1using DCL;
 2using DCL.ECSComponents;
 3using ECSSystems.BillboardSystem;
 4using ECSSystems.CameraSystem;
 5using ECSSystems.InputSenderSystem;
 6using ECSSystems.MaterialSystem;
 7using ECSSystems.PlayerSystem;
 8using ECSSystems.PointerInputSystem;
 9using ECSSystems.ScenesUiSystem;
 10using ECSSystems.VideoPlayerSystem;
 11using ECSSystems.UIInputSenderSystem;
 12using ECSSystems.VisibilitySystem;
 13using System;
 14using System.Collections.Generic;
 15using UnityEngine;
 16using UnityEngine.UIElements;
 17using ECS7System = System.Action;
 18using Environment = DCL.Environment;
 19using Object = UnityEngine.Object;
 20
 21public class ECSSystemsController : IDisposable
 22{
 23    private readonly IList<ECS7System> updateSystems;
 24    private readonly IList<ECS7System> lateUpdateSystems;
 25    private readonly IUpdateEventHandler updateEventHandler;
 26    private readonly ECS7System componentWriteSystem;
 27    private readonly ECS7System internalComponentWriteSystem;
 28    private readonly ECSScenesUiSystem uiSystem;
 29    private readonly ECSBillboardSystem billboardSystem;
 30    private readonly ECSCameraEntitySystem cameraEntitySystem;
 31    private readonly ECSPlayerTransformSystem playerTransformSystem;
 32    private readonly ECSVideoPlayerSystem videoPlayerSystem;
 33    private readonly ECSUIInputSenderSystem uiInputSenderSystem;
 34    private readonly GameObject hoverCanvas;
 35    private readonly GameObject scenesUi;
 36    private readonly DataStoreRef<DataStore_LoadingScreen> dataStoreLoadingScreen;
 37
 38
 239    public ECSSystemsController(ECS7System componentWriteSystem, SystemsContext context)
 40    {
 241        this.updateEventHandler = Environment.i.platform.updateEventHandler;
 242        this.componentWriteSystem = componentWriteSystem;
 243        this.internalComponentWriteSystem = context.internalEcsComponents.WriteSystemUpdate;
 44
 245        var canvas = Resources.Load<GameObject>("ECSInteractionHoverCanvas");
 246        hoverCanvas = Object.Instantiate(canvas);
 247        hoverCanvas.name = "_ECSInteractionHoverCanvas";
 248        IECSInteractionHoverCanvas interactionHoverCanvas = hoverCanvas.GetComponent<IECSInteractionHoverCanvas>();
 49
 250        var scenesUiResource = Resources.Load<UIDocument>("ScenesUI");
 251        var scenesUiDocument = Object.Instantiate(scenesUiResource);
 252        scenesUiDocument.name = "_ECSScenesUI";
 253        scenesUi = scenesUiDocument.gameObject;
 54
 55        BaseVariable<bool> loadingScreenVisible;
 56
 257        if (DataStore.i.featureFlags.flags.Get().IsFeatureEnabled(DataStore.i.featureFlags.DECOUPLED_LOADING_SCREEN_FF))
 058            loadingScreenVisible = dataStoreLoadingScreen.Ref.decoupledLoadingHUD.visible;
 59        else
 260            loadingScreenVisible = dataStoreLoadingScreen.Ref.loadingHUD.visible;
 61
 62
 263        uiSystem = new ECSScenesUiSystem(scenesUiDocument,
 64            context.internalEcsComponents.uiContainerComponent,
 65            DataStore.i.ecs7.scenes, Environment.i.world.state, loadingScreenVisible);
 66
 267        billboardSystem = new ECSBillboardSystem(context.billboards, DataStore.i.camera);
 268        videoPlayerSystem = new ECSVideoPlayerSystem(context.internalEcsComponents.videoPlayerComponent, context.interna
 69
 270        cameraEntitySystem = new ECSCameraEntitySystem(context.componentWriter, new PBCameraMode(), new PBPointerLock(),
 71            DataStore.i.ecs7.scenes, DataStore.i.camera.transform, CommonScriptableObjects.worldOffset, CommonScriptable
 72
 273        playerTransformSystem = new ECSPlayerTransformSystem(context.componentWriter, DataStore.i.ecs7.scenes,
 74            DataStore.i.world.avatarTransform, CommonScriptableObjects.worldOffset);
 75
 276        uiInputSenderSystem = new ECSUIInputSenderSystem(context.internalEcsComponents.uiInputResultsComponent, context.
 77
 278        updateEventHandler.AddListener(IUpdateEventHandler.EventType.Update, Update);
 279        updateEventHandler.AddListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 80
 281        updateSystems = new ECS7System[]
 82        {
 83            ECSTransformParentingSystem.Update,
 84            ECSMaterialSystem.CreateSystem(context.componentGroups.texturizableGroup,
 85                context.internalEcsComponents.texturizableComponent, context.internalEcsComponents.materialComponent),
 86            ECSVisibilitySystem.CreateSystem(context.componentGroups.visibilityGroup,
 87                context.internalEcsComponents.renderersComponent, context.internalEcsComponents.visibilityComponent),
 88            uiSystem.Update,
 89            ECSPointerInputSystem.CreateSystem(
 90                context.internalEcsComponents.onPointerColliderComponent,
 91                context.internalEcsComponents.inputEventResultsComponent,
 92                context.pointerEvents,
 93                interactionHoverCanvas,
 94                Environment.i.world.state,
 95                DataStore.i.ecs7),
 96            ECSInputSenderSystem.CreateSystem(context.internalEcsComponents.inputEventResultsComponent, context.componen
 97            uiInputSenderSystem.Update,
 98            billboardSystem.Update,
 99            videoPlayerSystem.Update,
 100        };
 101
 2102        lateUpdateSystems = new ECS7System[]
 103        {
 104            cameraEntitySystem.Update,
 105            playerTransformSystem.Update
 106        };
 2107    }
 108
 109    public void Dispose()
 110    {
 2111        updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.Update, Update);
 2112        updateEventHandler.RemoveListener(IUpdateEventHandler.EventType.LateUpdate, LateUpdate);
 2113        uiSystem.Dispose();
 2114        cameraEntitySystem.Dispose();
 2115        playerTransformSystem.Dispose();
 2116        Object.Destroy(hoverCanvas);
 2117        Object.Destroy(scenesUi);
 2118    }
 119
 120    private void Update()
 121    {
 13122        componentWriteSystem.Invoke();
 123
 13124        int count = updateSystems.Count;
 125
 260126        for (int i = 0; i < count; i++)
 127        {
 117128            updateSystems[i].Invoke();
 129        }
 130
 13131        internalComponentWriteSystem.Invoke();
 13132    }
 133
 134    private void LateUpdate()
 135    {
 13136        int count = lateUpdateSystems.Count;
 137
 78138        for (int i = 0; i < count; i++)
 139        {
 26140            lateUpdateSystems[i].Invoke();
 141        }
 13142    }
 143}