2024-02-03 21:15:30 -06:00
|
|
|
use bevy::prelude::*;
|
|
|
|
|
|
|
|
use crate::assets::AssetLoader;
|
|
|
|
|
|
|
|
#[derive(Component, Debug)]
|
|
|
|
pub struct MainMenu;
|
|
|
|
|
2024-07-29 16:29:39 -05:00
|
|
|
pub fn startup(mut commands: Commands, assets: Res<AssetLoader>) {
|
2024-02-03 21:15:30 -06:00
|
|
|
commands
|
2024-07-29 16:29:39 -05:00
|
|
|
.spawn((
|
|
|
|
MainMenu,
|
|
|
|
NodeBundle {
|
|
|
|
style: Style {
|
|
|
|
width: Val::Percent(100.0),
|
|
|
|
height: Val::Percent(100.0),
|
|
|
|
justify_content: JustifyContent::SpaceBetween,
|
|
|
|
..default()
|
|
|
|
},
|
2024-02-03 21:15:30 -06:00
|
|
|
..default()
|
|
|
|
},
|
2024-07-29 16:29:39 -05:00
|
|
|
))
|
2024-02-03 21:15:30 -06:00
|
|
|
.with_children(|parent| {
|
|
|
|
// text
|
|
|
|
parent.spawn((
|
|
|
|
TextBundle::from_section(
|
2024-07-29 16:36:16 -05:00
|
|
|
"Text Example\nPress ENTER to play",
|
2024-02-03 21:15:30 -06:00
|
|
|
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()
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2024-07-29 16:29:39 -05:00
|
|
|
|
|
|
|
pub fn exit(mut commands: Commands, q: Query<Entity, With<MainMenu>>) {
|
|
|
|
for id in q.iter() {
|
|
|
|
commands.entity(id).despawn_recursive();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn update(
|
|
|
|
keyboard_input: Res<ButtonInput<KeyCode>>,
|
|
|
|
mut next_state: ResMut<NextState<crate::View>>,
|
|
|
|
mut app_exit_events: ResMut<Events<bevy::app::AppExit>>,
|
|
|
|
) {
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|