< 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:87
Uncovered lines:23
Coverable lines:110
Total lines:265
Line coverage:79% (87 of 110)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraController()0%110100%
Awake()0%440100%
OnFullscreenUIVisibilityChange(...)0%3.143075%
OnOutputTextureChange(...)0%110100%
TryGetCameraStateByType[T](...)0%3.143075%
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
 61049        private float mouseWheelThreshold = 0.04f;
 50
 532751        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 532752        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 532753        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 119254        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 532755        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 56
 535957        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 58
 59        [HideInInspector]
 60        public Action<CameraMode.ModeId> onSetCameraMode;
 61
 62        private void Awake()
 63        {
 59664            cameraTransform = this.camera.transform;
 59665            DataStore.i.camera.hudsCamera.Set(hudsCamera);
 59666            DataStore.i.camera.transform.Set(cameraTransform);
 67
 59668            SetCameraEnabledState(CommonScriptableObjects.rendererState.Get());
 69
 59670            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 71
 417272            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 73
 59674            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 75            {
 238476                while (iterator.MoveNext())
 77                {
 178878                    iterator.Current.Value.Initialize(camera);
 79                }
 59680            }
 81
 59682            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 59683            mouseWheelAction.OnValueChanged += OnMouseWheelChangeValue;
 59684            worldOffset.OnChange += OnWorldReposition;
 59685            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 86
 59687            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 88
 59689            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 59690            CommonScriptableObjects.isLoadingHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 91
 59692            DataStore.i.camera.outputTexture.OnChange += OnOutputTextureChange;
 59693            OnOutputTextureChange(DataStore.i.camera.outputTexture.Get(), null);
 94
 59695            DataStore.i.camera.invertYAxis.OnChange += SetInvertYAxis;
 59696            SetInvertYAxis(DataStore.i.camera.invertYAxis.Get(), false);
 97
 59698            wasBlendingLastFrame = false;
 59699        }
 100
 101        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 102        {
 4103            if (visibleState == prevVisibleState)
 0104                return;
 105
 4106            SetCameraEnabledState(!visibleState && CommonScriptableObjects.rendererState.Get());
 4107        }
 108
 1192109        void OnOutputTextureChange(RenderTexture current, RenderTexture previous) { camera.targetTexture = current; }
 110
 111        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 112        {
 553113            foreach (CameraStateBase cameraMode in cameraModes)
 114            {
 237115                if (cameraMode.GetType() == typeof(T))
 116                {
 79117                    searchedCameraState = cameraMode;
 79118                    return true;
 119                }
 120            }
 121
 0122            searchedCameraState = null;
 0123            return false;
 124        }
 125
 126        private void CameraBlocked_OnChange(bool current, bool previous)
 127        {
 0128            foreach (CameraStateBase cam in cameraModes)
 129            {
 0130                cam.OnBlock(current);
 131            }
 0132        }
 133
 134        private void OnMouseWheelChangeValue(DCLAction_Measurable action, float value)
 135        {
 0136            if ((value > -mouseWheelThreshold && value < mouseWheelThreshold) || CommonScriptableObjects.cameraModeInput
 0137                return;
 0138            if (Utils.IsPointerOverUIElement())
 0139                return;
 140
 0141            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson && value < -mouseWheelThreshold)
 0142                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 143
 0144            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.ThirdPerson && value > mouseWheelThreshold)
 0145                SetCameraMode(CameraMode.ModeId.FirstPerson);
 0146        }
 147
 148        private void OnCameraChangeAction(DCLAction_Trigger action)
 149        {
 1150            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 151            {
 0152                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 0153            }
 154            else
 155            {
 1156                SetCameraMode(CameraMode.ModeId.FirstPerson);
 157            }
 1158        }
 159
 6160        public LayerMask GetCulling() => camera.cullingMask;
 161
 6162        public void SetCulling(LayerMask mask) => camera.cullingMask = mask;
 163
 6164        public void SetCameraMode(CameraMode.ModeId newMode) { CommonScriptableObjects.cameraMode.Set(newMode); }
 165
 166        private void OnCameraModeChange(CameraMode.ModeId current, CameraMode.ModeId previous)
 167        {
 604168            cachedModeToVirtualCamera[previous].OnUnselect();
 604169            cachedModeToVirtualCamera[current].OnSelect();
 170
 604171            WebInterface.ReportCameraChanged(current);
 172
 604173            onSetCameraMode?.Invoke(current);
 8174        }
 175
 1716176        public CameraStateBase GetCameraMode(CameraMode.ModeId mode) { return cameraModes.FirstOrDefault(x => x.cameraMo
 177
 4178        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 179
 180        private void Update()
 181        {
 5327182            cameraForward.Set(cameraTransform.forward);
 5327183            cameraRight.Set(cameraTransform.right);
 5327184            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 5327185            cameraPosition.Set(cameraTransform.position);
 5327186            cameraIsBlending.Set(cameraBrain.IsBlending);
 187
 5327188            if (cameraBrain.IsBlending)
 189            {
 97190                if (!wasBlendingLastFrame)
 44191                    onCameraBlendStarted?.Invoke();
 192
 97193                wasBlendingLastFrame = true;
 97194            }
 5230195            else if (wasBlendingLastFrame)
 196            {
 0197                onCameraBlendFinished?.Invoke();
 198
 0199                wasBlendingLastFrame = false;
 200            }
 201
 5327202            currentCameraState?.OnUpdate();
 5327203        }
 204
 205        public void SetRotation(string setRotationPayload)
 206        {
 6207            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6208            currentCameraState?.OnSetRotation(payload);
 6209        }
 210
 0211        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 212
 213        public Vector3 GetRotation()
 214        {
 12215            if (currentCameraState != null)
 12216                return currentCameraState.OnGetRotation();
 217
 0218            return Vector3.zero;
 219        }
 220
 0221        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 222
 0223        public UnityEngine.Camera GetCamera() { return camera; }
 224
 1216225        private void SetInvertYAxis(bool current, bool previous) { thirdPersonCamera.m_YAxis.m_InvertInput = !current; }
 226
 227        private void SetCameraEnabledState(bool enabled)
 228        {
 600229            camera.enabled = enabled;
 600230        }
 231
 232        private void OnDestroy()
 233        {
 596234            if (cachedModeToVirtualCamera != null)
 235            {
 596236                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 237                {
 2384238                    while (iterator.MoveNext())
 239                    {
 1788240                        iterator.Current.Value.Cleanup();
 241                    }
 596242                }
 243            }
 244
 596245            worldOffset.OnChange -= OnWorldReposition;
 596246            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 596247            mouseWheelAction.OnValueChanged -= OnMouseWheelChangeValue;
 596248            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 596249            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 596250            CommonScriptableObjects.isLoadingHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 596251            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 596252            DataStore.i.camera.outputTexture.OnChange -= OnOutputTextureChange;
 596253            DataStore.i.camera.invertYAxis.OnChange -= SetInvertYAxis;
 596254        }
 255
 256        [Serializable]
 257        public class SetRotationPayload
 258        {
 259            public float x;
 260            public float y;
 261            public float z;
 262            public Vector3? cameraTarget;
 263        }
 264    }
 265}