use bevy::prelude::*; use crate::assets::AssetLoader; #[derive(Component, Debug)] pub struct MainMenu; pub fn startup(mut commands: Commands, assets: Res) { commands .spawn(( MainMenu, NodeBundle { style: Style { width: Val::Percent(100.0), height: Val::Percent(100.0), justify_content: JustifyContent::SpaceBetween, ..default() }, ..default() }, )) .with_children(|parent| { // text parent.spawn(( TextBundle::from_section( "Text Example\nPress ENTER to play", TextStyle { font: assets.fonts.iosevkalytemin.clone(), font_size: 30.0, ..default() }, ) .with_style(Style { margin: UiRect::all(Val::Px(12.)), ..default() }), // Because this is a distinct label widget and // not button/list item text, this is necessary // for accessibility to treat the text accordingly. Label, )); parent.spawn(NodeBundle { style: Style { width: Val::Px(200.0), height: Val::Px(200.0), position_type: PositionType::Absolute, left: Val::Px(210.), bottom: Val::Px(10.), border: UiRect::all(Val::Px(20.)), ..default() }, border_color: Color::GREEN.into(), background_color: Color::rgb(0.4, 0.4, 1.).into(), ..default() }); }); } pub fn exit(mut commands: Commands, q: Query>) { for id in q.iter() { commands.entity(id).despawn_recursive(); } } pub fn update( keyboard_input: Res>, mut next_state: ResMut>, mut app_exit_events: ResMut>, ) { if keyboard_input.just_pressed(KeyCode::Escape) { app_exit_events.send(bevy::app::AppExit); } else if keyboard_input.pressed(KeyCode::Enter) { next_state.set(crate::View::InGame) } }