diff --git a/src/lib.rs b/src/lib.rs index e4cfcae..46e2b42 100644 --- a/src/lib.rs +++ b/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);