void GiveUpLadder()
 {
     movementState = e_MovementState.Standing;
     R.isKinematic = false;
     R.useGravity  = true;
     currentLadder = null;
 }
    void ActualizeState()
    {
        if (Dashing && (movementState & (e_MovementState.DashingBackward | e_MovementState.DashingForward | e_MovementState.DashingRight | e_MovementState.DashingLeft)) == 0)
        {
            Vector3 vector = CamPivot.InverseTransformDirection(MoveDirection);

            if (vector.z >= Mathf.Abs(vector.x))
            {
                movementState = e_MovementState.DashingForward;
            }
            else if (vector.z <= -Mathf.Abs(vector.x))
            {
                movementState = e_MovementState.DashingBackward;
            }
            else if (vector.x > Mathf.Abs(vector.z))
            {
                movementState = e_MovementState.DashingRight;
            }
            else
            {
                movementState = e_MovementState.DashingLeft;
            }
        }
        else if (Grounded)
        {
            if (moveVector.sqrMagnitude == 0)
            {
                movementState = e_MovementState.Standing;
            }
            else if (moveInput.y >= Mathf.Abs(moveInput.x))
            {
                movementState = Sprinting ? e_MovementState.SprintingForward : moveInput.sqrMagnitude < 1f ? e_MovementState.WalkForward : e_MovementState.RunForward;
            }
            else if (moveInput.y <= -Mathf.Abs(moveInput.x))
            {
                movementState = Sprinting ? e_MovementState.SprintingBackward : moveInput.sqrMagnitude < 1f ? e_MovementState.WalkBackward : e_MovementState.RunBackward;
            }
            else if (moveInput.x > Mathf.Abs(moveInput.y))
            {
                movementState = Sprinting ? e_MovementState.SprintingRight : moveInput.sqrMagnitude < 1f ? e_MovementState.WalkRight : e_MovementState.RunRight;
            }
            else
            {
                movementState = Sprinting ? e_MovementState.SprintingLeft : moveInput.sqrMagnitude < 1f ? e_MovementState.WalkLeft : e_MovementState.RunLeft;
            }
        }
        else
        {
            movementState = e_MovementState.InAir;
        }
    }
    void OnLadderEnter(Ladder ladder)
    {
        movementState = e_MovementState.Climbing;
        R.isKinematic = true;
        R.useGravity  = false;
        R.velocity    = Vector3.zero;

        currentLadder = ladder;

        //If we are in the precise case where you walk straight a ladder from above it, you wont go up where you came from automatically.
        if (CurrentLadder.TestHeight(BodyColl.transform.position.y - upLadderMaxHeightOffset) == true)
        {
            waitForwardRelease = true;
        }
        Debug.Log(CurrentLadder.TestHeight(BodyColl.transform.position.y - upLadderMaxHeightOffset));
    }