forked from janhohenheim/foxtrot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathingame_menu.rs
64 lines (59 loc) · 1.92 KB
/
ingame_menu.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use crate::{
player_control::actions::{ActionsFrozen, UiAction},
GameState,
};
use avian3d::prelude::*;
use bevy::{app::AppExit, prelude::*};
use bevy_egui::{egui, EguiContexts};
use leafwing_input_manager::prelude::ActionState;
/// Handles the pause menu accessed while playing the game via ESC.
pub(super) fn plugin(app: &mut App) {
app.add_systems(Update, handle_pause.run_if(in_state(GameState::Playing)));
}
fn handle_pause(
mut time: ResMut<Time<Virtual>>,
mut physics_time: ResMut<Time<Physics>>,
actions: Query<&ActionState<UiAction>>,
mut app_exit_events: EventWriter<AppExit>,
mut actions_frozen: ResMut<ActionsFrozen>,
mut egui_contexts: EguiContexts,
mut paused: Local<bool>,
) {
for action in actions.iter() {
let toggled = action.just_pressed(&UiAction::TogglePause);
if toggled {
if *paused {
*paused = false;
time.unpause();
physics_time.unpause();
actions_frozen.unfreeze();
} else {
*paused = true;
time.pause();
physics_time.pause();
actions_frozen.freeze();
}
}
}
if !*paused {
return;
}
egui::CentralPanel::default()
.frame(egui::Frame {
fill: egui::Color32::from_black_alpha(240),
..default()
})
.show(egui_contexts.ctx_mut(), |ui| {
ui.vertical_centered_justified(|ui| {
ui.visuals_mut().override_text_color = Some(egui::Color32::from_gray(240));
ui.add_space(100.0);
ui.heading("Game Paused");
ui.separator();
ui.label("Press ESC to resume");
ui.add_space(100.0);
if ui.button("Quit Game").clicked() {
app_exit_events.send(AppExit::Success);
}
});
});
}