< Summary

Class:DCL.Camera.CameraStateTPS
Assembly:Camera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Camera/CameraStateTPS.cs
Covered lines:37
Uncovered lines:52
Coverable lines:89
Total lines:189
Line coverage:41.5% (37 of 89)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CameraStateTPS()0%110100%
Init(...)0%110100%
OnEnable()0%110100%
OnDisable()0%110100%
UpdateMovingPlatformCamera(...)0%6200%
OnSelect()0%220100%
OnUpdate()0%110100%
UpdateAvatarRotationDamping()0%39.498021.05%
OnGetRotation()0%2100%
OnSetRotation(...)0%6200%
OnBlock(...)0%110100%

File(s)

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

#LineLine coverage
 1using System;
 2using Cinemachine;
 3using UnityEngine;
 4
 5namespace DCL.Camera
 6{
 7    public class CameraStateTPS : CameraStateBase
 8    {
 09        private CinemachineFreeLook defaultVirtualCameraAsFreeLook => defaultVirtualCamera as CinemachineFreeLook;
 10
 11        [SerializeField] private CinemachineVirtualCamera fallingVirtualCamera;
 12        [SerializeField] private InputAction_Measurable characterYAxis;
 13        [SerializeField] private InputAction_Measurable characterXAxis;
 14        private CinemachineTransposer freeLookTopRig;
 15        private CinemachineTransposer freeLookMidRig;
 16        private CinemachineTransposer freeLookBotRig;
 17        private Vector3 freeLookTopRigOriginalBodyDamping;
 18        private Vector3 freeLookMidRigOriginalBodyDamping;
 19        private Vector3 freeLookBotRigOriginalBodyDamping;
 20
 021        protected Vector3Variable characterPosition => CommonScriptableObjects.playerUnityPosition;
 1922        protected Vector3NullableVariable characterForward => CommonScriptableObjects.characterForward;
 023        protected Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 024        protected Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 025        protected Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 26
 27        public FollowWithDamping cameraTargetProbe;
 28
 29        [Header("Avatar Feel Settings")]
 32830        public float avatarRotationLerpSpeed = 10;
 31
 32        [SerializeField]
 32833        private CameraFreefall.Settings cameraFreefallSettings = new CameraFreefall.Settings();
 34
 35        public CameraFreefall cameraFreefall;
 36
 37        [SerializeField]
 32838        private CameraDampOnGroundType.Settings cameraDampOnGroundTypeSettings = new CameraDampOnGroundType.Settings();
 39
 40        public CameraDampOnGroundType cameraDampOnGroundType;
 41
 42        [SerializeField]
 32843        private CameraDampOnSprint.Settings cameraSprintDampingSettings = new CameraDampOnSprint.Settings();
 44
 45        public CameraDampOnSprint cameraDampOnSprint;
 46
 47        public override void Init(UnityEngine.Camera camera)
 48        {
 12449            freeLookTopRig = defaultVirtualCameraAsFreeLook.GetRig(0).GetCinemachineComponent<CinemachineTransposer>();
 12450            freeLookTopRigOriginalBodyDamping = new Vector3(freeLookTopRig.m_XDamping, freeLookTopRig.m_YDamping, freeLo
 12451            freeLookMidRig = defaultVirtualCameraAsFreeLook.GetRig(1).GetCinemachineComponent<CinemachineTransposer>();
 12452            freeLookMidRigOriginalBodyDamping = new Vector3(freeLookMidRig.m_XDamping, freeLookMidRig.m_YDamping, freeLo
 12453            freeLookBotRig = defaultVirtualCameraAsFreeLook.GetRig(2).GetCinemachineComponent<CinemachineTransposer>();
 12454            freeLookBotRigOriginalBodyDamping = new Vector3(freeLookBotRig.m_XDamping, freeLookBotRig.m_YDamping, freeLo
 55
 12456            cameraDampOnSprint = new CameraDampOnSprint(cameraSprintDampingSettings, defaultVirtualCameraAsFreeLook, cha
 12457            cameraDampOnGroundType = new CameraDampOnGroundType(cameraDampOnGroundTypeSettings, cameraTargetProbe);
 12458            cameraFreefall = new CameraFreefall(cameraFreefallSettings, defaultVirtualCameraAsFreeLook);
 59
 12460            base.Init(camera);
 12461        }
 62
 3663        private void OnEnable() { CommonScriptableObjects.playerIsOnMovingPlatform.OnChange += UpdateMovingPlatformCamer
 64
 3665        private void OnDisable() { CommonScriptableObjects.playerIsOnMovingPlatform.OnChange -= UpdateMovingPlatformCame
 66
 67        void UpdateMovingPlatformCamera(bool isOnMovingPlatform, bool wasOnMovingPlatform)
 68        {
 069            if (isOnMovingPlatform)
 70            {
 071                freeLookTopRig.m_XDamping = 0;
 072                freeLookTopRig.m_YDamping = 0;
 073                freeLookTopRig.m_ZDamping = 0;
 74
 075                freeLookMidRig.m_XDamping = 0;
 076                freeLookMidRig.m_YDamping = 0;
 077                freeLookMidRig.m_ZDamping = 0;
 78
 079                freeLookBotRig.m_XDamping = 0;
 080                freeLookBotRig.m_YDamping = 0;
 081                freeLookBotRig.m_ZDamping = 0;
 082            }
 83            else
 84            {
 085                freeLookTopRig.m_XDamping = freeLookTopRigOriginalBodyDamping.x;
 086                freeLookTopRig.m_YDamping = freeLookTopRigOriginalBodyDamping.y;
 087                freeLookTopRig.m_ZDamping = freeLookTopRigOriginalBodyDamping.z;
 88
 089                freeLookMidRig.m_XDamping = freeLookMidRigOriginalBodyDamping.x;
 090                freeLookMidRig.m_YDamping = freeLookMidRigOriginalBodyDamping.y;
 091                freeLookMidRig.m_ZDamping = freeLookMidRigOriginalBodyDamping.z;
 92
 093                freeLookBotRig.m_XDamping = freeLookBotRigOriginalBodyDamping.x;
 094                freeLookBotRig.m_YDamping = freeLookBotRigOriginalBodyDamping.y;
 095                freeLookBotRig.m_ZDamping = freeLookBotRigOriginalBodyDamping.z;
 96            }
 097        }
 98
 99        public override void OnSelect()
 100        {
 18101            if (characterForward.Get().HasValue)
 102            {
 1103                defaultVirtualCameraAsFreeLook.m_XAxis.Value = Quaternion.LookRotation(characterForward.Get().Value, Vec
 1104                defaultVirtualCameraAsFreeLook.m_YAxis.Value = 0.5f;
 105            }
 106
 18107            base.OnSelect();
 18108        }
 109
 110        public override void OnUpdate()
 111        {
 8553112            defaultVirtualCameraAsFreeLook.m_BindingMode = CinemachineTransposer.BindingMode.WorldSpace;
 113
 8553114            bool didHit = DCLCharacterController.i.CastGroundCheckingRays(20, 0.1f, out RaycastHit hitInfo);
 115
 8553116            cameraDampOnSprint.Update();
 8553117            cameraDampOnGroundType.Update(didHit, hitInfo);
 8553118            cameraFreefall.Update(didHit, hitInfo);
 119
 8553120            UpdateAvatarRotationDamping();
 8553121        }
 122
 123        /// <summary>
 124        /// This methods ensures the Avatar rotates smoothly when changing direction.
 125        /// Note that this will NOT affect the player movement, is only cosmetic.
 126        /// TODO(Brian): This is not camera feel, move this elsewhere
 127        /// </summary>
 128        private void UpdateAvatarRotationDamping()
 129        {
 8553130            var xzPlaneForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1));
 8553131            var xzPlaneRight = Vector3.Scale(cameraTransform.right, new Vector3(1, 0, 1));
 132
 8553133            if (characterYAxis.GetValue() != 0f || characterXAxis.GetValue() != 0f)
 134            {
 0135                Vector3 forwardTarget = Vector3.zero;
 136
 0137                if (characterYAxis.GetValue() > 0)
 0138                    forwardTarget += xzPlaneForward;
 139
 0140                if (characterYAxis.GetValue() < 0)
 0141                    forwardTarget -= xzPlaneForward;
 142
 0143                if (characterXAxis.GetValue() > 0)
 0144                    forwardTarget += xzPlaneRight;
 145
 0146                if (characterXAxis.GetValue() < 0)
 0147                    forwardTarget -= xzPlaneRight;
 148
 0149                forwardTarget.Normalize();
 150
 0151                if (!characterForward.HasValue())
 152                {
 0153                    characterForward.Set(forwardTarget);
 0154                }
 155                else
 156                {
 0157                    var lerpedForward = Vector3.Slerp(characterForward.Get().Value, forwardTarget, avatarRotationLerpSpe
 0158                    characterForward.Set(lerpedForward);
 159                }
 160            }
 8553161        }
 162
 0163        public override Vector3 OnGetRotation() { return new Vector3(defaultVirtualCameraAsFreeLook.m_YAxis.Value, defau
 164
 165        public override void OnSetRotation(CameraController.SetRotationPayload payload)
 166        {
 0167            var eulerDir = Vector3.zero;
 168
 0169            if (payload.cameraTarget.HasValue)
 170            {
 0171                var newPos = new Vector3(payload.x, payload.y, payload.z);
 0172                var cameraTarget = payload.cameraTarget.GetValueOrDefault();
 0173                var dirToLook = (cameraTarget - newPos);
 0174                eulerDir = Quaternion.LookRotation(dirToLook).eulerAngles;
 175            }
 176
 0177            defaultVirtualCameraAsFreeLook.m_XAxis.Value = eulerDir.y;
 178
 179            //value range 0 to 1, being 0 the bottom orbit and 1 the top orbit
 0180            var yValue = Mathf.InverseLerp(-90, 90, eulerDir.x);
 0181            defaultVirtualCameraAsFreeLook.m_YAxis.Value = yValue;
 0182        }
 183        public override void OnBlock(bool blocked)
 184        {
 12185            base.OnBlock(blocked);
 12186            defaultVirtualCameraAsFreeLook.enabled = !blocked;
 12187        }
 188    }
 189}