States, I guess. Now to do the others
Game states are named and used to toggle behavior. Now to rewrite those things to do the *right* behavior.
This commit is contained in:
20
src/lib.rs
20
src/lib.rs
@@ -11,7 +11,7 @@ impl Plugin for AsteroidPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_systems(
|
||||
Startup,
|
||||
(spawn_camera, spawn_player, spawn_ui, start_screen),
|
||||
(spawn_camera, spawn_player, spawn_ui),
|
||||
)
|
||||
.insert_resource(ClearColor(BACKGROUND_COLOR))
|
||||
.insert_resource(WorldSize {
|
||||
@@ -22,15 +22,29 @@ impl Plugin for AsteroidPlugin {
|
||||
.insert_resource(Score(0))
|
||||
.add_systems(
|
||||
FixedUpdate,
|
||||
(input_ship_thruster, input_ship_rotation, wrap_entities),
|
||||
(input_ship_thruster, input_ship_rotation, wrap_entities).run_if(in_state(GameState::Playing)),
|
||||
)
|
||||
.add_systems(
|
||||
FixedPostUpdate,
|
||||
(integrate_velocity, update_positions, apply_rotation_to_mesh),
|
||||
(integrate_velocity, update_positions, apply_rotation_to_mesh).run_if(in_state(GameState::Playing)),
|
||||
)
|
||||
.add_systems(
|
||||
OnEnter(GameState::TitleScreen),
|
||||
start_screen
|
||||
);
|
||||
|
||||
app.insert_state(GameState::TitleScreen);
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, Hash, PartialEq, States)]
|
||||
enum GameState {
|
||||
TitleScreen, // Program is started. Present title screen and await user start
|
||||
GetReady, // Short timer to let the player get ready after pressing start
|
||||
Playing, // Player has started the game. Run the main loop
|
||||
GameOver, // Game has ended. Present game over dialogue and await user restart
|
||||
}
|
||||
|
||||
#[derive(Component)]
|
||||
struct Position(bevy::math::Vec2);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user