Пример #1
0
    private static bool IsFacingRight(SpecificState state)
    {
        bool isFacingRight;

        switch (state)
        {
        case SpecificState.IdleRight:
        case SpecificState.RunRight:
        case SpecificState.JumpFaceRight:
        case SpecificState.JumpMoveRight:
        case SpecificState.FallFaceRight:
        case SpecificState.FallMoveRight:
        case SpecificState.ClimbRightIdle:
        case SpecificState.ClimbRightUp:
        case SpecificState.ClimbRightDown:
        case SpecificState.ClimbTopIdleRight:
        case SpecificState.ClimbTopMoveRight:
            isFacingRight = true;
            break;

        default:
            isFacingRight = false;
            break;
        }

        return(isFacingRight);
    }
Пример #2
0
    // other stuff here
    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        SpecificState state = _prov.GetState();

        if (state != null)
        {
            state.MessWithStuff();
        }
    }
Пример #3
0
    private static AnimeState GetAnimeFromState(SpecificState state)
    {
        var animeState = AnimeState.Idle;

        switch (state)
        {
        case SpecificState.IdleLeft:
        case SpecificState.IdleRight:
            animeState = AnimeState.Idle;
            break;

        case SpecificState.RunLeft:
        case SpecificState.RunRight:
            animeState = AnimeState.Run;
            break;

        case SpecificState.JumpFaceLeft:
        case SpecificState.JumpFaceRight:
        case SpecificState.JumpMoveLeft:
        case SpecificState.JumpMoveRight:
            animeState = AnimeState.Jump;
            break;

        case SpecificState.FallFaceLeft:
        case SpecificState.FallFaceRight:
        case SpecificState.FallMoveLeft:
        case SpecificState.FallMoveRight:
            animeState = AnimeState.AirFall;
            break;

        case SpecificState.ClimbLeftIdle:
        case SpecificState.ClimbRightIdle:
            animeState = AnimeState.SideClimbIdle;
            break;

        case SpecificState.ClimbLeftUp:
        case SpecificState.ClimbLeftDown:
        case SpecificState.ClimbRightUp:
        case SpecificState.ClimbRightDown:
            animeState = AnimeState.SideClimb;
            break;

        case SpecificState.ClimbTopIdleLeft:
        case SpecificState.ClimbTopIdleRight:
            animeState = AnimeState.TopClimbIdle;
            break;

        case SpecificState.ClimbTopMoveLeft:
        case SpecificState.ClimbTopMoveRight:
            animeState = AnimeState.TopClimb;
            break;
        }

        return(animeState);
    }
