< Summary

Class:DCL.Camera.CameraFreefall
Assembly:Camera
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Camera/CameraFreefall.cs
Covered lines:22
Uncovered lines:6
Coverable lines:28
Total lines:79
Line coverage:78.5% (22 of 28)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Settings()0%2100%
CameraFreefall(...)0%110100%
Update(...)0%8.758077.27%

File(s)

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

#LineLine coverage
 1using Cinemachine;
 2using UnityEngine;
 3
 4namespace DCL.Camera
 5{
 6    public class CameraFreefall
 7    {
 8        [System.Serializable]
 9        public class Settings
 10        {
 011            public bool enabled = true;
 12
 13            public CinemachineVirtualCamera freefallVirtualCamera;
 14
 15            public float fallDetectionDelay;
 16
 17            [Tooltip("Min raycast ground distance to be considered a fall")]
 18            public float fallGroundDistanceThreshold;
 19        }
 20
 21        public Settings settings;
 22        private CinemachineFreeLook defaultFreeLookCamera;
 23
 24        private Vector3 lastPosition;
 25        private float fallDetectionTimer;
 408026        protected Vector3Variable characterPosition => CommonScriptableObjects.playerUnityPosition;
 27
 12428        public CameraFreefall (Settings settings, CinemachineFreeLook defaultFreeLookCamera)
 29        {
 12430            this.defaultFreeLookCamera = defaultFreeLookCamera;
 12431            this.settings = settings;
 12432        }
 33
 34        public void Update(bool hitGround, RaycastHit hitInfo)
 35        {
 855336            if ( !settings.enabled )
 651337                return;
 38
 204039            bool useFallingCamera = false;
 40
 204041            if ( hitGround )
 42            {
 204043                useFallingCamera = hitInfo.distance > settings.fallGroundDistanceThreshold;
 204044            }
 45            else
 46            {
 047                useFallingCamera = true;
 48            }
 49
 50
 204051            Vector3 velocity = characterPosition - lastPosition;
 52
 204053            if ( velocity.y < 0 )
 54            {
 5155                fallDetectionTimer += Time.deltaTime;
 56
 5157                if ( fallDetectionTimer < settings.fallDetectionDelay )
 5158                    useFallingCamera = false;
 5159            }
 60            else
 61            {
 198962                fallDetectionTimer = 0;
 63            }
 64
 204065            lastPosition = characterPosition;
 66
 204067            if ( settings.freefallVirtualCamera.gameObject.activeSelf != useFallingCamera)
 068                settings.freefallVirtualCamera.gameObject.SetActive(useFallingCamera);
 69
 204070            if ( useFallingCamera )
 71            {
 072                var orbitalTransposer = settings.freefallVirtualCamera.GetCinemachineComponent<CinemachineOrbitalTranspo
 73
 074                if ( orbitalTransposer != null )
 075                    orbitalTransposer.m_XAxis = defaultFreeLookCamera.m_XAxis;
 76            }
 204077        }
 78    }
 79}