< 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:36
Uncovered lines:60
Coverable lines:96
Total lines:205
Line coverage:37.5% (36 of 96)
Covered branches:0
Total branches:0

Metrics

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

File(s)

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

#LineLine coverage
 1using Cinemachine;
 2using UnityEngine;
 3
 4namespace DCL.Camera
 5{
 6    public class CameraStateTPS : CameraStateBase
 7    {
 08        private CinemachineFreeLook defaultVirtualCameraAsFreeLook => defaultVirtualCamera as CinemachineFreeLook;
 9
 10        [SerializeField] private CinemachineVirtualCamera fallingVirtualCamera;
 11        [SerializeField] private InputAction_Measurable characterYAxis;
 12        [SerializeField] private InputAction_Measurable characterXAxis;
 13        private CinemachineTransposer freeLookTopRig;
 14        private CinemachineTransposer freeLookMidRig;
 15        private CinemachineTransposer freeLookBotRig;
 16        private Vector3 freeLookTopRigOriginalBodyDamping;
 17        private Vector3 freeLookMidRigOriginalBodyDamping;
 18        private Vector3 freeLookBotRigOriginalBodyDamping;
 19
 020        protected Vector3Variable characterPosition => CommonScriptableObjects.playerUnityPosition;
 59321        protected Vector3NullableVariable characterForward => CommonScriptableObjects.characterForward;
 022        protected Vector3Variable cameraForward => CommonScriptableObjects.cameraForward;
 023        protected Vector3Variable cameraRight => CommonScriptableObjects.cameraRight;
 024        protected Vector3Variable cameraPosition => CommonScriptableObjects.cameraPosition;
 25
 26        public FollowWithDamping cameraTargetProbe;
 27
 28        [Header("Avatar Feel Settings")]
 61029        public float avatarRotationLerpSpeed = 10;
 30
 31        [SerializeField]
 61032        private CameraFreefall.Settings cameraFreefallSettings = new CameraFreefall.Settings();
 33
 34        public CameraFreefall cameraFreefall;
 35
 36        [SerializeField]
 61037        private CameraDampOnGroundType.Settings cameraDampOnGroundTypeSettings = new CameraDampOnGroundType.Settings();
 38
 39        public CameraDampOnGroundType cameraDampOnGroundType;
 40
 41        [SerializeField]
 61042        private CameraDampOnSprint.Settings cameraSprintDampingSettings = new CameraDampOnSprint.Settings();
 43
 44        public CameraDampOnSprint cameraDampOnSprint;
 45
 46        public override void Initialize(UnityEngine.Camera camera)
 47        {
 59648            freeLookTopRig = defaultVirtualCameraAsFreeLook.GetRig(0).GetCinemachineComponent<CinemachineTransposer>();
 59649            freeLookTopRigOriginalBodyDamping = new Vector3(freeLookTopRig.m_XDamping, freeLookTopRig.m_YDamping, freeLo
 59650            freeLookMidRig = defaultVirtualCameraAsFreeLook.GetRig(1).GetCinemachineComponent<CinemachineTransposer>();
 59651            freeLookMidRigOriginalBodyDamping = new Vector3(freeLookMidRig.m_XDamping, freeLookMidRig.m_YDamping, freeLo
 59652            freeLookBotRig = defaultVirtualCameraAsFreeLook.GetRig(2).GetCinemachineComponent<CinemachineTransposer>();
 59653            freeLookBotRigOriginalBodyDamping = new Vector3(freeLookBotRig.m_XDamping, freeLookBotRig.m_YDamping, freeLo
 54
 59655            cameraDampOnSprint = new CameraDampOnSprint(cameraSprintDampingSettings, defaultVirtualCameraAsFreeLook, cha
 59656            cameraDampOnGroundType = new CameraDampOnGroundType(cameraDampOnGroundTypeSettings, cameraTargetProbe);
 59657            cameraFreefall = new CameraFreefall(cameraFreefallSettings, defaultVirtualCameraAsFreeLook);
 58
 59659            base.Initialize(camera);
 59660        }
 61
 62        public override void Cleanup()
 63        {
 59664            if (cameraTargetProbe != null)
 59665                Destroy(cameraTargetProbe.gameObject);
 59666        }
 67
 68        private void OnEnable()
 69        {
 59370            CommonScriptableObjects.playerIsOnMovingPlatform.OnChange += UpdateMovingPlatformCamera;
 59371        }
 72
 118673        private void OnDisable() { CommonScriptableObjects.playerIsOnMovingPlatform.OnChange -= UpdateMovingPlatformCame
 74
 75        void UpdateMovingPlatformCamera(bool isOnMovingPlatform, bool wasOnMovingPlatform)
 76        {
 077            if (isOnMovingPlatform)
 78            {
 079                freeLookTopRig.m_XDamping = 0;
 080                freeLookTopRig.m_YDamping = 0;
 081                freeLookTopRig.m_ZDamping = 0;
 82
 083                freeLookMidRig.m_XDamping = 0;
 084                freeLookMidRig.m_YDamping = 0;
 085                freeLookMidRig.m_ZDamping = 0;
 86
 087                freeLookBotRig.m_XDamping = 0;
 088                freeLookBotRig.m_YDamping = 0;
 089                freeLookBotRig.m_ZDamping = 0;
 090            }
 91            else
 92            {
 093                freeLookTopRig.m_XDamping = freeLookTopRigOriginalBodyDamping.x;
 094                freeLookTopRig.m_YDamping = freeLookTopRigOriginalBodyDamping.y;
 095                freeLookTopRig.m_ZDamping = freeLookTopRigOriginalBodyDamping.z;
 96
 097                freeLookMidRig.m_XDamping = freeLookMidRigOriginalBodyDamping.x;
 098                freeLookMidRig.m_YDamping = freeLookMidRigOriginalBodyDamping.y;
 099                freeLookMidRig.m_ZDamping = freeLookMidRigOriginalBodyDamping.z;
 100
 0101                freeLookBotRig.m_XDamping = freeLookBotRigOriginalBodyDamping.x;
 0102                freeLookBotRig.m_YDamping = freeLookBotRigOriginalBodyDamping.y;
 0103                freeLookBotRig.m_ZDamping = freeLookBotRigOriginalBodyDamping.z;
 104            }
 0105        }
 106
 107        public override void OnSelect()
 108        {
 593109            if (characterForward.Get().HasValue)
 110            {
 0111                defaultVirtualCameraAsFreeLook.m_XAxis.Value = Quaternion.LookRotation(characterForward.Get().Value, Vec
 0112                defaultVirtualCameraAsFreeLook.m_YAxis.Value = 0.5f;
 113            }
 114
 593115            base.OnSelect();
 593116        }
 117
 118        public override void OnUpdate()
 119        {
 5291120            defaultVirtualCameraAsFreeLook.m_BindingMode = CinemachineTransposer.BindingMode.WorldSpace;
 121
 5291122            bool didHit = DCLCharacterController.i.CastGroundCheckingRays(20, 0.1f, out RaycastHit hitInfo);
 123
 5291124            cameraDampOnSprint.Update();
 5291125            cameraDampOnGroundType.Update(didHit, hitInfo);
 5291126            cameraFreefall.Update(didHit, hitInfo);
 127
 5291128            UpdateAvatarRotationDamping();
 5291129        }
 130
 131        /// <summary>
 132        /// This methods ensures the Avatar rotates smoothly when changing direction.
 133        /// Note that this will NOT affect the player movement, is only cosmetic.
 134        /// TODO(Brian): This is not camera feel, move this elsewhere
 135        /// </summary>
 136        private void UpdateAvatarRotationDamping()
 137        {
 5291138            var xzPlaneForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1));
 5291139            var xzPlaneRight = Vector3.Scale(cameraTransform.right, new Vector3(1, 0, 1));
 140
 5291141            if (characterYAxis.GetValue() != 0f || characterXAxis.GetValue() != 0f)
 142            {
 0143                Vector3 forwardTarget = Vector3.zero;
 144
 0145                if (characterYAxis.GetValue() > 0)
 0146                    forwardTarget += xzPlaneForward;
 147
 0148                if (characterYAxis.GetValue() < 0)
 0149                    forwardTarget -= xzPlaneForward;
 150
 0151                if (characterXAxis.GetValue() > 0)
 0152                    forwardTarget += xzPlaneRight;
 153
 0154                if (characterXAxis.GetValue() < 0)
 0155                    forwardTarget -= xzPlaneRight;
 156
 0157                forwardTarget.Normalize();
 158
 0159                if (!characterForward.HasValue())
 160                {
 0161                    characterForward.Set(forwardTarget);
 0162                }
 163                else
 164                {
 0165                    var lerpedForward = Vector3.Slerp(characterForward.Get().Value, forwardTarget, avatarRotationLerpSpe
 0166                    characterForward.Set(lerpedForward);
 167                }
 168            }
 5291169        }
 170
 0171        public override Vector3 OnGetRotation() { return new Vector3(defaultVirtualCameraAsFreeLook.m_YAxis.Value, defau
 172
 173        public override void OnSetRotation(CameraController.SetRotationPayload payload)
 174        {
 0175            var eulerDir = Vector3.zero;
 176            //Default looking direction is north
 0177            var verticalAxisLookAt = Vector3.forward;
 178
 0179            if (payload.cameraTarget.HasValue)
 180            {
 0181                var cameraTarget = payload.cameraTarget.GetValueOrDefault();
 182
 0183                var horizontalAxisLookAt = payload.y - cameraTarget.y;
 0184                verticalAxisLookAt = new Vector3(cameraTarget.x - payload.x, 0, cameraTarget.z - payload.z);
 185
 0186                eulerDir.y = Vector3.SignedAngle(Vector3.forward, verticalAxisLookAt, Vector3.up);
 0187                eulerDir.x = Mathf.Atan2(horizontalAxisLookAt, verticalAxisLookAt.magnitude) * Mathf.Rad2Deg;
 188            }
 189
 0190            defaultVirtualCameraAsFreeLook.m_XAxis.Value = eulerDir.y;
 191
 192            //value range 0 to 1, being 0 the bottom orbit and 1 the top orbit
 0193            var yValue = Mathf.InverseLerp(-90, 90, eulerDir.x);
 0194            defaultVirtualCameraAsFreeLook.m_YAxis.Value = yValue;
 195
 0196            characterForward.Set(verticalAxisLookAt);
 0197        }
 198
 199        public override void OnBlock(bool blocked)
 200        {
 0201            base.OnBlock(blocked);
 0202            defaultVirtualCameraAsFreeLook.enabled = !blocked;
 0203        }
 204    }
 205}