< 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:73
Uncovered lines:7
Coverable lines:80
Total lines:203
Line coverage:91.2% (73 of 80)
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
 2010939        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 2010940        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 2010941        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 24742        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 2010943        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 44
 2064645        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 46
 47        [HideInInspector]
 48        public System.Action<CameraMode.ModeId> onSetCameraMode;
 49
 50        private void Start()
 51        {
 12452            cameraTransform = this.camera.transform;
 53
 12454            CommonScriptableObjects.rendererState.OnChange += OnRenderingStateChanged;
 12455            OnRenderingStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 56
 12457            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 58
 86859            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 60
 12461            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 62            {
 49663                while (iterator.MoveNext())
 64                {
 37265                    iterator.Current.Value.Init(camera);
 66                }
 12467            }
 68
 12469            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 12470            worldOffset.OnChange += OnWorldReposition;
 71
 12472            SetCameraMode(CommonScriptableObjects.cameraMode);
 73
 12474            if (CommonScriptableObjects.isFullscreenHUDOpen)
 11275                OnFullscreenUIVisibilityChange(CommonScriptableObjects.isFullscreenHUDOpen.Get(), !CommonScriptableObjec
 76
 12477            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 12478            wasBlendingLastFrame = false;
 12479        }
 80
 32881        private float prevRenderScale = 1.0f;
 82
 83        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 84        {
 11585            if (visibleState == prevVisibleState)
 086                return;
 87
 11588            camera.enabled = !visibleState;
 11589        }
 90
 91        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 92        {
 94593            foreach (CameraStateBase cameraMode in cameraModes)
 94            {
 40595                if (cameraMode.GetType() == typeof(T))
 96                {
 13597                    searchedCameraState = cameraMode;
 13598                    return true;
 99                }
 100            }
 0101            searchedCameraState = null;
 0102            return false;
 103        }
 104
 432105        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
 1473138        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        {
 20109144            cameraForward.Set(cameraTransform.forward);
 20109145            cameraRight.Set(cameraTransform.right);
 20109146            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 20109147            cameraPosition.Set(cameraTransform.position);
 20109148            cameraIsBlending.Set(cameraBrain.IsBlending);
 149
 20109150            if (cameraBrain.IsBlending)
 151            {
 1640152                if (!wasBlendingLastFrame)
 20153                    onCameraBlendStarted?.Invoke();
 154
 1640155                wasBlendingLastFrame = true;
 1640156            }
 18469157            else if (wasBlendingLastFrame)
 158            {
 10159                onCameraBlendFinished?.Invoke();
 160
 10161                wasBlendingLastFrame = false;
 162            }
 163
 20109164            currentCameraState?.OnUpdate();
 20109165        }
 166
 167        public void SetRotation(string setRotationPayload)
 168        {
 8169            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 8170            currentCameraState?.OnSetRotation(payload);
 8171        }
 172
 64173        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null) { currentCameraState?.OnSetRota
 174
 175        public Vector3 GetRotation()
 176        {
 12177            if (currentCameraState != null)
 12178                return currentCameraState.OnGetRotation();
 179
 0180            return Vector3.zero;
 181        }
 182
 0183        public Vector3 GetPosition() { return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.Final
 184
 185        private void OnDestroy()
 186        {
 123187            worldOffset.OnChange -= OnWorldReposition;
 123188            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 123189            CommonScriptableObjects.rendererState.OnChange -= OnRenderingStateChanged;
 123190            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 123191            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 123192        }
 193
 194        [System.Serializable]
 195        public class SetRotationPayload
 196        {
 197            public float x;
 198            public float y;
 199            public float z;
 200            public Vector3? cameraTarget;
 201        }
 202    }
 203}