< 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:75
Uncovered lines:17
Coverable lines:92
Total lines:243
Line coverage:81.5% (75 of 92)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%55094.44%
CameraController()0%110100%
OnFullscreenUIVisibilityChange(...)0%12300%
TryGetCameraStateByType[T](...)0%3.143075%
OnRenderingStateChanged(...)0%220100%
CameraBlocked_OnChange(...)0%6200%
OnCameraChangeAction(...)0%2.262060%
SetCameraMode(...)0%110100%
OnCameraModeChange(...)0%220100%
GetCameraMode(...)0%110100%
OnWorldReposition(...)0%110100%
Update()0%770100%
SetRotation(...)0%220100%
SetRotation(...)0%6200%
GetRotation()0%2.152066.67%
GetPosition()0%2100%
GetCamera()0%2100%
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 UnityEngine;
 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
 900241        private Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 900242        private Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 900243        private Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 121844        private Vector3Variable worldOffset => CommonScriptableObjects.worldOffset;
 900245        private BooleanVariable cameraIsBlending => CommonScriptableObjects.cameraIsBlending;
 46
 903447        public CameraStateBase currentCameraState => cachedModeToVirtualCamera[CommonScriptableObjects.cameraMode];
 48
 49        [HideInInspector]
 50        public Action<CameraMode.ModeId> onSetCameraMode;
 51
 52        private void Awake()
 53        {
 60954            cameraTransform = this.camera.transform;
 55
 60956            CommonScriptableObjects.rendererState.OnChange += OnRenderingStateChanged;
 60957            OnRenderingStateChanged(CommonScriptableObjects.rendererState.Get(), false);
 58
 60959            CommonScriptableObjects.cameraBlocked.OnChange += CameraBlocked_OnChange;
 60
 426361            cachedModeToVirtualCamera = cameraModes.ToDictionary(x => x.cameraModeId, x => x);
 62
 60963            using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 64            {
 243665                while (iterator.MoveNext())
 66                {
 182767                    iterator.Current.Value.Initialize(camera);
 68                }
 60969            }
 70
 60971            cameraChangeAction.OnTriggered += OnCameraChangeAction;
 60972            worldOffset.OnChange += OnWorldReposition;
 60973            CommonScriptableObjects.cameraMode.OnChange += OnCameraModeChange;
 74
 60975            OnCameraModeChange(CommonScriptableObjects.cameraMode, CameraMode.ModeId.FirstPerson);
 76
 60977            if (CommonScriptableObjects.isFullscreenHUDOpen)
 078                OnFullscreenUIVisibilityChange(CommonScriptableObjects.isFullscreenHUDOpen.Get(), !CommonScriptableObjec
 79
 60980            CommonScriptableObjects.isFullscreenHUDOpen.OnChange += OnFullscreenUIVisibilityChange;
 60981            wasBlendingLastFrame = false;
 60982        }
 83
 61284        private float prevRenderScale = 1.0f;
 85
 86        void OnFullscreenUIVisibilityChange(bool visibleState, bool prevVisibleState)
 87        {
 088            if (visibleState == prevVisibleState)
 089                return;
 90
 091            camera.enabled = !visibleState && CommonScriptableObjects.rendererState.Get();
 092        }
 93
 94        public bool TryGetCameraStateByType<T>(out CameraStateBase searchedCameraState)
 95        {
 53996            foreach (CameraStateBase cameraMode in cameraModes)
 97            {
 23198                if (cameraMode.GetType() == typeof(T))
 99                {
 77100                    searchedCameraState = cameraMode;
 77101                    return true;
 102                }
 103            }
 104
 0105            searchedCameraState = null;
 0106            return false;
 107        }
 108
 109        private void OnRenderingStateChanged(bool enabled, bool prevState)
 110        {
 611111            camera.enabled = enabled && !CommonScriptableObjects.isFullscreenHUDOpen;
 611112        }
 113
 114        private void CameraBlocked_OnChange(bool current, bool previous)
 115        {
 0116            foreach (CameraStateBase cam in cameraModes)
 117            {
 0118                cam.OnBlock(current);
 119            }
 0120        }
 121
 122        private void OnCameraChangeAction(DCLAction_Trigger action)
 123        {
 1124            if (CommonScriptableObjects.cameraMode == CameraMode.ModeId.FirstPerson)
 125            {
 0126                SetCameraMode(CameraMode.ModeId.ThirdPerson);
 0127            }
 128            else
 129            {
 1130                SetCameraMode(CameraMode.ModeId.FirstPerson);
 131            }
 1132        }
 133
 134        public void SetCameraMode(CameraMode.ModeId newMode)
 135        {
 3136            CommonScriptableObjects.cameraMode.Set(newMode);
 3137        }
 138
 139        private void OnCameraModeChange(CameraMode.ModeId current, CameraMode.ModeId previous)
 140        {
 611141            cachedModeToVirtualCamera[previous].OnUnselect();
 611142            cachedModeToVirtualCamera[current].OnSelect();
 143
 611144            WebInterface.ReportCameraChanged(current);
 145
 611146            onSetCameraMode?.Invoke(current);
 2147        }
 148
 149        public CameraStateBase GetCameraMode(CameraMode.ModeId mode)
 150        {
 1755151            return cameraModes.FirstOrDefault(x => x.cameraModeId == mode);
 152        }
 153
 154        private void OnWorldReposition(Vector3 newValue, Vector3 oldValue)
 155        {
 2156            transform.position += newValue - oldValue;
 2157        }
 158
 159        private void Update()
 160        {
 9002161            cameraForward.Set(cameraTransform.forward);
 9002162            cameraRight.Set(cameraTransform.right);
 9002163            DataStore.i.camera.rotation.Set(cameraTransform.rotation);
 9002164            cameraPosition.Set(cameraTransform.position);
 9002165            cameraIsBlending.Set(cameraBrain.IsBlending);
 166
 9002167            if (cameraBrain.IsBlending)
 168            {
 81169                if (!wasBlendingLastFrame)
 38170                    onCameraBlendStarted?.Invoke();
 171
 81172                wasBlendingLastFrame = true;
 81173            }
 8921174            else if (wasBlendingLastFrame)
 175            {
 1176                onCameraBlendFinished?.Invoke();
 177
 1178                wasBlendingLastFrame = false;
 179            }
 180
 9002181            currentCameraState?.OnUpdate();
 9002182        }
 183
 184        public void SetRotation(string setRotationPayload)
 185        {
 6186            var payload = Utils.FromJsonWithNulls<SetRotationPayload>(setRotationPayload);
 6187            currentCameraState?.OnSetRotation(payload);
 6188        }
 189
 190        public void SetRotation(float x, float y, float z, Vector3? cameraTarget = null)
 191        {
 0192            currentCameraState?.OnSetRotation(new SetRotationPayload() { x = x, y = y, z = z, cameraTarget = cameraTarge
 0193        }
 194
 195        public Vector3 GetRotation()
 196        {
 12197            if (currentCameraState != null)
 12198                return currentCameraState.OnGetRotation();
 199
 0200            return Vector3.zero;
 201        }
 202
 203        public Vector3 GetPosition()
 204        {
 0205            return CinemachineCore.Instance.GetActiveBrain(0).ActiveVirtualCamera.State.FinalPosition;
 206        }
 207
 208        public UnityEngine.Camera GetCamera()
 209        {
 0210            return camera;
 211        }
 212
 213        private void OnDestroy()
 214        {
 609215            if (cachedModeToVirtualCamera != null)
 216            {
 609217                using (var iterator = cachedModeToVirtualCamera.GetEnumerator())
 218                {
 2436219                    while (iterator.MoveNext())
 220                    {
 1827221                        iterator.Current.Value.Cleanup();
 222                    }
 609223                }
 224            }
 225
 609226            worldOffset.OnChange -= OnWorldReposition;
 609227            cameraChangeAction.OnTriggered -= OnCameraChangeAction;
 609228            CommonScriptableObjects.rendererState.OnChange -= OnRenderingStateChanged;
 609229            CommonScriptableObjects.cameraBlocked.OnChange -= CameraBlocked_OnChange;
 609230            CommonScriptableObjects.isFullscreenHUDOpen.OnChange -= OnFullscreenUIVisibilityChange;
 609231            CommonScriptableObjects.cameraMode.OnChange -= OnCameraModeChange;
 609232        }
 233
 234        [Serializable]
 235        public class SetRotationPayload
 236        {
 237            public float x;
 238            public float y;
 239            public float z;
 240            public Vector3? cameraTarget;
 241        }
 242    }
 243}