Vector3 FreeMovement()
    {
        velocity.x = 0f;
        velocity.z = 0f;
        velocity.y = 0;

        if (characterController.enabled)
        {
            var speed = movementSpeed * (isSprinting ? runningSpeedMultiplier : 1f);

            transform.forward = characterForward.Get().Value;

            var xzPlaneForward = Vector3.Scale(cameraForward.Get(), new Vector3(1, 0, 1));
            var xzPlaneRight   = Vector3.Scale(cameraRight.Get(), new Vector3(1, 0, 1));

            Vector3 forwardTarget = Vector3.zero;

            if (characterYAxis.GetValue() > 0)
            {
                forwardTarget += xzPlaneForward;
            }
            if (characterYAxis.GetValue() < 0)
            {
                forwardTarget -= xzPlaneForward;
            }

            if (characterXAxis.GetValue() > 0)
            {
                forwardTarget += xzPlaneRight;
            }
            if (characterXAxis.GetValue() < 0)
            {
                forwardTarget -= xzPlaneRight;
            }


            if (Input.GetKey(KeyCode.Space))
            {
                forwardTarget += Vector3.up;
            }
            else if (Input.GetKey(KeyCode.X))
            {
                forwardTarget += Vector3.down;
            }

            forwardTarget.Normalize();


            velocity += forwardTarget * speed;
            CommonScriptableObjects.playerUnityEulerAngles.Set(transform.eulerAngles);

            characterController.Move(velocity * deltaTime);
        }

        return(velocity);
    }
        public void Update()
        {
            if (!settings.enabled)
            {
                return;
            }

            var orbit = sourceFreeLook.m_Orbits[1];

            if (characterYAxis.GetValue() > 0 && !DCLCharacterController.i.isWalking)
            {
                currentDampingDelay += Time.deltaTime;

                if (currentDampingDelay > settings.inDampingDelay)
                {
                    orbit.m_Radius += Damper.Damp(settings.distanceMax - orbit.m_Radius, settings.inDampingTime, Time.deltaTime);
                    sourceFreeLook.m_Lens.FieldOfView += Damper.Damp(settings.fovMax - sourceFreeLook.m_Lens.FieldOfView, settings.inDampingTime, Time.deltaTime);
                }
            }
            else
            {
                currentDampingDelay = 0;
                orbit.m_Radius     += Damper.Damp(settings.distanceMin - orbit.m_Radius, settings.outDampingTime, Time.deltaTime);
                sourceFreeLook.m_Lens.FieldOfView += Damper.Damp(settings.fovMin - sourceFreeLook.m_Lens.FieldOfView, settings.outDampingTime, Time.deltaTime);
            }

            sourceFreeLook.m_Orbits[1] = orbit;
        }
 private void Update()
 {
     if ((playerXAxisInpuAction.GetValue() != 0f || playerYAxisInputAction.GetValue() != 0f) &&
         mainSection.activeSelf)
     {
         timeRunning += Time.deltaTime;
     }
 }
