< 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:72
Uncovered lines:7
Coverable lines:79
Total lines:202
Line coverage:91.1% (72 of 79)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Start()0%550100%
CameraController()0%110100%
OnFullscreenUIVisibilityChange(...)0%2.062075%
TryGetCameraStateByType[T](...)0%3.143075%
OnRenderingStateChanged(...)0%110100%
CameraBlocked_OnChange(...)0%220100%
OnCameraChangeAction(...)0%2.262060%
SetCameraMode(...)0%110100%
GetCameraMode(...)0%110100%
OnWorldReposition(...)0%110100%
Update()0%770100%
SetRotation(...)0%220100%
SetRotation(...)0%220100%
GetRotation()0%2.152066.67%
GetPosition()0%2100%
OnDestroy()0%110100%

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        public event CameraBlendStarted onCameraBlendStarted;
 33
 34        public delegate void CameraBlendFinished();
 35        public event CameraBlendFinished onCameraBlendFinished;
 36
 37        private bool wasBlendingLastFrame;
 38
 1763739        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 1763740        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 1763741        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 24942        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 1763743        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 44
 1817245        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 46
 47        [HideInInspector]
 48        public System.Action<CameraMode.ModeId> onSetCameraMode;
 49
 50        private void Start()
 51        {
 12552            cameraTransform = this.camera.transform;
 53
 12554            CommonScriptableObjects.rendererState.OnChange += OnRenderingStateChanged;
 12555            OnRenderingStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 56
 12557            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 58
 87559            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 60
 12561            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 62            {
 50063                while (iterator.MoveNext())
 64                {
 37565                    iterator.Current.Value.Init(camera);
 66                }
 12567            }
 68
 12569            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 12570            worldOffset.OnChange += OnWorldReposition;
 71
 12572            SetCameraMode(CommonScriptableObjects.cameraMode);
 73
 12574            if (CommonScriptableObjects.isFullscreenHUDOpen)
 11375                OnFullscreenUIVisibilityChange(CommonScriptableObjects.isFullscreenHUDOpen.Get(), !CommonScriptableObjec
 76
 12577            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 12578            wasBlendingLastFrame = false;
 12579        }
 80
 33181        private float prevRenderScale = 1.0f;
 82
 83        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 84        {
 11685            if (visibleState == prevVisibleState)
 086                return;
 87
 11688            camera.enabled = !visibleState;
 11689        }
 90
 91        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 92        {
 95993            foreach (CameraStateBase cameraMode in cameraModes)
 94            {
 41195                if (cameraMode.GetType() == typeof(T))
 96                {
 13797                    searchedCameraState = cameraMode;
 13798                    return true;
 99                }
 100            }
 0101            searchedCameraState = null;
 0102            return false;
 103        }
 104
 438105        private void OnRenderingStateChanged(bool enabled, bool prevState) { camera.enabled = enabled; }
 106
 107        private void CameraBlocked_OnChange(bool current, bool previous)
 108        {
 96109            foreach (CameraStateBase cam in cameraModes)
 110            {
 36111                cam.OnBlock(current);
 112            }
 12113        }
 114
 115        private void OnCameraChangeAction(DCLAction_Trigger action)
 116        {
 1117            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 118            {
 0119                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 0120            }
 121            else
 122            {
 1123                SetCameraMode(CameraMode.ModeId.FirstPerson);
 124            }
 1125        }
 126
 127        public void SetCameraMode(CameraMode.ModeId newMode)
 128        {
 206129            currentCameraState.OnUnselect();
 206130            CommonScriptableObjects.cameraMode.Set(newMode);
 206131            currentCameraState.OnSelect();
 132
 206133            DCL.Interface.WebInterface.ReportCameraChanged(newMode);
 134
 206135            onSetCameraMode.Invoke(newMode);
 206136        }
 137
 1491138        public CameraStateBase GetCameraMode( CameraMode.ModeId mode ) { return cameraModes.FirstOrDefault( x => x.camer
 139
 10140        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue) { transform.position += newValue - oldValue; 
 141
 142        private void Update()
 143        {
 17637144            cameraForward.Set(cameraTransform.forward);
 17637145            cameraRight.Set(cameraTransform.right);
 17637146            cameraPosition.Set(cameraTransform.position);
 17637147            cameraIsBlending.Set(cameraBrain.IsBlending);
 148
 17637149            if (cameraBrain.IsBlending)
 150            {
 895151                if (!wasBlendingLastFrame)
 3152                    onCameraBlendStarted?.Invoke();
 153
 895154                wasBlendingLastFrame = true;
 895155            }
 16742156            else if (wasBlendingLastFrame)
 157            {
 3158                onCameraBlendFinished?.Invoke();
 159
 3160                wasBlendingLastFrame = false;
 161            }
 162
 17637163            currentCameraState?.OnUpdate();
 17637164        }
 165
 166        public void SetRotation(string setRotationPayload)
 167        {
 8168            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 8169            currentCameraState?.OnSetRotation(payload);
 8170        }
 171
 62172        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 173
 174        public Vector3 GetRotation()
 175        {
 12176            if (currentCameraState != null)
 12177                return currentCameraState.OnGetRotation();
 178
 0179            return Vector3.zero;
 180        }
 181
 0182        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 183
 184        private void OnDestroy()
 185        {
 124186            worldOffset.OnChange -= OnWorldReposition;
 124187            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 124188            CommonScriptableObjects.rendererState.OnChange -= OnRenderingStateChanged;
 124189            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 124190            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 124191        }
 192
 193        [System.Serializable]
 194        public class SetRotationPayload
 195        {
 196            public float x;
 197            public float y;
 198            public float z;
 199            public Vector3? cameraTarget;
 200        }
 201    }
 202}