private void HandleJumping()
        {
            if (currentMotorState == PlayerMotorStateEnum.Grounded || ((currentMotorState == PlayerMotorStateEnum.Falling || currentMotorState == PlayerMotorStateEnum.Sliding) &&
                                                                       Time.time - lastGroundedTime < motorVariables.ExtraJumpTimeAfterLeavingGround))
            {
                if (jumpPressed)
                {
                    GroundContactLost();

                    JumpStart();

                    currentMotorState = PlayerMotorStateEnum.Jumping;
                }
            }
        }
        private void HandleState()
        {
            var isRising  = IsRisingOrFalling() && (VectorMath.GetDotProduct(momentum, mover.transform.up) > 0f);
            var isSliding = mover.IsGrounded() &&
                            (Vector3.Angle(mover.GetGroundNormal(), mover.transform.up) > motorVariables.SlopeLimit);

            switch (currentMotorState)
            {
            case PlayerMotorStateEnum.Grounded:

                if (isRising)
                {
                    currentMotorState = PlayerMotorStateEnum.Rising;
                    GroundContactLost();
                    break;
                }

                if (!mover.IsGrounded())
                {
                    currentMotorState = PlayerMotorStateEnum.Falling;
                    GroundContactLost();
                    break;
                }

                if (isSliding)
                {
                    currentMotorState = PlayerMotorStateEnum.Sliding;
                    break;
                }

                lastGroundedTime = Time.time;

                break;

            case PlayerMotorStateEnum.Falling:

                if (isRising)
                {
                    currentMotorState = PlayerMotorStateEnum.Rising;
                    break;
                }

                if (mover.IsGrounded() && !isSliding)
                {
                    currentMotorState = PlayerMotorStateEnum.Grounded;
                    GroundContactRegained(momentum);
                    break;
                }

                if (isSliding)
                {
                    currentMotorState = PlayerMotorStateEnum.Sliding;
                    GroundContactRegained(momentum);
                    break;
                }

                break;

            case PlayerMotorStateEnum.Sliding:

                if (isRising)
                {
                    currentMotorState = PlayerMotorStateEnum.Rising;
                    GroundContactLost();
                    break;
                }

                if (!mover.IsGrounded())
                {
                    currentMotorState = PlayerMotorStateEnum.Falling;
                    break;
                }
                if (mover.IsGrounded() && !isSliding)
                {
                    GroundContactRegained(momentum);
                    currentMotorState = PlayerMotorStateEnum.Grounded;
                    break;
                }
                break;

            case PlayerMotorStateEnum.Rising:

                if (isRising)
                {
                    break;
                }

                if (mover.IsGrounded() && !isSliding)
                {
                    currentMotorState = PlayerMotorStateEnum.Grounded;
                    GroundContactRegained(momentum);
                    break;
                }

                if (isSliding)
                {
                    currentMotorState = PlayerMotorStateEnum.Sliding;
                    break;
                }

                if (!mover.IsGrounded())
                {
                    currentMotorState = PlayerMotorStateEnum.Falling;
                    break;
                }

                break;

            case PlayerMotorStateEnum.Jumping:

                if ((Time.time - jumpStartTime) > motorVariables.JumpDuration)
                {
                    currentMotorState = PlayerMotorStateEnum.Rising;
                    break;
                }

                break;
            }
        }