From 4f41d89f63cbfd986ea93610987057bb293396c1 Mon Sep 17 00:00:00 2001 From: demenik Date: Mon, 8 Dec 2025 14:52:40 +0100 Subject: [PATCH 01/71] chore: switch to stable rust toolchain --- flake.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 59059c3..ab6c9df 100644 --- a/flake.nix +++ b/flake.nix @@ -24,10 +24,10 @@ rust-toolchain = with fenix.packages.${system}; combine [ - beta.rustc - beta.cargo - beta.rust-src - beta.rust-analyzer + stable.rustc + stable.cargo + stable.rust-src + stable.rust-analyzer ]; bevyDeps = with pkgs; [ From 881300e0a6c5ab706d14aadff76b8f19d9c295b8 Mon Sep 17 00:00:00 2001 From: demenik Date: Mon, 8 Dec 2025 14:52:58 +0100 Subject: [PATCH 02/71] feat: close popups with escape key --- src/features/hud/mod.rs | 19 ++++++++++++++++++- src/features/input/mod.rs | 13 +++++++++++++ src/features/inventory/mod.rs | 20 +++++++++++++++++++- src/features/pom/ui/context_menu.rs | 13 +++++++++++++ src/features/pom/ui/mod.rs | 4 ++++ src/features/savegame/mod.rs | 18 +++++++++++++++++- src/features/shop/mod.rs | 20 +++++++++++++++++++- src/features/ui/messages.rs | 4 ++++ src/features/ui/mod.rs | 1 + 9 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 src/features/ui/messages.rs diff --git a/src/features/hud/mod.rs b/src/features/hud/mod.rs index 875c501..4d358dd 100644 --- a/src/features/hud/mod.rs +++ b/src/features/hud/mod.rs @@ -1,5 +1,6 @@ use crate::features::phase::components::TimerSettings; use crate::features::savegame::messages::SavegameDumpMessage; +use crate::features::ui::messages::ClosePopupMessage; use crate::features::{inventory, shop}; use crate::prelude::*; use components::*; @@ -16,11 +17,27 @@ impl Plugin for HudPlugin { app.add_systems(OnExit(AppState::GameScreen), cleanup); app.add_systems( Update, - (update_status, buttons, update_timer_settings).run_if(in_state(AppState::GameScreen)), + (update_status, buttons, update_timer_settings, close_popup) + .run_if(in_state(AppState::GameScreen)), ); } } +fn close_popup( + mut commands: Commands, + mut close_popup_reader: MessageReader, + root_query: Query<(Entity, &RootMarker)>, +) { + for _ in close_popup_reader.read() { + for (entity, root) in root_query.iter() { + match *root { + RootMarker::Settings => commands.entity(entity).despawn(), + _ => {} + } + } + } +} + fn setup(mut commands: Commands) { commands.spawn(( RootMarker::Status, diff --git a/src/features/input/mod.rs b/src/features/input/mod.rs index 8ed6757..3b7158b 100644 --- a/src/features/input/mod.rs +++ b/src/features/input/mod.rs @@ -3,6 +3,7 @@ use crate::features::{ phase::messages::{NextPhaseMessage, PhaseTimerPauseMessage}, pom::messages::InvalidMoveMessage, shop::ui::open_shop, + ui::messages::ClosePopupMessage, }; use crate::prelude::*; use bevy::input::mouse::MouseButton; @@ -38,6 +39,9 @@ impl Plugin for InputPlugin { app.add_systems(Update, next_phase.run_if(in_state(AppState::GameScreen))); app.add_systems(Update, shop_keybind.run_if(in_state(AppState::GameScreen))); + + app.add_message::(); + app.add_systems(Update, popup_keybind); } } @@ -163,3 +167,12 @@ fn shop_keybind( open_shop(&mut commands, &game_config, &asset_server); } } + +fn popup_keybind( + mut close_popup_messages: MessageWriter, + keys: Res>, +) { + if keys.just_pressed(KeyCode::Escape) { + close_popup_messages.write(ClosePopupMessage); + } +} diff --git a/src/features/inventory/mod.rs b/src/features/inventory/mod.rs index 2218ca2..bfdaf76 100644 --- a/src/features/inventory/mod.rs +++ b/src/features/inventory/mod.rs @@ -1,3 +1,4 @@ +use crate::features::ui::messages::ClosePopupMessage; use crate::{features::inventory::ui::open_inventory, prelude::*}; use components::*; @@ -10,13 +11,30 @@ impl Plugin for InventoryPlugin { fn build(&self, app: &mut App) { app.init_resource::(); - app.add_systems(Update, buttons.run_if(in_state(AppState::GameScreen))); + app.add_systems( + Update, + (buttons, close_popup).run_if(in_state(AppState::GameScreen)), + ); #[cfg(debug_assertions)] app.add_systems(Update, debug_modify_berries); } } +fn close_popup( + mut commands: Commands, + mut close_popup_reader: MessageReader, + root_query: Query<(Entity, &RootMarker)>, +) { + for _ in close_popup_reader.read() { + for (entity, root) in root_query.iter() { + match *root { + RootMarker::Inventory => commands.entity(entity).despawn(), + } + } + } +} + fn buttons( mut commands: Commands, mut interaction_query: Query<(&Interaction, &ButtonType), (Changed, With