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); }
// other stuff here protected override void OnClick(EventArgs e) { base.OnClick(e); SpecificState state = _prov.GetState(); if (state != null) { state.MessWithStuff(); } }
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); }
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); }
private void TickState() { prevState = currentState; currentState = GetNextState(currentState, currentInput, currentPhysicals, deadzone); }