use crate::GameState; use bevy::prelude::*; pub struct GameMenuPlugin; impl Plugin for GameMenuPlugin { fn build(&self, app: &mut App) { app.add_systems(OnEnter(GameState::TitleScreen), spawn_menu) .add_systems(OnExit(GameState::TitleScreen), despawn_menu) .add_systems( Update, handle_spacebar.run_if(in_state(GameState::TitleScreen)), ); } } // Marker component for the title screen UI entity. // This way, a query for the TitleUI can be used to despawn the title screen #[derive(Component)] struct TitleUI; fn spawn_menu(mut commands: Commands) { commands .spawn(( TitleUI, Node { flex_direction: FlexDirection::Column, ..Default::default() }, )) .with_children(|cmds| { cmds.spawn(( Text::new("Robert's Bad Asteroids Game"), TextFont::from_font_size(50.0), )); cmds.spawn(( Text::new("Press space to begin"), TextFont::from_font_size(40.0), )); }); } fn despawn_menu(mut commands: Commands, to_despawn: Query>) { for entity in &to_despawn { commands.entity(entity).despawn(); } } fn handle_spacebar(input: Res>, mut game_state: ResMut>) { if input.just_pressed(KeyCode::Space) { game_state.set(GameState::GetReady); } }