< 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:39
Uncovered lines:51
Coverable lines:90
Total lines:193
Line coverage:43.3% (39 of 90)
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;
 222        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")]
 33130        public float avatarRotationLerpSpeed = 10;
 31
 32        [SerializeField]
 33133        private CameraFreefall.Settings cameraFreefallSettings = new CameraFreefall.Settings();
 34
 35        public CameraFreefall cameraFreefall;
 36
 37        [SerializeField]
 33138        private CameraDampOnGroundType.Settings cameraDampOnGroundTypeSettings = new CameraDampOnGroundType.Settings();
 39
 40        public CameraDampOnGroundType cameraDampOnGroundType;
 41
 42        [SerializeField]
 33143        private CameraDampOnSprint.Settings cameraSprintDampingSettings = new CameraDampOnSprint.Settings();
 44
 45        public CameraDampOnSprint cameraDampOnSprint;
 46
 47        public override void Init(UnityEngine.Camera camera)
 48        {
 12549            freeLookTopRig = defaultVirtualCameraAsFreeLook.GetRig(0).GetCinemachineComponent<CinemachineTransposer>();
 12550            freeLookTopRigOriginalBodyDamping = new Vector3(freeLookTopRig.m_XDamping, freeLookTopRig.m_YDamping, freeLo
 12551            freeLookMidRig = defaultVirtualCameraAsFreeLook.GetRig(1).GetCinemachineComponent<CinemachineTransposer>();
 12552            freeLookMidRigOriginalBodyDamping = new Vector3(freeLookMidRig.m_XDamping, freeLookMidRig.m_YDamping, freeLo
 12553            freeLookBotRig = defaultVirtualCameraAsFreeLook.GetRig(2).GetCinemachineComponent<CinemachineTransposer>();
 12554            freeLookBotRigOriginalBodyDamping = new Vector3(freeLookBotRig.m_XDamping, freeLookBotRig.m_YDamping, freeLo
 55
 12556            cameraDampOnSprint = new CameraDampOnSprint(cameraSprintDampingSettings, defaultVirtualCameraAsFreeLook, cha
 12557            cameraDampOnGroundType = new CameraDampOnGroundType(cameraDampOnGroundTypeSettings, cameraTargetProbe);
 12558            cameraFreefall = new CameraFreefall(cameraFreefallSettings, defaultVirtualCameraAsFreeLook);
 59
 12560            base.Init(camera);
 12561        }
 62
 63        private void OnEnable()
 64        {
 165            CommonScriptableObjects.playerIsOnMovingPlatform.OnChange += UpdateMovingPlatformCamera;
 166        }
 67
 68        private void OnDisable()
 69        {
 170            CommonScriptableObjects.playerIsOnMovingPlatform.OnChange -= UpdateMovingPlatformCamera;
 171        }
 72
 73        void UpdateMovingPlatformCamera(bool isOnMovingPlatform, bool wasOnMovingPlatform)
 74        {
 075            if (isOnMovingPlatform)
 76            {
 077                freeLookTopRig.m_XDamping = 0;
 078                freeLookTopRig.m_YDamping = 0;
 079                freeLookTopRig.m_ZDamping = 0;
 80
 081                freeLookMidRig.m_XDamping = 0;
 082                freeLookMidRig.m_YDamping = 0;
 083                freeLookMidRig.m_ZDamping = 0;
 84
 085                freeLookBotRig.m_XDamping = 0;
 086                freeLookBotRig.m_YDamping = 0;
 087                freeLookBotRig.m_ZDamping = 0;
 088            }
 89            else
 90            {
 091                freeLookTopRig.m_XDamping = freeLookTopRigOriginalBodyDamping.x;
 092                freeLookTopRig.m_YDamping = freeLookTopRigOriginalBodyDamping.y;
 093                freeLookTopRig.m_ZDamping = freeLookTopRigOriginalBodyDamping.z;
 94
 095                freeLookMidRig.m_XDamping = freeLookMidRigOriginalBodyDamping.x;
 096                freeLookMidRig.m_YDamping = freeLookMidRigOriginalBodyDamping.y;
 097                freeLookMidRig.m_ZDamping = freeLookMidRigOriginalBodyDamping.z;
 98
 099                freeLookBotRig.m_XDamping = freeLookBotRigOriginalBodyDamping.x;
 0100                freeLookBotRig.m_YDamping = freeLookBotRigOriginalBodyDamping.y;
 0101                freeLookBotRig.m_ZDamping = freeLookBotRigOriginalBodyDamping.z;
 102            }
 0103        }
 104
 105        public override void OnSelect()
 106        {
 1107            if (characterForward.Get().HasValue)
 108            {
 1109                defaultVirtualCameraAsFreeLook.m_XAxis.Value = Quaternion.LookRotation(characterForward.Get().Value, Vec
 1110                defaultVirtualCameraAsFreeLook.m_YAxis.Value = 0.5f;
 111            }
 112
 1113            base.OnSelect();
 1114        }
 115
 116        public override void OnUpdate()
 117        {
 7118            defaultVirtualCameraAsFreeLook.m_BindingMode = CinemachineTransposer.BindingMode.WorldSpace;
 119
 7120            bool didHit = DCLCharacterController.i.CastGroundCheckingRays(20, 0.1f, out RaycastHit hitInfo);
 121
 7122            cameraDampOnSprint.Update();
 7123            cameraDampOnGroundType.Update(didHit, hitInfo);
 7124            cameraFreefall.Update(didHit, hitInfo);
 125
 7126            UpdateAvatarRotationDamping();
 7127        }
 128
 129        /// <summary>
 130        /// This methods ensures the Avatar rotates smoothly when changing direction.
 131        /// Note that this will NOT affect the player movement, is only cosmetic.
 132        /// TODO(Brian): This is not camera feel, move this elsewhere
 133        /// </summary>
 134        private void UpdateAvatarRotationDamping()
 135        {
 7136            var xzPlaneForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1));
 7137            var xzPlaneRight = Vector3.Scale(cameraTransform.right, new Vector3(1, 0, 1));
 138
 7139            if (characterYAxis.GetValue() != 0f || characterXAxis.GetValue() != 0f)
 140            {
 0141                Vector3 forwardTarget = Vector3.zero;
 142
 0143                if (characterYAxis.GetValue() > 0)
 0144                    forwardTarget += xzPlaneForward;
 145
 0146                if (characterYAxis.GetValue() < 0)
 0147                    forwardTarget -= xzPlaneForward;
 148
 0149                if (characterXAxis.GetValue() > 0)
 0150                    forwardTarget += xzPlaneRight;
 151
 0152                if (characterXAxis.GetValue() < 0)
 0153                    forwardTarget -= xzPlaneRight;
 154
 0155                forwardTarget.Normalize();
 156
 0157                if (!characterForward.HasValue())
 158                {
 0159                    characterForward.Set(forwardTarget);
 0160                }
 161                else
 162                {
 0163                    var lerpedForward = Vector3.Slerp(characterForward.Get().Value, forwardTarget, avatarRotationLerpSpe
 0164                    characterForward.Set(lerpedForward);
 165                }
 166            }
 7167        }
 168
 0169        public override Vector3 OnGetRotation() { return new Vector3(defaultVirtualCameraAsFreeLook.m_YAxis.Value, defau
 170
 171        public override void OnSetRotation(CameraController.SetRotationPayload payload)
 172        {
 0173            var eulerDir = Vector3.zero;
 174
 0175            if (payload.cameraTarget.HasValue)
 176            {
 0177                var newPos = new Vector3(payload.x, payload.y, payload.z);
 0178                var cameraTarget = payload.cameraTarget.GetValueOrDefault();
 0179                var dirToLook = (cameraTarget - newPos);
 0180                eulerDir = Quaternion.LookRotation(dirToLook).eulerAngles;
 181            }
 182
 0183            defaultVirtualCameraAsFreeLook.m_XAxis.Value = eulerDir.y;
 0184            defaultVirtualCameraAsFreeLook.m_YAxis.Value = eulerDir.x;
 0185        }
 186
 187        public override void OnBlock(bool blocked)
 188        {
 12189            base.OnBlock(blocked);
 12190            defaultVirtualCameraAsFreeLook.enabled = !blocked;
 12191        }
 192    }
 193}