< 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:38
Uncovered lines:55
Coverable lines:93
Total lines:199
Line coverage:40.8% (38 of 93)
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%220100%
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 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;
 10722        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")]
 61330        public float avatarRotationLerpSpeed = 10;
 31
 32        [SerializeField]
 61333        private CameraFreefall.Settings cameraFreefallSettings = new CameraFreefall.Settings();
 34
 35        public CameraFreefall cameraFreefall;
 36
 37        [SerializeField]
 61338        private CameraDampOnGroundType.Settings cameraDampOnGroundTypeSettings = new CameraDampOnGroundType.Settings();
 39
 40        public CameraDampOnGroundType cameraDampOnGroundType;
 41
 42        [SerializeField]
 61343        private CameraDampOnSprint.Settings cameraSprintDampingSettings = new CameraDampOnSprint.Settings();
 44
 45        public CameraDampOnSprint cameraDampOnSprint;
 46
 47        public override void Initialize(UnityEngine.Camera camera)
 48        {
 61049            freeLookTopRig = defaultVirtualCameraAsFreeLook.GetRig(0).GetCinemachineComponent<CinemachineTransposer>();
 61050            freeLookTopRigOriginalBodyDamping = new Vector3(freeLookTopRig.m_XDamping, freeLookTopRig.m_YDamping, freeLo
 61051            freeLookMidRig = defaultVirtualCameraAsFreeLook.GetRig(1).GetCinemachineComponent<CinemachineTransposer>();
 61052            freeLookMidRigOriginalBodyDamping = new Vector3(freeLookMidRig.m_XDamping, freeLookMidRig.m_YDamping, freeLo
 61053            freeLookBotRig = defaultVirtualCameraAsFreeLook.GetRig(2).GetCinemachineComponent<CinemachineTransposer>();
 61054            freeLookBotRigOriginalBodyDamping = new Vector3(freeLookBotRig.m_XDamping, freeLookBotRig.m_YDamping, freeLo
 55
 61056            cameraDampOnSprint = new CameraDampOnSprint(cameraSprintDampingSettings, defaultVirtualCameraAsFreeLook, cha
 61057            cameraDampOnGroundType = new CameraDampOnGroundType(cameraDampOnGroundTypeSettings, cameraTargetProbe);
 61058            cameraFreefall = new CameraFreefall(cameraFreefallSettings, defaultVirtualCameraAsFreeLook);
 59
 61060            base.Initialize(camera);
 61061        }
 62
 63        public override void Cleanup()
 64        {
 61065            if (cameraTargetProbe != null)
 61066                Destroy(cameraTargetProbe.gameObject);
 61067        }
 68
 69        private void OnEnable()
 70        {
 10571            CommonScriptableObjects.playerIsOnMovingPlatform.OnChange += UpdateMovingPlatformCamera;
 10572        }
 73
 21074        private void OnDisable() { CommonScriptableObjects.playerIsOnMovingPlatform.OnChange -= UpdateMovingPlatformCame
 75
 76        void UpdateMovingPlatformCamera(bool isOnMovingPlatform, bool wasOnMovingPlatform)
 77        {
 078            if (isOnMovingPlatform)
 79            {
 080                freeLookTopRig.m_XDamping = 0;
 081                freeLookTopRig.m_YDamping = 0;
 082                freeLookTopRig.m_ZDamping = 0;
 83
 084                freeLookMidRig.m_XDamping = 0;
 085                freeLookMidRig.m_YDamping = 0;
 086                freeLookMidRig.m_ZDamping = 0;
 87
 088                freeLookBotRig.m_XDamping = 0;
 089                freeLookBotRig.m_YDamping = 0;
 090                freeLookBotRig.m_ZDamping = 0;
 091            }
 92            else
 93            {
 094                freeLookTopRig.m_XDamping = freeLookTopRigOriginalBodyDamping.x;
 095                freeLookTopRig.m_YDamping = freeLookTopRigOriginalBodyDamping.y;
 096                freeLookTopRig.m_ZDamping = freeLookTopRigOriginalBodyDamping.z;
 97
 098                freeLookMidRig.m_XDamping = freeLookMidRigOriginalBodyDamping.x;
 099                freeLookMidRig.m_YDamping = freeLookMidRigOriginalBodyDamping.y;
 0100                freeLookMidRig.m_ZDamping = freeLookMidRigOriginalBodyDamping.z;
 101
 0102                freeLookBotRig.m_XDamping = freeLookBotRigOriginalBodyDamping.x;
 0103                freeLookBotRig.m_YDamping = freeLookBotRigOriginalBodyDamping.y;
 0104                freeLookBotRig.m_ZDamping = freeLookBotRigOriginalBodyDamping.z;
 105            }
 0106        }
 107
 108        public override void OnSelect()
 109        {
 105110            if (characterForward.Get().HasValue)
 111            {
 2112                defaultVirtualCameraAsFreeLook.m_XAxis.Value = Quaternion.LookRotation(characterForward.Get().Value, Vec
 2113                defaultVirtualCameraAsFreeLook.m_YAxis.Value = 0.5f;
 114            }
 115
 105116            base.OnSelect();
 105117        }
 118
 119        public override void OnUpdate()
 120        {
 1859121            defaultVirtualCameraAsFreeLook.m_BindingMode = CinemachineTransposer.BindingMode.WorldSpace;
 122
 1859123            bool didHit = DCLCharacterController.i.CastGroundCheckingRays(20, 0.1f, out RaycastHit hitInfo);
 124
 1859125            cameraDampOnSprint.Update();
 1859126            cameraDampOnGroundType.Update(didHit, hitInfo);
 1859127            cameraFreefall.Update(didHit, hitInfo);
 128
 1859129            UpdateAvatarRotationDamping();
 1859130        }
 131
 132        /// <summary>
 133        /// This methods ensures the Avatar rotates smoothly when changing direction.
 134        /// Note that this will NOT affect the player movement, is only cosmetic.
 135        /// TODO(Brian): This is not camera feel, move this elsewhere
 136        /// </summary>
 137        private void UpdateAvatarRotationDamping()
 138        {
 1859139            var xzPlaneForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1));
 1859140            var xzPlaneRight = Vector3.Scale(cameraTransform.right, new Vector3(1, 0, 1));
 141
 1859142            if (characterYAxis.GetValue() != 0f || characterXAxis.GetValue() != 0f)
 143            {
 0144                Vector3 forwardTarget = Vector3.zero;
 145
 0146                if (characterYAxis.GetValue() > 0)
 0147                    forwardTarget += xzPlaneForward;
 148
 0149                if (characterYAxis.GetValue() < 0)
 0150                    forwardTarget -= xzPlaneForward;
 151
 0152                if (characterXAxis.GetValue() > 0)
 0153                    forwardTarget += xzPlaneRight;
 154
 0155                if (characterXAxis.GetValue() < 0)
 0156                    forwardTarget -= xzPlaneRight;
 157
 0158                forwardTarget.Normalize();
 159
 0160                if (!characterForward.HasValue())
 161                {
 0162                    characterForward.Set(forwardTarget);
 0163                }
 164                else
 165                {
 0166                    var lerpedForward = Vector3.Slerp(characterForward.Get().Value, forwardTarget, avatarRotationLerpSpe
 0167                    characterForward.Set(lerpedForward);
 168                }
 169            }
 1859170        }
 171
 0172        public override Vector3 OnGetRotation() { return new Vector3(defaultVirtualCameraAsFreeLook.m_YAxis.Value, defau
 173
 174        public override void OnSetRotation(CameraController.SetRotationPayload payload)
 175        {
 0176            var eulerDir = Vector3.zero;
 177
 0178            if (payload.cameraTarget.HasValue)
 179            {
 0180                var newPos = new Vector3(payload.x, payload.y, payload.z);
 0181                var cameraTarget = payload.cameraTarget.GetValueOrDefault();
 0182                var dirToLook = (cameraTarget - newPos);
 0183                eulerDir = Quaternion.LookRotation(dirToLook).eulerAngles;
 184            }
 185
 0186            defaultVirtualCameraAsFreeLook.m_XAxis.Value = eulerDir.y;
 187
 188            //value range 0 to 1, being 0 the bottom orbit and 1 the top orbit
 0189            var yValue = Mathf.InverseLerp(-90, 90, eulerDir.x);
 0190            defaultVirtualCameraAsFreeLook.m_YAxis.Value = yValue;
 0191        }
 192
 193        public override void OnBlock(bool blocked)
 194        {
 0195            base.OnBlock(blocked);
 0196            defaultVirtualCameraAsFreeLook.enabled = !blocked;
 0197        }
 198    }
 199}