< 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:82
Uncovered lines:31
Coverable lines:113
Total lines:275
Line coverage:72.5% (82 of 113)
Covered branches:0
Total branches:0

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%7.147085.71%
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;
 8using DCL.CameraTool;
 9using UnityEngine;
 10using UnityEngine.Rendering.Universal;
 11
 12namespace DCL.Camera
 13{
 14    public class CameraController : MonoBehaviour
 15    {
 16
 17        private readonly DataStoreRef<DataStore_LoadingScreen> dataStoreLoadingScreen;
 18        [SerializeField] internal new UnityEngine.Camera camera;
 19
 20        private Transform cameraTransform;
 21
 22        [SerializeField]
 23        internal CinemachineFreeLook thirdPersonCamera;
 24
 25        [Header("Virtual Cameras")]
 26        [SerializeField]
 27        internal CinemachineBrain cameraBrain;
 28
 29        [SerializeField]
 30        internal CameraStateBase[] cameraModes;
 31
 32        [Header("InputActions")]
 33        [SerializeField]
 34        internal InputAction_Trigger cameraChangeAction;
 35        [SerializeField]
 36        internal InputAction_Measurable mouseWheelAction;
 37
 38        internal Dictionary<CameraMode.ModeId, CameraStateBase> cachedModeToVirtualCamera;
 39
 40        public delegate void CameraBlendStarted();
 41
 42        public event CameraBlendStarted onCameraBlendStarted;
 43
 44        public delegate void CameraBlendFinished();
 45
 46        public event CameraBlendFinished onCameraBlendFinished;
 47
 48        private bool wasBlendingLastFrame;
 49
 42350        private float mouseWheelThreshold = 0.04f;
 51
 1496552        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 1496553        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 1496554        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 81055        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 1496556        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 57
 1499758        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 59
 60        [HideInInspector]
 61        public Action<CameraMode.ModeId> onSetCameraMode;
 62
 63        private void Awake()
 64        {
 40565            cameraTransform = this.camera.transform;
 40566            DataStore.i.camera.transform.Set(cameraTransform);
 67
 40568            SetCameraEnabledState(CommonScriptableObjects.rendererState.Get());
 69
 40570            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 71
 202572            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 73
 40574            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 75            {
 121576                while (iterator.MoveNext())
 77                {
 81078                    iterator.Current.Value.Initialize(camera);
 79                }
 40580            }
 81
 40582            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 40583            mouseWheelAction.OnValueChanged += OnMouseWheelChangeValue;
 40584            worldOffset.OnChange += OnWorldReposition;
 40585            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 86
 40587            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 88
 40589            dataStoreLoadingScreen.Ref.decoupledLoadingHUD.visible.OnChange += OnDecoupledLoadingScreenChange;
 40590            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 40591            CommonScriptableObjects.isLoadingHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 92
 40593            DataStore.i.camera.outputTexture.OnChange += OnOutputTextureChange;
 40594            OnOutputTextureChange(DataStore.i.camera.outputTexture.Get(), null);
 95
 40596            DataStore.i.camera.invertYAxis.OnChange += SetInvertYAxis;
 40597            SetInvertYAxis(DataStore.i.camera.invertYAxis.Get(), false);
 98
 40599            wasBlendingLastFrame = false;
 405100        }
 101
 102        private void OnDecoupledLoadingScreenChange(bool visibleState, bool prevVisibleState)
 103        {
 0104            if (visibleState == prevVisibleState)
 0105                return;
 106
 0107            SetCameraEnabledState(!visibleState);
 0108        }
 109
 110        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 111        {
 4112            if (visibleState == prevVisibleState)
 0113                return;
 114
 4115            SetCameraEnabledState(!visibleState && CommonScriptableObjects.rendererState.Get());
 4116        }
 117
 810118        void OnOutputTextureChange(RenderTexture current, RenderTexture previous) { camera.targetTexture = current; }
 119
 120        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 121        {
 0122            foreach (CameraStateBase cameraMode in cameraModes)
 123            {
 0124                if (cameraMode.GetType() == typeof(T))
 125                {
 0126                    searchedCameraState = cameraMode;
 0127                    return true;
 128                }
 129            }
 130
 0131            searchedCameraState = null;
 0132            return false;
 133        }
 134
 135        private void CameraBlocked_OnChange(bool current, bool previous)
 136        {
 0137            foreach (CameraStateBase cam in cameraModes)
 138            {
 0139                cam.OnBlock(current);
 140            }
 0141        }
 142
 143        private void OnMouseWheelChangeValue(DCLAction_Measurable action, float value)
 144        {
 0145            if ((value > -mouseWheelThreshold && value < mouseWheelThreshold) || CommonScriptableObjects.cameraModeInput
 0146                return;
 0147            if (Utils.IsPointerOverUIElement())
 0148                return;
 149
 0150            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson && value < -mouseWheelThreshold)
 0151                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 152
 0153            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.ThirdPerson && value > mouseWheelThreshold)
 0154                SetCameraMode(CameraMode.ModeId.FirstPerson);
 0155        }
 156
 157        private void OnCameraChangeAction(DCLAction_Trigger action)
 158        {
 1159            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 160            {
 0161                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 162            }
 163            else
 164            {
 1165                SetCameraMode(CameraMode.ModeId.FirstPerson);
 166            }
 1167        }
 168
 0169        public LayerMask GetCulling() => camera.cullingMask;
 170
 0171        public void SetCulling(LayerMask mask) => camera.cullingMask = mask;
 172
 6173        public void SetCameraMode(CameraMode.ModeId newMode) { CommonScriptableObjects.cameraMode.Set(newMode); }
 174
 175        private void OnCameraModeChange(CameraMode.ModeId current, CameraMode.ModeId previous)
 176        {
 413177            cachedModeToVirtualCamera[previous].OnUnselect();
 413178            cachedModeToVirtualCamera[current].OnSelect();
 179
 413180            WebInterface.ReportCameraChanged(current);
 181
 413182            onSetCameraMode?.Invoke(current);
 8183        }
 184
 1143185        public CameraStateBase GetCameraMode(CameraMode.ModeId mode) { return cameraModes.FirstOrDefault(x => x.cameraMo
 186
 4187        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 188
 189        private void Update()
 190        {
 14965191            cameraForward.Set(cameraTransform.forward);
 14965192            cameraRight.Set(cameraTransform.right);
 14965193            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 14965194            cameraPosition.Set(cameraTransform.position);
 14965195            cameraIsBlending.Set(cameraBrain.IsBlending);
 196
 14965197            if (cameraBrain.IsBlending)
 198            {
 8199                if (!wasBlendingLastFrame)
 8200                    onCameraBlendStarted?.Invoke();
 201
 8202                wasBlendingLastFrame = true;
 203            }
 14957204            else if (wasBlendingLastFrame)
 205            {
 0206                onCameraBlendFinished?.Invoke();
 207
 0208                wasBlendingLastFrame = false;
 209            }
 210
 14965211            currentCameraState?.OnUpdate();
 14965212        }
 213
 214        public void SetRotation(string setRotationPayload)
 215        {
 6216            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6217            currentCameraState?.OnSetRotation(payload);
 6218        }
 219
 0220        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 221
 222        public Vector3 GetRotation()
 223        {
 12224            if (currentCameraState != null)
 12225                return currentCameraState.OnGetRotation();
 226
 0227            return Vector3.zero;
 228        }
 229
 0230        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 231
 405232        public UnityEngine.Camera GetCamera() { return camera; }
 233
 834234        private void SetInvertYAxis(bool current, bool previous) { thirdPersonCamera.m_YAxis.m_InvertInput = !current; }
 235
 236        private void SetCameraEnabledState(bool enabled)
 237        {
 409238            camera.enabled = enabled;
 409239        }
 240
 241        private void OnDestroy()
 242        {
 405243            if (cachedModeToVirtualCamera != null)
 244            {
 405245                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 246                {
 1215247                    while (iterator.MoveNext())
 248                    {
 810249                        iterator.Current.Value.Cleanup();
 250                    }
 405251                }
 252            }
 253
 405254            worldOffset.OnChange -= OnWorldReposition;
 405255            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 405256            mouseWheelAction.OnValueChanged -= OnMouseWheelChangeValue;
 405257            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 405258            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 405259            CommonScriptableObjects.isLoadingHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 405260            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 405261            DataStore.i.camera.outputTexture.OnChange -= OnOutputTextureChange;
 405262            DataStore.i.camera.invertYAxis.OnChange -= SetInvertYAxis;
 405263            dataStoreLoadingScreen.Ref.decoupledLoadingHUD.visible.OnChange -= OnFullscreenUIVisibilityChange;
 405264        }
 265
 266        [Serializable]
 267        public class SetRotationPayload
 268        {
 269            public float x;
 270            public float y;
 271            public float z;
 272            public Vector3? cameraTarget;
 273        }
 274    }
 275}