コード例 #1
0
    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;
    }
コード例 #2
0
    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;
    }
コード例 #3
0
    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;
            }
        }
    }