< 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:86
Uncovered lines:27
Coverable lines:113
Total lines:270
Line coverage:76.1% (86 of 113)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraController()0%110100%
Awake()0%55096%
OnFullscreenUIVisibilityChange(...)0%12300%
OnOutputTextureChange(...)0%110100%
TryGetCameraStateByType[T](...)0%3.143075%
OnRenderingStateChanged(...)0%220100%
CameraBlocked_OnChange(...)0%6200%
OnMouseWheelChangeValue(...)0%90900%
OnCameraChangeAction(...)0%2.262060%
GetCulling()0%110100%
SetCulling(...)0%110100%
SetCameraMode(...)0%110100%
OnCameraModeChange(...)0%220100%
GetCameraMode(...)0%110100%
OnWorldReposition(...)0%110100%
Update()0%7.127086.67%
SetRotation(...)0%220100%
SetRotation(...)0%6200%
GetRotation()0%2.152066.67%
GetPosition()0%2100%
GetCamera()0%2100%
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        [SerializeField] internal new UnityEngine.Camera camera;
 17        [SerializeField] internal UnityEngine.Camera hudsCamera;
 18
 19        private Transform cameraTransform;
 20
 21        [SerializeField]
 22        internal CinemachineFreeLook thirdPersonCamera;
 23
 24        [Header("Virtual Cameras")]
 25        [SerializeField]
 26        internal CinemachineBrain cameraBrain;
 27
 28        [SerializeField]
 29        internal CameraStateBase[] cameraModes;
 30
 31        [Header("InputActions")]
 32        [SerializeField]
 33        internal InputAction_Trigger cameraChangeAction;
 34        [SerializeField]
 35        internal InputAction_Measurable mouseWheelAction;
 36
 37        internal Dictionary<CameraMode.ModeId, CameraStateBase> cachedModeToVirtualCamera;
 38
 39        public delegate void CameraBlendStarted();
 40
 41        public event CameraBlendStarted onCameraBlendStarted;
 42
 43        public delegate void CameraBlendFinished();
 44
 45        public event CameraBlendFinished onCameraBlendFinished;
 46
 47        private bool wasBlendingLastFrame;
 48
 59649        private float mouseWheelThreshold = 0.04f;
 50
 525351        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 525352        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 525353        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 116654        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 525355        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 56
 528557        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 58
 59        [HideInInspector]
 60        public Action<CameraMode.ModeId> onSetCameraMode;
 61
 62        private void Awake()
 63        {
 58364            cameraTransform = this.camera.transform;
 58365            DataStore.i.camera.hudsCamera.Set(hudsCamera);
 58366            DataStore.i.camera.transform.Set(cameraTransform);
 67
 58368            CommonScriptableObjects.rendererState.OnChange += OnRenderingStateChanged;
 58369            OnRenderingStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 70
 58371            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 72
 408173            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 74
 58375            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 76            {
 233277                while (iterator.MoveNext())
 78                {
 174979                    iterator.Current.Value.Initialize(camera);
 80                }
 58381            }
 82
 58383            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 58384            mouseWheelAction.OnValueChanged += OnMouseWheelChangeValue;
 58385            worldOffset.OnChange += OnWorldReposition;
 58386            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 87
 58388            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 89
 58390            if (CommonScriptableObjects.isFullscreenHUDOpen)
 091                OnFullscreenUIVisibilityChange(CommonScriptableObjects.isFullscreenHUDOpen.Get(), !CommonScriptableObjec
 92
 58393            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 94
 58395            DataStore.i.camera.outputTexture.OnChange += OnOutputTextureChange;
 58396            OnOutputTextureChange(DataStore.i.camera.outputTexture.Get(), null);
 97
 58398            DataStore.i.camera.invertYAxis.OnChange += SetInvertYAxis;
 58399            SetInvertYAxis(DataStore.i.camera.invertYAxis.Get(), false);
 100
 583101            wasBlendingLastFrame = false;
 583102        }
 103
 104        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 105        {
 0106            if (visibleState == prevVisibleState)
 0107                return;
 108
 0109            SetCameraEnabledState(!visibleState && CommonScriptableObjects.rendererState.Get());
 0110        }
 111
 1166112        void OnOutputTextureChange(RenderTexture current, RenderTexture previous) { camera.targetTexture = current; }
 113
 114        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 115        {
 553116            foreach (CameraStateBase cameraMode in cameraModes)
 117            {
 237118                if (cameraMode.GetType() == typeof(T))
 119                {
 79120                    searchedCameraState = cameraMode;
 79121                    return true;
 122                }
 123            }
 124
 0125            searchedCameraState = null;
 0126            return false;
 127        }
 128
 2288129        private void OnRenderingStateChanged(bool enabled, bool prevState) { SetCameraEnabledState(enabled && !CommonScr
 130
 131        private void CameraBlocked_OnChange(bool current, bool previous)
 132        {
 0133            foreach (CameraStateBase cam in cameraModes)
 134            {
 0135                cam.OnBlock(current);
 136            }
 0137        }
 138
 139        private void OnMouseWheelChangeValue(DCLAction_Measurable action, float value)
 140        {
 0141            if ((value > -mouseWheelThreshold && value < mouseWheelThreshold) || CommonScriptableObjects.cameraModeInput
 0142                return;
 0143            if (Utils.IsPointerOverUIElement())
 0144                return;
 145
 0146            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson && value < -mouseWheelThreshold)
 0147                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 148
 0149            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.ThirdPerson && value > mouseWheelThreshold)
 0150                SetCameraMode(CameraMode.ModeId.FirstPerson);
 0151        }
 152
 153        private void OnCameraChangeAction(DCLAction_Trigger action)
 154        {
 1155            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 156            {
 0157                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 0158            }
 159            else
 160            {
 1161                SetCameraMode(CameraMode.ModeId.FirstPerson);
 162            }
 1163        }
 164
 6165        public LayerMask GetCulling() => camera.cullingMask;
 166
 6167        public void SetCulling(LayerMask mask) => camera.cullingMask = mask;
 168
 6169        public void SetCameraMode(CameraMode.ModeId newMode) { CommonScriptableObjects.cameraMode.Set(newMode); }
 170
 171        private void OnCameraModeChange(CameraMode.ModeId current, CameraMode.ModeId previous)
 172        {
 585173            cachedModeToVirtualCamera[previous].OnUnselect();
 585174            cachedModeToVirtualCamera[current].OnSelect();
 175
 585176            WebInterface.ReportCameraChanged(current);
 177
 585178            onSetCameraMode?.Invoke(current);
 2179        }
 180
 1677181        public CameraStateBase GetCameraMode(CameraMode.ModeId mode) { return cameraModes.FirstOrDefault(x => x.cameraMo
 182
 4183        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 184
 185        private void Update()
 186        {
 5253187            cameraForward.Set(cameraTransform.forward);
 5253188            cameraRight.Set(cameraTransform.right);
 5253189            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 5253190            cameraPosition.Set(cameraTransform.position);
 5253191            cameraIsBlending.Set(cameraBrain.IsBlending);
 192
 5253193            if (cameraBrain.IsBlending)
 194            {
 92195                if (!wasBlendingLastFrame)
 38196                    onCameraBlendStarted?.Invoke();
 197
 92198                wasBlendingLastFrame = true;
 92199            }
 5161200            else if (wasBlendingLastFrame)
 201            {
 0202                onCameraBlendFinished?.Invoke();
 203
 0204                wasBlendingLastFrame = false;
 205            }
 206
 5253207            currentCameraState?.OnUpdate();
 5253208        }
 209
 210        public void SetRotation(string setRotationPayload)
 211        {
 6212            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6213            currentCameraState?.OnSetRotation(payload);
 6214        }
 215
 0216        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 217
 218        public Vector3 GetRotation()
 219        {
 12220            if (currentCameraState != null)
 12221                return currentCameraState.OnGetRotation();
 222
 0223            return Vector3.zero;
 224        }
 225
 0226        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 227
 0228        public UnityEngine.Camera GetCamera() { return camera; }
 229
 1190230        private void SetInvertYAxis(bool current, bool previous) { thirdPersonCamera.m_YAxis.m_InvertInput = !current; }
 231
 232        private void SetCameraEnabledState(bool enabled)
 233        {
 1144234            camera.enabled = enabled;
 1144235        }
 236
 237        private void OnDestroy()
 238        {
 583239            if (cachedModeToVirtualCamera != null)
 240            {
 583241                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 242                {
 2332243                    while (iterator.MoveNext())
 244                    {
 1749245                        iterator.Current.Value.Cleanup();
 246                    }
 583247                }
 248            }
 249
 583250            worldOffset.OnChange -= OnWorldReposition;
 583251            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 583252            mouseWheelAction.OnValueChanged -= OnMouseWheelChangeValue;
 583253            CommonScriptableObjects.rendererState.OnChange -= OnRenderingStateChanged;
 583254            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 583255            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 583256            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 583257            DataStore.i.camera.outputTexture.OnChange -= OnOutputTextureChange;
 583258            DataStore.i.camera.invertYAxis.OnChange -= SetInvertYAxis;
 583259        }
 260
 261        [Serializable]
 262        public class SetRotationPayload
 263        {
 264            public float x;
 265            public float y;
 266            public float z;
 267            public Vector3? cameraTarget;
 268        }
 269    }
 270}