public override void PressMovementHandler() { switch (VerticalPressMovementState) { case VerticalPressMovementState.Jump: Jump(); player.SpendStamina(20, true); //Para motivos de segurança, caso o fixed update demorar para executar playerController.RevokeControl(0.3f, true, ControlTypeToRevoke.AllMovement, monoBehaviour); //Demora de alguns frames para modificar o tipo de VerticalMovementState playerStatusVariables.isOnAir = true; break; case VerticalPressMovementState.ClimbLadder: ClimbOntoLadder(GetLadderPosition()); break; case VerticalPressMovementState.ClimbObstacle: ClimbOntoObstacle(GetObstaclePosition()); break; case VerticalPressMovementState.None: break; default: Debug.Log("Error"); break; } VerticalPressMovementState = VerticalPressMovementState.None; }
public override void PressMovementHandler() { switch (VerticalPressMovementState) { case VerticalPressMovementState.ClimbLadder: ClimbOntoLadder(GetLadderPosition()); break; case VerticalPressMovementState.ClimbObstacle: ClimbOntoObstacle(GetObstaclePosition()); break; case VerticalPressMovementState.None: break; default: Debug.Log("Error"); break; } VerticalPressMovementState = VerticalPressMovementState.None; }
public override void StartMovement() { playerController.CheckForVerticalInput(); playerStatusVariables.canJump = CheckGroundForJump(); playerStatusVariables.isOnAir = playerStatusVariables.CheckIsOnAir(); if (playerStatusVariables.canClimbLadder && playerController.ClimbLadderPress) { playerStatusVariables.isClimbingLadder = playerStatusVariables.canClimbLadder && playerController.ClimbLadderPress || playerStatusVariables.isClimbingLadder; } if (playerStatusVariables.canClimbObstacle && playerController.ClimbObstaclePress) { playerStatusVariables.isClimbingObstacle = playerStatusVariables.canClimbObstacle && playerController.ClimbObstaclePress || playerStatusVariables.isClimbingObstacle; } playerStatusVariables.isJumping = playerStatusVariables.canJump && playerController.Jump && !playerStatusVariables.isClimbingObstacle && player.CheckStamina(20, true); //Para velocidades ridiculamente altas, vai bugar if (playerStatusVariables.isClimbingLadder && playerStatusVariables.canJump) { var coroutine = CoroutineManager.FindCoroutine("ClimbOntoLadderCoroutine"); if (coroutine != null && !coroutine.IsRunning) { PhysicsHelpers.IgnoreCollision(capsuleCollider2D, GetLadderPosition().GetComponent <LadderController>().adjacentCollider, false); playerStatusVariables.isClimbingLadder = false; playerController.RevokeControl(0.3f, false, ControlTypeToRevoke.AllMovement, monoBehaviour); PhysicsHelpers.SwitchGravity(rigidbody2D, true, currentGravityScale); PhysicsHelpers.ResetVelocityY(rigidbody2D); rigidbody2D.isKinematic = false; CoroutineManager.DeleteCoroutine("ClimbOntoLadderCoroutine"); } } if (playerStatusVariables.isClimbingObstacle && playerStatusVariables.canJump) { var coroutine = CoroutineManager.FindCoroutine("ClimbOntoObstacleCoroutine"); if (coroutine != null && !coroutine.IsRunning) { playerStatusVariables.isClimbingObstacle = false; playerController.RevokeControl(0.3f, false, ControlTypeToRevoke.AllMovement, monoBehaviour); PhysicsHelpers.SwitchGravity(rigidbody2D, true, currentGravityScale); rigidbody2D.isKinematic = false; CoroutineManager.DeleteCoroutine("ClimbOntoObstacleCoroutine"); } } CheckForClimbingStairs(); if (playerStatusVariables.isOnAir) { VerticalMovementState = VerticalMovementState.OnAir; } else { if (playerStatusVariables.isJumping) { VerticalPressMovementState = VerticalPressMovementState.Jump; } else if (playerStatusVariables.canClimbLadder && playerController.ClimbLadderPress) { VerticalPressMovementState = VerticalPressMovementState.ClimbLadder; } else if (playerStatusVariables.canClimbObstacle && playerController.ClimbObstaclePress) { VerticalPressMovementState = VerticalPressMovementState.ClimbObstacle; } if (playerStatusVariables.isClimbingLadder && !MathHelpers.Approximately(playerController.VerticalMovement, 0, float.Epsilon)) { VerticalMovementState = VerticalMovementState.ClimbingLadder; } else if (playerStatusVariables.isClimbingObstacle) { VerticalMovementState = VerticalMovementState.ClimbingObstacle; } else if (playerStatusVariables.isJumping) { VerticalMovementState = VerticalMovementState.OnAir; } else { VerticalMovementState = VerticalMovementState.Grounded; } } }