Example #4
0
    public override void OnUpdate()
    {
        defaultVirtualCameraAsFreeLook.m_BindingMode = CinemachineTransposer.BindingMode.WorldSpace;

        var xzPlaneForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1));
        var xzPlaneRight   = Vector3.Scale(cameraTransform.right, new Vector3(1, 0, 1));

        if (characterYAxis.GetValue() != 0f || characterXAxis.GetValue() != 0f)
        {
            Vector3 forwardTarget = Vector3.zero;

            if (characterYAxis.GetValue() > 0)
            {
                forwardTarget += xzPlaneForward;
            }

            if (characterYAxis.GetValue() < 0)
            {
                forwardTarget -= xzPlaneForward;
            }

            if (characterXAxis.GetValue() > 0)
            {
                forwardTarget += xzPlaneRight;
            }

            if (characterXAxis.GetValue() < 0)
            {
                forwardTarget -= xzPlaneRight;
            }

            forwardTarget.Normalize();

            if (!characterForward.HasValue())
            {
                characterForward.Set(forwardTarget);
            }
            else
            {
                var lerpedForward = Vector3.Slerp(characterForward.Get().Value, forwardTarget, rotationLerpSpeed * Time.deltaTime);
                characterForward.Set(lerpedForward);
            }
        }
    }
        /// <summary>
        /// This methods ensures the Avatar rotates smoothly when changing direction.
        /// Note that this will NOT affect the player movement, is only cosmetic.
        /// TODO(Brian): This is not camera feel, move this elsewhere
        /// </summary>
        private void UpdateAvatarRotationDamping()
        {
            var xzPlaneForward = Vector3.Scale(cameraTransform.forward, new Vector3(1, 0, 1));
            var xzPlaneRight   = Vector3.Scale(cameraTransform.right, new Vector3(1, 0, 1));

            if (characterYAxis.GetValue() != 0f || characterXAxis.GetValue() != 0f)
            {
                Vector3 forwardTarget = Vector3.zero;

                if (characterYAxis.GetValue() > 0)
                {
                    forwardTarget += xzPlaneForward;
                }

                if (characterYAxis.GetValue() < 0)
                {
                    forwardTarget -= xzPlaneForward;
                }

                if (characterXAxis.GetValue() > 0)
                {
                    forwardTarget += xzPlaneRight;
                }

                if (characterXAxis.GetValue() < 0)
                {
                    forwardTarget -= xzPlaneRight;
                }

                forwardTarget.Normalize();

                if (!characterForward.HasValue())
                {
                    characterForward.Set(forwardTarget);
                }
                else
                {
                    var lerpedForward = Vector3.Slerp(characterForward.Get().Value, forwardTarget, avatarRotationLerpSpeed * Time.deltaTime);
                    characterForward.Set(lerpedForward);
                }
            }
        }
    internal void LateUpdate()
    {
        deltaTime = Mathf.Min(deltaTimeCap, Time.deltaTime);

        if (transform.position.y < minimumYPosition)
        {
            SetPosition(characterPosition.worldPosition);
            return;
        }

        velocity.x  = 0f;
        velocity.z  = 0f;
        velocity.y += gravity * deltaTime;

        bool previouslyGrounded = isGrounded;

        if (!isJumping || velocity.y <= 0f)
        {
            CheckGround();
        }

        if (isGrounded)
        {
            isJumping  = false;
            velocity.y = gravity * deltaTime; // to avoid accumulating gravity in velocity.y while grounded
        }
        else if (previouslyGrounded && !isJumping)
        {
            lastUngroundedTime = Time.time;
        }

        if (Utils.isCursorLocked && characterForward.HasValue())
        {
            // Horizontal movement
            var speed = movementSpeed * (isSprinting ? runningSpeedMultiplier : 1f);

            transform.forward = characterForward.Get().Value;

            var xzPlaneForward = Vector3.Scale(cameraForward.Get(), new Vector3(1, 0, 1));
            var xzPlaneRight   = Vector3.Scale(cameraRight.Get(), new Vector3(1, 0, 1));

            Vector3 forwardTarget = Vector3.zero;

            if (characterYAxis.GetValue() > 0)
            {
                forwardTarget += xzPlaneForward;
            }
            if (characterYAxis.GetValue() < 0)
            {
                forwardTarget -= xzPlaneForward;
            }

            if (characterXAxis.GetValue() > 0)
            {
                forwardTarget += xzPlaneRight;
            }
            if (characterXAxis.GetValue() < 0)
            {
                forwardTarget -= xzPlaneRight;
            }

            forwardTarget.Normalize();

            velocity += forwardTarget * speed;

            CommonScriptableObjects.playerUnityEulerAngles.Set(transform.eulerAngles);
        }

        bool jumpButtonPressedWithGraceTime = jumpButtonPressed && (Time.time - lastJumpButtonPressedTime < 0.15f);

        if (jumpButtonPressedWithGraceTime) // almost-grounded jump button press allowed time
        {
            bool justLeftGround = (Time.time - lastUngroundedTime) < 0.1f;

            if (isGrounded || justLeftGround) // just-left-ground jump allowed time
            {
                Jump();
            }
        }

        bool movingPlatformMovedTooMuch = Vector3.Distance(lastPosition, transform.position) > movingPlatformAllowedPosDelta;

        if (isOnMovingPlatform && !characterPosition.RepositionedWorldLastFrame() && movingPlatformMovedTooMuch)
        {
            ResetGround();
            // As the character has already been moved faster-than-we-want, we reposition it
            characterController.transform.position = lastPosition;
        }

        if (characterController.enabled)
        {
            //NOTE(Brian): Transform has to be in sync before the Move call, otherwise this call
            //             will reset the character controller to its previous position.
            SceneController.i.physicsSyncController.Sync();
            characterController.Move(velocity * deltaTime);
        }

        SetPosition(characterPosition.UnityToWorldPosition(transform.position));

        if ((DCLTime.realtimeSinceStartup - lastMovementReportTime) > PlayerSettings.POSITION_REPORTING_DELAY)
        {
            ReportMovement();
        }

        if (isOnMovingPlatform)
        {
            lastLocalGroundPosition = groundTransform.InverseTransformPoint(transform.position);
        }
    }
