55 lines
1.5 KiB
Rust
55 lines
1.5 KiB
Rust
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<Entity, With<TitleUI>>) {
|
|
for entity in &to_despawn {
|
|
commands.entity(entity).despawn();
|
|
}
|
|
}
|
|
|
|
fn handle_spacebar(input: Res<ButtonInput<KeyCode>>, mut game_state: ResMut<NextState<GameState>>) {
|
|
if input.just_pressed(KeyCode::Space) {
|
|
game_state.set(GameState::GetReady);
|
|
}
|
|
}
|