< Summary

Class:DCL.Camera.CameraController
Assembly:Camera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Camera/CameraController.cs
Covered lines:83
Uncovered lines:32
Coverable lines:115
Total lines:277
Line coverage:72.1% (83 of 115)
Covered branches:0
Total branches:0
Covered methods:22
Total methods:31
Method coverage:70.9% (22 of 31)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraController()0%110100%
Awake()0%440100%
OnDecoupledLoadingScreenChange(...)0%6200%
OnFullscreenUIVisibilityChange(...)0%3.143075%
OnOutputTextureChange(...)0%110100%
TryGetCameraStateByType[T](...)0%12300%
CameraBlocked_OnChange(...)0%6200%
OnMouseWheelChangeValue(...)0%90900%
OnCameraChangeAction(...)0%2.062075%
GetCulling()0%2100%
SetCulling(...)0%2100%
SetCameraMode(...)0%110100%
OnCameraModeChange(...)0%220100%
GetCameraMode(...)0%110100%
OnWorldReposition(...)0%110100%
Update()0%8.128087.5%
SetRotation(...)0%220100%
SetRotation(...)0%6200%
GetRotation()0%2.152066.67%
GetPosition()0%2100%
GetCamera()0%110100%
SetInvertYAxis(...)0%110100%
SetCameraEnabledState(...)0%110100%
OnDestroy()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Camera/CameraController.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using Cinemachine;
 5using DCL.Helpers;
 6using DCL.Interface;
 7using DCL.CameraTool;
 8using UnityEngine;
 9
 10namespace DCL.Camera
 11{
 12    public class CameraController : MonoBehaviour
 13    {
 14
 15        private readonly DataStoreRef<DataStore_LoadingScreen> dataStoreLoadingScreen;
 16        [SerializeField] internal new UnityEngine.Camera camera;
 17
 18        private Transform cameraTransform;
 19
 20        [SerializeField]
 21        internal CinemachineFreeLook thirdPersonCamera;
 22
 23        [Header("Virtual Cameras")]
 24        [SerializeField]
 25        internal CinemachineBrain cameraBrain;
 26
 27        [SerializeField]
 28        internal CameraStateBase[] cameraModes;
 29
 30        [Header("InputActions")]
 31        [SerializeField]
 32        internal InputAction_Trigger cameraChangeAction;
 33        [SerializeField]
 34        internal InputAction_Measurable mouseWheelAction;
 35
 36        internal Dictionary<CameraMode.ModeId, CameraStateBase> cachedModeToVirtualCamera;
 37
 38        public delegate void CameraBlendStarted();
 39
 40        public event CameraBlendStarted onCameraBlendStarted;
 41
 42        public delegate void CameraBlendFinished();
 43
 44        public event CameraBlendFinished onCameraBlendFinished;
 45
 46        private bool wasBlendingLastFrame;
 47
 34148        private float mouseWheelThreshold = 0.04f;
 49
 604950        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 604951        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 604952        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 64853        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 604954        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 55
 608156        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 57
 58        public event Action<CameraMode.ModeId> OnSetCameraMode;
 59
 060        public bool CameraIsBlending => cameraBrain.IsBlending;
 61
 62        private void Awake()
 63        {
 32464            cameraTransform = this.camera.transform;
 32465            DataStore.i.camera.transform.Set(cameraTransform);
 66
 32467            SetCameraEnabledState(CommonScriptableObjects.rendererState.Get());
 68
 32469            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 70
 162071            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 72
 32473            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 74            {
 97275                while (iterator.MoveNext())
 76                {
 64877                    iterator.Current.Value.Initialize(camera);
 78                }
 32479            }
 80
 32481            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 32482            mouseWheelAction.OnValueChanged += OnMouseWheelChangeValue;
 32483            worldOffset.OnChange += OnWorldReposition;
 32484            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 85
 32486            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 87
 32488            dataStoreLoadingScreen.Ref.decoupledLoadingHUD.visible.OnChange += OnDecoupledLoadingScreenChange;
 32489            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 32490            CommonScriptableObjects.isLoadingHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 91
 32492            DataStore.i.camera.outputTexture.OnChange += OnOutputTextureChange;
 32493            OnOutputTextureChange(DataStore.i.camera.outputTexture.Get(), null);
 94
 32495            DataStore.i.camera.invertYAxis.OnChange += SetInvertYAxis;
 32496            SetInvertYAxis(DataStore.i.camera.invertYAxis.Get(), false);
 97
 32498            wasBlendingLastFrame = false;
 32499        }
 100
 101        private void OnDecoupledLoadingScreenChange(bool visibleState, bool prevVisibleState)
 102        {
 0103            if (visibleState == prevVisibleState)
 0104                return;
 105
 0106            SetCameraEnabledState(!visibleState);
 0107        }
 108
 109        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 110        {
 4111            if (visibleState == prevVisibleState)
 0112                return;
 113
 4114            SetCameraEnabledState(!visibleState && CommonScriptableObjects.rendererState.Get());
 4115        }
 116
 648117        void OnOutputTextureChange(RenderTexture current, RenderTexture previous) { camera.targetTexture = current; }
 118
 119        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 120        {
 0121            foreach (CameraStateBase cameraMode in cameraModes)
 122            {
 0123                if (cameraMode.GetType() == typeof(T))
 124                {
 0125                    searchedCameraState = cameraMode;
 0126                    return true;
 127                }
 128            }
 129
 0130            searchedCameraState = null;
 0131            return false;
 132        }
 133
 134        private void CameraBlocked_OnChange(bool current, bool previous)
 135        {
 0136            foreach (CameraStateBase cam in cameraModes)
 137            {
 0138                cam.OnBlock(current);
 139            }
 0140        }
 141
 142        private void OnMouseWheelChangeValue(DCLAction_Measurable action, float value)
 143        {
 0144            if ((value > -mouseWheelThreshold && value < mouseWheelThreshold) || CommonScriptableObjects.cameraModeInput
 0145                return;
 0146            if (Utils.IsPointerOverUIElement())
 0147                return;
 148
 0149            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson && value < -mouseWheelThreshold)
 0150                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 151
 0152            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.ThirdPerson && value > mouseWheelThreshold)
 0153                SetCameraMode(CameraMode.ModeId.FirstPerson);
 0154        }
 155
 156        private void OnCameraChangeAction(DCLAction_Trigger action)
 157        {
 1158            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 159            {
 0160                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 161            }
 162            else
 163            {
 1164                SetCameraMode(CameraMode.ModeId.FirstPerson);
 165            }
 1166        }
 167
 0168        public LayerMask GetCulling() => camera.cullingMask;
 169
 0170        public void SetCulling(LayerMask mask) => camera.cullingMask = mask;
 171
 6172        public void SetCameraMode(CameraMode.ModeId newMode) { CommonScriptableObjects.cameraMode.Set(newMode); }
 173
 174        private void OnCameraModeChange(CameraMode.ModeId current, CameraMode.ModeId previous)
 175        {
 332176            cachedModeToVirtualCamera[previous].OnUnselect();
 332177            cachedModeToVirtualCamera[current].OnSelect();
 178
 332179            WebInterface.ReportCameraChanged(current);
 180
 332181            OnSetCameraMode?.Invoke(current);
 8182        }
 183
 903184        public CameraStateBase GetCameraMode(CameraMode.ModeId mode) { return cameraModes.FirstOrDefault(x => x.cameraMo
 185
 4186        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 187
 188        private void Update()
 189        {
 6053190            if (!camera.enabled) return;
 191
 6049192            cameraForward.Set(cameraTransform.forward);
 6049193            cameraRight.Set(cameraTransform.right);
 6049194            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 6049195            cameraPosition.Set(cameraTransform.position);
 6049196            cameraIsBlending.Set(cameraBrain.IsBlending);
 197
 6049198            if (cameraBrain.IsBlending)
 199            {
 8200                if (!wasBlendingLastFrame)
 8201                    onCameraBlendStarted?.Invoke();
 202
 8203                wasBlendingLastFrame = true;
 204            }
 6041205            else if (wasBlendingLastFrame)
 206            {
 0207                onCameraBlendFinished?.Invoke();
 208
 0209                wasBlendingLastFrame = false;
 210            }
 211
 6049212            currentCameraState?.OnUpdate();
 6049213        }
 214
 215        public void SetRotation(string setRotationPayload)
 216        {
 6217            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6218            currentCameraState?.OnSetRotation(payload);
 6219        }
 220
 0221        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 222
 223        public Vector3 GetRotation()
 224        {
 12225            if (currentCameraState != null)
 12226                return currentCameraState.OnGetRotation();
 227
 0228            return Vector3.zero;
 229        }
 230
 0231        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 232
 233        public virtual UnityEngine.Camera GetCamera() =>
 324234            camera;
 235
 670236        private void SetInvertYAxis(bool current, bool previous) { thirdPersonCamera.m_YAxis.m_InvertInput = !current; }
 237
 238        public virtual void SetCameraEnabledState(bool enabled)
 239        {
 328240            camera.enabled = enabled;
 328241        }
 242
 243        private void OnDestroy()
 244        {
 324245            if (cachedModeToVirtualCamera != null)
 246            {
 324247                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 248                {
 972249                    while (iterator.MoveNext())
 250                    {
 648251                        iterator.Current.Value.Cleanup();
 252                    }
 324253                }
 254            }
 255
 324256            worldOffset.OnChange -= OnWorldReposition;
 324257            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 324258            mouseWheelAction.OnValueChanged -= OnMouseWheelChangeValue;
 324259            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 324260            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 324261            CommonScriptableObjects.isLoadingHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 324262            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 324263            DataStore.i.camera.outputTexture.OnChange -= OnOutputTextureChange;
 324264            DataStore.i.camera.invertYAxis.OnChange -= SetInvertYAxis;
 324265            dataStoreLoadingScreen.Ref.decoupledLoadingHUD.visible.OnChange -= OnFullscreenUIVisibilityChange;
 324266        }
 267
 268        [Serializable]
 269        public class SetRotationPayload
 270        {
 271            public float x;
 272            public float y;
 273            public float z;
 274            public Vector3? cameraTarget;
 275        }
 276    }
 277}