< Summary

Class:ECSSystems.CameraSystem.ECSCameraEntitySystem
Assembly:ECS7Plugin.Systems.Camera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/Systems/CameraSystem/ECSCameraEntitySystem.cs
Covered lines:46
Uncovered lines:9
Coverable lines:55
Total lines:125
Line coverage:83.6% (46 of 55)
Covered branches:0
Total branches:0
Covered methods:3
Total methods:4
Method coverage:75% (3 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
ECSCameraEntitySystem(...)0%110100%
Dispose()0%110100%
Update()0%12.8312082.05%
LoadedScenesOnOnAdded(...)0%2100%

File(s)

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

#LineLine coverage
 1using DCL.CameraTool;
 2using DCL.Controllers;
 3using DCL.ECS7;
 4using DCL.ECS7.ComponentWrapper.Generic;
 5using DCL.ECSComponents;
 6using DCL.ECSRuntime;
 7using DCL.Helpers;
 8using DCL.Models;
 9using System;
 10using System.Collections.Generic;
 11using UnityEngine;
 12
 13namespace ECSSystems.CameraSystem
 14{
 15    public class ECSCameraEntitySystem : IDisposable
 16    {
 17        private readonly WrappedComponentPool<IWrappedComponent<PBCameraMode>> cameraModePool;
 18        private readonly WrappedComponentPool<IWrappedComponent<PBPointerLock>> pointerLockPool;
 19        private readonly WrappedComponentPool<IWrappedComponent<ECSTransform>> transformPool;
 20        private readonly BaseVariable<Transform> cameraTransform;
 21        private readonly Vector3Variable worldOffset;
 22        private readonly BaseList<IParcelScene> loadedScenes;
 23        private readonly IReadOnlyDictionary<int, ComponentWriter> componentsWriter;
 24        private readonly BaseVariableAsset<CameraMode.ModeId> cameraMode;
 25        private readonly ECSComponent<ECSTransform> transformComponent;
 26
 527        private Vector3 lastCameraPosition = Vector3.zero;
 528        private Quaternion lastCameraRotation = Quaternion.identity;
 29        private bool newSceneAdded = false;
 30
 531        public ECSCameraEntitySystem(IReadOnlyDictionary<int, ComponentWriter> componentsWriter,
 32            WrappedComponentPool<IWrappedComponent<PBCameraMode>> cameraModePool,
 33            WrappedComponentPool<IWrappedComponent<PBPointerLock>> pointerLockPool,
 34            WrappedComponentPool<IWrappedComponent<ECSTransform>> transformPool,
 35            ECSComponent<ECSTransform> transformComponent,
 36            BaseList<IParcelScene> loadedScenes, BaseVariable<Transform> cameraTransform, Vector3Variable worldOffset,
 37            BaseVariableAsset<CameraMode.ModeId> cameraMode)
 38        {
 539            this.cameraTransform = cameraTransform;
 540            this.worldOffset = worldOffset;
 541            this.loadedScenes = loadedScenes;
 542            this.componentsWriter = componentsWriter;
 543            this.cameraMode = cameraMode;
 544            this.cameraModePool = cameraModePool;
 545            this.pointerLockPool = pointerLockPool;
 546            this.transformPool = transformPool;
 547            this.transformComponent = transformComponent;
 48
 549            loadedScenes.OnAdded += LoadedScenesOnOnAdded;
 550        }
 51
 52        public void Dispose()
 53        {
 554            loadedScenes.OnAdded -= LoadedScenesOnOnAdded;
 555        }
 56
 57        public void Update()
 58        {
 859            var currentCameraTransform = cameraTransform.Get();
 60
 861            if (currentCameraTransform == null)
 062                return;
 63
 864            Vector3 cameraPosition = currentCameraTransform.position;
 865            Quaternion cameraRotation = currentCameraTransform.rotation;
 66
 867            bool updateTransform = newSceneAdded || (lastCameraPosition != cameraPosition || lastCameraRotation != camer
 868            newSceneAdded = false;
 69
 870            lastCameraPosition = cameraPosition;
 871            lastCameraRotation = cameraRotation;
 72
 873            var currentCameraMode = cameraMode.Get();
 74
 875            var cameraModeId = ProtoConvertUtils.UnityEnumToPBCameraEnum(currentCameraMode);
 876            var isCursorLocked = Utils.IsCursorLocked;
 77
 878            Vector3 currentWorldOffset = worldOffset.Get();
 879            IReadOnlyList<IParcelScene> loadedScenes = this.loadedScenes;
 80
 81            IParcelScene scene;
 82
 3283            for (int i = 0; i < loadedScenes.Count; i++)
 84            {
 885                scene = loadedScenes[i];
 86
 887                if (!componentsWriter.TryGetValue(scene.sceneData.sceneNumber, out ComponentWriter writer))
 88                    continue;
 89
 890                var cameraModeWrappedComponent = cameraModePool.Get();
 891                var pooledWrappedComponent = pointerLockPool.Get();
 892                cameraModeWrappedComponent.WrappedComponent.Model.Mode = cameraModeId;
 893                pooledWrappedComponent.WrappedComponent.Model.IsPointerLocked = isCursorLocked;
 94
 895                writer.Put(SpecialEntityId.CAMERA_ENTITY, ComponentID.CAMERA_MODE, cameraModeWrappedComponent);
 896                writer.Put(SpecialEntityId.CAMERA_ENTITY, ComponentID.POINTER_LOCK, pooledWrappedComponent);
 97
 898                if (!updateTransform)
 99                    continue;
 100
 5101                var pooledTransformComponent = transformPool.Get();
 5102                var t = pooledTransformComponent.WrappedComponent.Model;
 5103                t.position = UtilsScene.GlobalToScenePosition(ref scene.sceneData.basePosition, ref cameraPosition, ref 
 5104                t.rotation = cameraRotation;
 105
 5106                writer.Put(SpecialEntityId.CAMERA_ENTITY, ComponentID.TRANSFORM, pooledTransformComponent);
 107
 5108                if (scene.entities.TryGetValue(SpecialEntityId.CAMERA_ENTITY, out var entity))
 109                {
 0110                    ECSTransform stored = transformComponent.Get(scene, entity.entityId)?.model ?? new ECSTransform();
 0111                    stored.position = t.position;
 0112                    stored.rotation = t.rotation;
 0113                    stored.scale = t.scale;
 0114                    stored.parentId = t.parentId;
 0115                    transformComponent.SetModel(scene, entity, stored);
 116                }
 117            }
 8118        }
 119
 120        private void LoadedScenesOnOnAdded(IParcelScene obj)
 121        {
 0122            newSceneAdded = true;
 0123        }
 124    }
 125}