< 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:68
Uncovered lines:17
Coverable lines:85
Total lines:217
Line coverage:80% (68 of 85)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%5.015094.12%
CameraController()0%110100%
OnFullscreenUIVisibilityChange(...)0%12300%
TryGetCameraStateByType[T](...)0%3.143075%
OnRenderingStateChanged(...)0%220100%
CameraBlocked_OnChange(...)0%6200%
OnCameraChangeAction(...)0%2.262060%
SetCameraMode(...)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%
OnDestroy()0%330100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Camera/CameraController.cs

#LineLine coverage
 1using Cinemachine;
 2using DCL.Helpers;
 3using System.Collections.Generic;
 4using System.Linq;
 5using DCL;
 6using UnityEngine;
 7using UnityEngine.Serialization;
 8
 9namespace DCL.Camera
 10{
 11    public class CameraController : MonoBehaviour
 12    {
 13        [SerializeField]
 14        internal new UnityEngine.Camera camera;
 15
 16        private Transform cameraTransform;
 17
 18        [Header("Virtual Cameras")]
 19        [SerializeField]
 20        internal CinemachineBrain cameraBrain;
 21
 22        [SerializeField]
 23        internal CameraStateBase[] cameraModes;
 24
 25        [Header("InputActions")]
 26        [SerializeField]
 27        internal InputAction_Trigger cameraChangeAction;
 28
 29        internal Dictionary<CameraMode.ModeId, CameraStateBase> cachedModeToVirtualCamera;
 30
 31        public delegate void CameraBlendStarted();
 32
 33        public event CameraBlendStarted onCameraBlendStarted;
 34
 35        public delegate void CameraBlendFinished();
 36
 37        public event CameraBlendFinished onCameraBlendFinished;
 38
 39        private bool wasBlendingLastFrame;
 40
 867441        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 867442        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 867443        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 122044        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 867445        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 46
 993247        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 48
 49        [HideInInspector]
 50        public System.Action<CameraMode.ModeId> onSetCameraMode;
 51
 52        private void Awake()
 53        {
 61054            cameraTransform = this.camera.transform;
 55
 61056            CommonScriptableObjects.rendererState.OnChange += OnRenderingStateChanged;
 61057            OnRenderingStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 58
 61059            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 60
 427061            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 62
 61063            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 64            {
 244065                while (iterator.MoveNext())
 66                {
 183067                    iterator.Current.Value.Initialize(camera);
 68                }
 61069            }
 70
 61071            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 61072            worldOffset.OnChange += OnWorldReposition;
 73
 61074            SetCameraMode(CommonScriptableObjects.cameraMode);
 75
 61076            if (CommonScriptableObjects.isFullscreenHUDOpen)
 077                OnFullscreenUIVisibilityChange(CommonScriptableObjects.isFullscreenHUDOpen.Get(), !CommonScriptableObjec
 78
 61079            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 61080            wasBlendingLastFrame = false;
 61081        }
 82
 61383        private float prevRenderScale = 1.0f;
 84
 85        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 86        {
 087            if (visibleState == prevVisibleState)
 088                return;
 89
 090            camera.enabled = !visibleState && CommonScriptableObjects.rendererState.Get();
 091        }
 92
 93        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 94        {
 53995            foreach (CameraStateBase cameraMode in cameraModes)
 96            {
 23197                if (cameraMode.GetType() == typeof(T))
 98                {
 7799                    searchedCameraState = cameraMode;
 77100                    return true;
 101                }
 102            }
 103
 0104            searchedCameraState = null;
 0105            return false;
 106        }
 107
 1224108        private void OnRenderingStateChanged(bool enabled, bool prevState) { camera.enabled = enabled && !CommonScriptab
 109
 110        private void CameraBlocked_OnChange(bool current, bool previous)
 111        {
 0112            foreach (CameraStateBase cam in cameraModes)
 113            {
 0114                cam.OnBlock(current);
 115            }
 0116        }
 117
 118        private void OnCameraChangeAction(DCLAction_Trigger action)
 119        {
 1120            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 121            {
 0122                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 0123            }
 124            else
 125            {
 1126                SetCameraMode(CameraMode.ModeId.FirstPerson);
 127            }
 1128        }
 129
 130        public void SetCameraMode(CameraMode.ModeId newMode)
 131        {
 613132            currentCameraState.OnUnselect();
 613133            CommonScriptableObjects.cameraMode.Set(newMode);
 613134            currentCameraState.OnSelect();
 135
 613136            DCL.Interface.WebInterface.ReportCameraChanged(newMode);
 137
 613138            onSetCameraMode?.Invoke(newMode);
 3139        }
 140
 1755141        public CameraStateBase GetCameraMode( CameraMode.ModeId mode ) { return cameraModes.FirstOrDefault( x => x.camer
 142
 6143        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 144
 145        private void Update()
 146        {
 8674147            cameraForward.Set(cameraTransform.forward);
 8674148            cameraRight.Set(cameraTransform.right);
 8674149            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 8674150            cameraPosition.Set(cameraTransform.position);
 8674151            cameraIsBlending.Set(cameraBrain.IsBlending);
 152
 8674153            if (cameraBrain.IsBlending)
 154            {
 82155                if (!wasBlendingLastFrame)
 38156                    onCameraBlendStarted?.Invoke();
 157
 82158                wasBlendingLastFrame = true;
 82159            }
 8592160            else if (wasBlendingLastFrame)
 161            {
 0162                onCameraBlendFinished?.Invoke();
 163
 0164                wasBlendingLastFrame = false;
 165            }
 166
 8674167            currentCameraState?.OnUpdate();
 8674168        }
 169
 170        public void SetRotation(string setRotationPayload)
 171        {
 6172            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6173            currentCameraState?.OnSetRotation(payload);
 6174        }
 175
 0176        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 177
 178        public Vector3 GetRotation()
 179        {
 12180            if (currentCameraState != null)
 12181                return currentCameraState.OnGetRotation();
 182
 0183            return Vector3.zero;
 184        }
 185
 0186        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 187
 188        private void OnDestroy()
 189        {
 610190            if (cachedModeToVirtualCamera != null)
 191            {
 610192                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 193                {
 2440194                    while (iterator.MoveNext())
 195                    {
 1830196                        iterator.Current.Value.Cleanup();
 197                    }
 610198                }
 199            }
 200
 610201            worldOffset.OnChange -= OnWorldReposition;
 610202            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 610203            CommonScriptableObjects.rendererState.OnChange -= OnRenderingStateChanged;
 610204            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 610205            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 610206        }
 207
 208        [System.Serializable]
 209        public class SetRotationPayload
 210        {
 211            public float x;
 212            public float y;
 213            public float z;
 214            public Vector3? cameraTarget;
 215        }
 216    }
 217}