< 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:80
Uncovered lines:27
Coverable lines:107
Total lines:263
Line coverage:74.7% (80 of 107)
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%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        [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
 43448        private float mouseWheelThreshold = 0.04f;
 49
 1606050        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 1606051        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 1606052        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 83853        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 1606054        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 55
 1609256        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 57
 58        [HideInInspector]
 59        public Action<CameraMode.ModeId> onSetCameraMode;
 60
 61        private void Awake()
 62        {
 41963            cameraTransform = this.camera.transform;
 41964            DataStore.i.camera.transform.Set(cameraTransform);
 65
 41966            SetCameraEnabledState(CommonScriptableObjects.rendererState.Get());
 67
 41968            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 69
 209570            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 71
 41972            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 73            {
 125774                while (iterator.MoveNext())
 75                {
 83876                    iterator.Current.Value.Initialize(camera);
 77                }
 41978            }
 79
 41980            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 41981            mouseWheelAction.OnValueChanged += OnMouseWheelChangeValue;
 41982            worldOffset.OnChange += OnWorldReposition;
 41983            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 84
 41985            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 86
 41987            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 41988            CommonScriptableObjects.isLoadingHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 89
 41990            DataStore.i.camera.outputTexture.OnChange += OnOutputTextureChange;
 41991            OnOutputTextureChange(DataStore.i.camera.outputTexture.Get(), null);
 92
 41993            DataStore.i.camera.invertYAxis.OnChange += SetInvertYAxis;
 41994            SetInvertYAxis(DataStore.i.camera.invertYAxis.Get(), false);
 95
 41996            wasBlendingLastFrame = false;
 41997        }
 98
 99        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 100        {
 4101            if (visibleState == prevVisibleState)
 0102                return;
 103
 4104            SetCameraEnabledState(!visibleState && CommonScriptableObjects.rendererState.Get());
 4105        }
 106
 838107        void OnOutputTextureChange(RenderTexture current, RenderTexture previous) { camera.targetTexture = current; }
 108
 109        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 110        {
 0111            foreach (CameraStateBase cameraMode in cameraModes)
 112            {
 0113                if (cameraMode.GetType() == typeof(T))
 114                {
 0115                    searchedCameraState = cameraMode;
 0116                    return true;
 117                }
 118            }
 119
 0120            searchedCameraState = null;
 0121            return false;
 122        }
 123
 124        private void CameraBlocked_OnChange(bool current, bool previous)
 125        {
 0126            foreach (CameraStateBase cam in cameraModes)
 127            {
 0128                cam.OnBlock(current);
 129            }
 0130        }
 131
 132        private void OnMouseWheelChangeValue(DCLAction_Measurable action, float value)
 133        {
 0134            if ((value > -mouseWheelThreshold && value < mouseWheelThreshold) || CommonScriptableObjects.cameraModeInput
 0135                return;
 0136            if (Utils.IsPointerOverUIElement())
 0137                return;
 138
 0139            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson && value < -mouseWheelThreshold)
 0140                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 141
 0142            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.ThirdPerson && value > mouseWheelThreshold)
 0143                SetCameraMode(CameraMode.ModeId.FirstPerson);
 0144        }
 145
 146        private void OnCameraChangeAction(DCLAction_Trigger action)
 147        {
 1148            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 149            {
 0150                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 151            }
 152            else
 153            {
 1154                SetCameraMode(CameraMode.ModeId.FirstPerson);
 155            }
 1156        }
 157
 0158        public LayerMask GetCulling() => camera.cullingMask;
 159
 0160        public void SetCulling(LayerMask mask) => camera.cullingMask = mask;
 161
 6162        public void SetCameraMode(CameraMode.ModeId newMode) { CommonScriptableObjects.cameraMode.Set(newMode); }
 163
 164        private void OnCameraModeChange(CameraMode.ModeId current, CameraMode.ModeId previous)
 165        {
 427166            cachedModeToVirtualCamera[previous].OnUnselect();
 427167            cachedModeToVirtualCamera[current].OnSelect();
 168
 427169            WebInterface.ReportCameraChanged(current);
 170
 427171            onSetCameraMode?.Invoke(current);
 8172        }
 173
 1185174        public CameraStateBase GetCameraMode(CameraMode.ModeId mode) { return cameraModes.FirstOrDefault(x => x.cameraMo
 175
 4176        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 177
 178        private void Update()
 179        {
 16060180            cameraForward.Set(cameraTransform.forward);
 16060181            cameraRight.Set(cameraTransform.right);
 16060182            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 16060183            cameraPosition.Set(cameraTransform.position);
 16060184            cameraIsBlending.Set(cameraBrain.IsBlending);
 185
 16060186            if (cameraBrain.IsBlending)
 187            {
 8188                if (!wasBlendingLastFrame)
 8189                    onCameraBlendStarted?.Invoke();
 190
 8191                wasBlendingLastFrame = true;
 192            }
 16052193            else if (wasBlendingLastFrame)
 194            {
 0195                onCameraBlendFinished?.Invoke();
 196
 0197                wasBlendingLastFrame = false;
 198            }
 199
 16060200            currentCameraState?.OnUpdate();
 16060201        }
 202
 203        public void SetRotation(string setRotationPayload)
 204        {
 6205            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6206            currentCameraState?.OnSetRotation(payload);
 6207        }
 208
 0209        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 210
 211        public Vector3 GetRotation()
 212        {
 12213            if (currentCameraState != null)
 12214                return currentCameraState.OnGetRotation();
 215
 0216            return Vector3.zero;
 217        }
 218
 0219        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 220
 419221        public UnityEngine.Camera GetCamera() { return camera; }
 222
 862223        private void SetInvertYAxis(bool current, bool previous) { thirdPersonCamera.m_YAxis.m_InvertInput = !current; }
 224
 225        private void SetCameraEnabledState(bool enabled)
 226        {
 423227            camera.enabled = enabled;
 423228        }
 229
 230        private void OnDestroy()
 231        {
 419232            if (cachedModeToVirtualCamera != null)
 233            {
 419234                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 235                {
 1257236                    while (iterator.MoveNext())
 237                    {
 838238                        iterator.Current.Value.Cleanup();
 239                    }
 419240                }
 241            }
 242
 419243            worldOffset.OnChange -= OnWorldReposition;
 419244            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 419245            mouseWheelAction.OnValueChanged -= OnMouseWheelChangeValue;
 419246            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 419247            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 419248            CommonScriptableObjects.isLoadingHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 419249            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 419250            DataStore.i.camera.outputTexture.OnChange -= OnOutputTextureChange;
 419251            DataStore.i.camera.invertYAxis.OnChange -= SetInvertYAxis;
 419252        }
 253
 254        [Serializable]
 255        public class SetRotationPayload
 256        {
 257            public float x;
 258            public float y;
 259            public float z;
 260            public Vector3? cameraTarget;
 261        }
 262    }
 263}