use crate::AppState; use bevy::{ input::{keyboard::KeyCode, Input}, prelude::*, }; pub struct MenuPlugin; #[derive(Component)] struct Menu; impl Plugin for MenuPlugin { fn build(&self, app: &mut App) { app.add_system_set(SystemSet::on_enter(AppState::Menu).with_system(setup)) .add_system_set(SystemSet::on_update(AppState::Menu).with_system(keyboard_input_system)) .add_system_set(SystemSet::on_exit(AppState::Menu).with_system(despawn)); } } fn setup(mut commands: Commands, asset_server: Res) { let font = asset_server.get_handle("UacariLegacy-Thin.ttf"); commands .spawn_bundle(Text2dBundle { text: Text::from_section( "Lux synthesĕ", TextStyle { font: font.clone(), font_size: 96.0, color: Color::WHITE, }, ) .with_alignment(TextAlignment::CENTER), transform: Transform::from_xyz(0., 128.0, 0.), ..Default::default() }) .insert(Menu); commands .spawn_bundle(Text2dBundle { text: Text::from_section( "Press ENTER", TextStyle { font, font_size: 32.0, color: Color::WHITE, }, ) .with_alignment(TextAlignment::CENTER), ..Default::default() }) .insert(Menu); } fn despawn(mut commands: Commands, menu_query: Query>) { for entity in menu_query.iter() { commands.entity(entity).despawn_recursive(); } } fn keyboard_input_system( keyboard_input: Res>, mut app_state: ResMut>, ) { if keyboard_input.just_pressed(KeyCode::Return) { app_state.replace(AppState::Game).unwrap() } }