diff --git a/src/screens/gameplay.rs b/src/screens/gameplay.rs index b41de50..42bd319 100644 --- a/src/screens/gameplay.rs +++ b/src/screens/gameplay.rs @@ -21,11 +21,10 @@ pub(super) fn plugin(app: &mut App) { app.add_systems( Update, - return_to_title_screen - .run_if(in_state(Screen::Gameplay).and(input_just_pressed(KeyCode::Escape))), + pause_game.run_if(in_state(Screen::Gameplay).and(input_just_pressed(KeyCode::Escape))), ); } -fn return_to_title_screen(mut next_screen: ResMut>) { - next_screen.set(Screen::Title); +fn pause_game(mut next_screen: ResMut>) { + next_screen.set(Screen::Pause); } diff --git a/src/screens/mod.rs b/src/screens/mod.rs index df0e70d..7af5a6c 100644 --- a/src/screens/mod.rs +++ b/src/screens/mod.rs @@ -2,6 +2,7 @@ mod gameplay; mod loading; +mod pause; mod splash; mod title; @@ -16,6 +17,7 @@ pub(super) fn plugin(app: &mut App) { loading::plugin, splash::plugin, title::plugin, + pause::plugin, )); } @@ -28,4 +30,5 @@ pub enum Screen { Loading, Title, Gameplay, + Pause, } diff --git a/src/screens/pause.rs b/src/screens/pause.rs new file mode 100644 index 0000000..c726f5b --- /dev/null +++ b/src/screens/pause.rs @@ -0,0 +1,43 @@ +use bevy::{input::common_conditions::input_just_pressed, prelude::*}; + +use crate::theme::{ + events::OnPress, + widgets::{Containers, Widgets}, +}; + +use super::Screen; + +pub(super) fn plugin(app: &mut App) { + app.add_systems(OnEnter(Screen::Pause), spawn_title_screen); + app.add_systems( + Update, + return_to_game.run_if(in_state(Screen::Pause).and(input_just_pressed(KeyCode::Escape))), + ); +} + +fn spawn_title_screen(mut commands: Commands) { + commands + .ui_root() + .insert(StateScoped(Screen::Pause)) + .with_children(|parent| { + parent.button("Continue").observe(return_to_game_trigger); + parent + .button("Exit") + .observe(return_to_title_screen_trigger); + }); +} + +fn return_to_game_trigger(_trigger: Trigger, mut next_screen: ResMut>) { + next_screen.set(Screen::Gameplay); +} + +fn return_to_title_screen_trigger( + _trigger: Trigger, + mut next_screen: ResMut>, +) { + next_screen.set(Screen::Title); +} + +fn return_to_game(mut next_screen: ResMut>) { + next_screen.set(Screen::Gameplay); +}