Example #7
0
 void Update()
 {
     axisTarget[0] = axisX.GetValue();
     axisTarget[1] = axisY.GetValue();
     axis         += Damper.Damp(axisTarget - axis, dampTime, Time.deltaTime);
 }
    internal void LateUpdate()
    {
        deltaTime = Mathf.Min(deltaTimeCap, Time.deltaTime);

        if (transform.position.y < minimumYPosition)
        {
            SetPosition(characterPosition.worldPosition);
            return;
        }

        if (freeMovementController.IsActive())
        {
            velocity = freeMovementController.CalculateMovement();
        }
        else
        {
            velocity.x  = 0f;
            velocity.z  = 0f;
            velocity.y += gravity * deltaTime;

            bool previouslyGrounded = isGrounded;

            if (!isJumping || velocity.y <= 0f)
            {
                CheckGround();
            }

            if (isGrounded)
            {
                isJumping  = false;
                velocity.y = gravity * deltaTime; // to avoid accumulating gravity in velocity.y while grounded
            }
            else if (previouslyGrounded && !isJumping)
            {
                lastUngroundedTime = Time.time;
            }

            if (Utils.isCursorLocked && characterForward.HasValue())
            {
                // Horizontal movement
                var speed = movementSpeed * (isWalking ? runningSpeedMultiplier : 1f);

                transform.forward = characterForward.Get().Value;

                var xzPlaneForward = Vector3.Scale(cameraForward.Get(), new Vector3(1, 0, 1));
                var xzPlaneRight   = Vector3.Scale(cameraRight.Get(), new Vector3(1, 0, 1));

                Vector3 forwardTarget = Vector3.zero;

                if (characterYAxis.GetValue() > 0)
                {
                    forwardTarget += xzPlaneForward;
                }
                if (characterYAxis.GetValue() < 0)
                {
                    forwardTarget -= xzPlaneForward;
                }

                if (characterXAxis.GetValue() > 0)
                {
                    forwardTarget += xzPlaneRight;
                }
                if (characterXAxis.GetValue() < 0)
                {
                    forwardTarget -= xzPlaneRight;
                }


                forwardTarget.Normalize();
                velocity += forwardTarget * speed;
                CommonScriptableObjects.playerUnityEulerAngles.Set(transform.eulerAngles);
            }

            bool jumpButtonPressedWithGraceTime = jumpButtonPressed && (Time.time - lastJumpButtonPressedTime < 0.15f);

            if (jumpButtonPressedWithGraceTime) // almost-grounded jump button press allowed time
            {
                bool justLeftGround = (Time.time - lastUngroundedTime) < 0.1f;

                if (isGrounded || justLeftGround) // just-left-ground jump allowed time
                {
                    Jump();
                }
            }

            //NOTE(Mordi): Detecting when the character hits the ground (for landing-SFX)
            if (isGrounded && !previouslyGrounded && (Time.time - lastUngroundedTime) > 0.4f)
            {
                OnHitGround?.Invoke();
            }
        }

        if (characterController.enabled)
        {
            //NOTE(Brian): Transform has to be in sync before the Move call, otherwise this call
            //             will reset the character controller to its previous position.
            Environment.i.platform.physicsSyncController.Sync();
            characterController.Move(velocity * deltaTime);
        }

        SetPosition(PositionUtils.UnityToWorldPosition(transform.position));

        if ((DCLTime.realtimeSinceStartup - lastMovementReportTime) > PlayerSettings.POSITION_REPORTING_DELAY)
        {
            ReportMovement();
        }

        if (isOnMovingPlatform)
        {
            lastLocalGroundPosition = groundTransform.InverseTransformPoint(transform.position);
        }

        OnUpdateFinish?.Invoke(deltaTime);
    }
Example #9
0
 public void Return_0_AsDefaultValue()
 {
     Assert.AreEqual(0, action.GetValue());
 }