< 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
 60649        private float mouseWheelThreshold = 0.04f;
 50
 528951        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 528952        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 528953        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 118454        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 528955        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 56
 532157        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 58
 59        [HideInInspector]
 60        public Action<CameraMode.ModeId> onSetCameraMode;
 61
 62        private void Awake()
 63        {
 59264            cameraTransform = this.camera.transform;
 59265            DataStore.i.camera.hudsCamera.Set(hudsCamera);
 59266            DataStore.i.camera.transform.Set(cameraTransform);
 67
 59268            CommonScriptableObjects.rendererState.OnChange += OnRenderingStateChanged;
 59269            OnRenderingStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 70
 59271            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 72
 414473            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 74
 59275            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 76            {
 236877                while (iterator.MoveNext())
 78                {
 177679                    iterator.Current.Value.Initialize(camera);
 80                }
 59281            }
 82
 59283            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 59284            mouseWheelAction.OnValueChanged += OnMouseWheelChangeValue;
 59285            worldOffset.OnChange += OnWorldReposition;
 59286            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 87
 59288            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 89
 59290            if (CommonScriptableObjects.isFullscreenHUDOpen)
 091                OnFullscreenUIVisibilityChange(CommonScriptableObjects.isFullscreenHUDOpen.Get(), !CommonScriptableObjec
 92
 59293            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 94
 59295            DataStore.i.camera.outputTexture.OnChange += OnOutputTextureChange;
 59296            OnOutputTextureChange(DataStore.i.camera.outputTexture.Get(), null);
 97
 59298            DataStore.i.camera.invertYAxis.OnChange += SetInvertYAxis;
 59299            SetInvertYAxis(DataStore.i.camera.invertYAxis.Get(), false);
 100
 592101            wasBlendingLastFrame = false;
 592102        }
 103
 104        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 105        {
 0106            if (visibleState == prevVisibleState)
 0107                return;
 108
 0109            SetCameraEnabledState(!visibleState && CommonScriptableObjects.rendererState.Get());
 0110        }
 111
 1184112        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
 2324129        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        {
 600173            cachedModeToVirtualCamera[previous].OnUnselect();
 600174            cachedModeToVirtualCamera[current].OnSelect();
 175
 600176            WebInterface.ReportCameraChanged(current);
 177
 600178            onSetCameraMode?.Invoke(current);
 8179        }
 180
 1704181        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        {
 5289187            cameraForward.Set(cameraTransform.forward);
 5289188            cameraRight.Set(cameraTransform.right);
 5289189            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 5289190            cameraPosition.Set(cameraTransform.position);
 5289191            cameraIsBlending.Set(cameraBrain.IsBlending);
 192
 5289193            if (cameraBrain.IsBlending)
 194            {
 98195                if (!wasBlendingLastFrame)
 44196                    onCameraBlendStarted?.Invoke();
 197
 98198                wasBlendingLastFrame = true;
 98199            }
 5191200            else if (wasBlendingLastFrame)
 201            {
 0202                onCameraBlendFinished?.Invoke();
 203
 0204                wasBlendingLastFrame = false;
 205            }
 206
 5289207            currentCameraState?.OnUpdate();
 5289208        }
 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
 1208230        private void SetInvertYAxis(bool current, bool previous) { thirdPersonCamera.m_YAxis.m_InvertInput = !current; }
 231
 232        private void SetCameraEnabledState(bool enabled)
 233        {
 1162234            camera.enabled = enabled;
 1162235        }
 236
 237        private void OnDestroy()
 238        {
 592239            if (cachedModeToVirtualCamera != null)
 240            {
 592241                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 242                {
 2368243                    while (iterator.MoveNext())
 244                    {
 1776245                        iterator.Current.Value.Cleanup();
 246                    }
 592247                }
 248            }
 249
 592250            worldOffset.OnChange -= OnWorldReposition;
 592251            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 592252            mouseWheelAction.OnValueChanged -= OnMouseWheelChangeValue;
 592253            CommonScriptableObjects.rendererState.OnChange -= OnRenderingStateChanged;
 592254            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 592255            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 592256            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 592257            DataStore.i.camera.outputTexture.OnChange -= OnOutputTextureChange;
 592258            DataStore.i.camera.invertYAxis.OnChange -= SetInvertYAxis;
 592259        }
 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}