Пример #4
0
    private static SpecificState GetNextState(SpecificState currentState, InputData currentInput, PhysicalData currentPhysicals, float deadzone = float.Epsilon)
    {
        var nextState = currentState;

        switch (currentState)
        {
        case SpecificState.IdleLeft:
            if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.IdleRight;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.RunLeft;
            }
            else if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.buttonA)
            {
                nextState = SpecificState.JumpFaceLeft;
            }
            break;

        case SpecificState.IdleRight:
            if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.RunRight;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.IdleLeft;
            }
            else if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.buttonA)
            {
                nextState = SpecificState.JumpFaceRight;
            }
            break;

        case SpecificState.RunLeft:
            if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.IdleLeft;
            }
            else if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentInput.buttonA)
            {
                nextState = SpecificState.JumpMoveLeft;
            }
            else if (currentPhysicals.leftWall)
            {
                nextState = SpecificState.ClimbLeftIdle;
            }
            break;

        case SpecificState.RunRight:
            if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.IdleRight;
            }
            else if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentInput.buttonA)
            {
                nextState = SpecificState.JumpMoveRight;
            }
            else if (currentPhysicals.rightWall)
            {
                nextState = SpecificState.ClimbRightIdle;
            }
            break;

        case SpecificState.JumpFaceLeft:
            if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.JumpMoveLeft;
            }
            else if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.JumpFaceRight;
            }
            else if (currentPhysicals.botWall)
            {
                nextState = SpecificState.IdleLeft;
            }
            else if (currentPhysicals.topWall && currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbTopIdleLeft;
            }
            break;

        case SpecificState.JumpFaceRight:
            if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            else if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.JumpMoveRight;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.JumpFaceLeft;
            }
            else if (currentPhysicals.botWall)
            {
                nextState = SpecificState.IdleRight;
            }
            else if (currentPhysicals.topWall && currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbTopIdleRight;
            }
            break;

        case SpecificState.JumpMoveLeft:
            if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.JumpFaceLeft;
            }
            else if (currentPhysicals.botWall)
            {
                nextState = SpecificState.RunLeft;
            }
            else if (currentPhysicals.leftWall)
            {
                nextState = SpecificState.ClimbLeftIdle;
            }
            else if (currentPhysicals.topWall && currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbTopMoveLeft;
            }
            break;

        case SpecificState.JumpMoveRight:
            if (currentPhysicals.velocity.y < -deadzone)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.JumpFaceRight;
            }
            else if (currentPhysicals.botWall)
            {
                nextState = SpecificState.RunRight;
            }
            else if (currentPhysicals.rightWall)
            {
                nextState = SpecificState.ClimbRightIdle;
            }
            else if (currentPhysicals.topWall && currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbTopMoveRight;
            }
            break;

        case SpecificState.FallFaceLeft:
            if (currentPhysicals.botWall)
            {
                nextState = SpecificState.IdleLeft;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            break;

        case SpecificState.FallFaceRight:
            if (currentPhysicals.botWall)
            {
                nextState = SpecificState.IdleRight;
            }
            else if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            break;

        case SpecificState.FallMoveLeft:
            if (currentPhysicals.botWall)
            {
                nextState = SpecificState.RunLeft;
            }
            else if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentPhysicals.leftWall)
            {
                nextState = SpecificState.ClimbLeftIdle;
            }
            break;

        case SpecificState.FallMoveRight:
            if (currentPhysicals.botWall)
            {
                nextState = SpecificState.RunRight;
            }
            else if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            else if (currentPhysicals.rightWall)
            {
                nextState = SpecificState.ClimbRightIdle;
            }
            break;

        case SpecificState.ClimbLeftIdle:
            if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbLeftUp;
            }
            else if (currentInput.vertical < -deadzone && !currentPhysicals.botWall)
            {
                nextState = SpecificState.ClimbLeftDown;
            }
            break;

        case SpecificState.ClimbRightIdle:
            if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            else if (currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbRightUp;
            }
            else if (currentInput.vertical < -deadzone && !currentPhysicals.botWall)
            {
                nextState = SpecificState.ClimbRightDown;
            }
            break;

        case SpecificState.ClimbLeftUp:
            if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.vertical < deadzone)
            {
                nextState = SpecificState.ClimbLeftIdle;
            }
            else if (!currentPhysicals.leftWall)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentPhysicals.topWall && currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbTopIdleLeft;
            }
            break;

        case SpecificState.ClimbRightUp:
            if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            else if (currentInput.vertical < deadzone)
            {
                nextState = SpecificState.ClimbRightIdle;
            }
            else if (!currentPhysicals.rightWall)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentPhysicals.topWall && currentInput.vertical > deadzone)
            {
                nextState = SpecificState.ClimbTopIdleRight;
            }
            break;

        case SpecificState.ClimbLeftDown:
            if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.vertical > -deadzone)
            {
                nextState = SpecificState.ClimbLeftIdle;
            }
            else if (!currentPhysicals.leftWall)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentPhysicals.botWall)
            {
                nextState = SpecificState.ClimbLeftIdle;
            }
            break;

        case SpecificState.ClimbRightDown:
            if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            else if (currentInput.vertical > -deadzone)
            {
                nextState = SpecificState.ClimbRightIdle;
            }
            else if (!currentPhysicals.rightWall)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentPhysicals.botWall)
            {
                nextState = SpecificState.ClimbRightIdle;
            }
            break;

        case SpecificState.ClimbTopIdleLeft:
            if (currentInput.vertical < deadzone)
            {
                nextState = SpecificState.FallFaceLeft;
            }
            else if (currentInput.horizontal < -deadzone && !currentPhysicals.leftWall)
            {
                nextState = SpecificState.ClimbTopMoveLeft;
            }
            else if (currentInput.horizontal > deadzone)
            {
                nextState = SpecificState.ClimbTopIdleRight;
            }
            break;

        case SpecificState.ClimbTopIdleRight:
            if (currentInput.vertical < deadzone)
            {
                nextState = SpecificState.FallFaceRight;
            }
            else if (currentInput.horizontal > deadzone && !currentPhysicals.rightWall)
            {
                nextState = SpecificState.ClimbTopMoveRight;
            }
            else if (currentInput.horizontal < -deadzone)
            {
                nextState = SpecificState.ClimbTopIdleLeft;
            }
            break;

        case SpecificState.ClimbTopMoveLeft:
            if (currentInput.vertical < deadzone)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentInput.horizontal > -deadzone)
            {
                nextState = SpecificState.ClimbTopIdleLeft;
            }
            else if (!currentPhysicals.topWall)
            {
                nextState = SpecificState.FallMoveLeft;
            }
            else if (currentPhysicals.leftWall)
            {
                nextState = SpecificState.ClimbTopIdleLeft;
            }
            break;

        case SpecificState.ClimbTopMoveRight:
            if (currentInput.vertical < deadzone)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentInput.horizontal < deadzone)
            {
                nextState = SpecificState.ClimbTopIdleRight;
            }
            else if (!currentPhysicals.topWall)
            {
                nextState = SpecificState.FallMoveRight;
            }
            else if (currentPhysicals.rightWall)
            {
                nextState = SpecificState.ClimbTopIdleRight;
            }
            break;
        }
        return(nextState);
    }
Пример #5
0
 private void TickState()
 {
     prevState    = currentState;
     currentState = GetNextState(currentState, currentInput, currentPhysicals, deadzone);
 }