From ceeeca7b5b2fec3b07c6e72b55252ae60186851f Mon Sep 17 00:00:00 2001 From: demenik Date: Wed, 10 Dec 2025 13:36:07 +0100 Subject: [PATCH 1/2] refactor: Format code --- src/features/inventory/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/inventory/mod.rs b/src/features/inventory/mod.rs index 821ad23..49df63b 100644 --- a/src/features/inventory/mod.rs +++ b/src/features/inventory/mod.rs @@ -1,5 +1,5 @@ -use crate::{features::inventory::ui::open_inventory, prelude::*}; use crate::features::phase::components::SessionTracker; +use crate::{features::inventory::ui::open_inventory, prelude::*}; use components::*; pub mod components; From 2e429605f3c1ea046df1acee550740de093728f1 Mon Sep 17 00:00:00 2001 From: demenik Date: Wed, 10 Dec 2025 13:47:51 +0100 Subject: [PATCH 2/2] fix: Fix new game reset bug (#60) --- src/features/pom/components.rs | 2 +- src/features/savegame/mod.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/features/pom/components.rs b/src/features/pom/components.rs index 43dfa25..5e9866a 100644 --- a/src/features/pom/components.rs +++ b/src/features/pom/components.rs @@ -5,7 +5,7 @@ use std::collections::VecDeque; #[derive(Component)] pub struct Pom; -#[derive(Component, Serialize, Deserialize, Clone, Copy)] +#[derive(Component, Serialize, Deserialize, Clone, Copy, Default)] pub struct GridPosition { pub x: u32, pub y: u32, diff --git a/src/features/savegame/mod.rs b/src/features/savegame/mod.rs index 61b97e4..347cf06 100644 --- a/src/features/savegame/mod.rs +++ b/src/features/savegame/mod.rs @@ -19,6 +19,7 @@ impl Plugin for SavegamePlugin { app.add_systems(Update, dump_savegame.run_if(in_state(AppState::GameScreen))); app.add_systems(Update, load_savegame.run_if(in_state(AppState::GameScreen))); + app.add_systems(OnExit(AppState::GameScreen), reset_savegame); app.add_systems(Update, load_popup_handler); } @@ -172,3 +173,36 @@ fn load_savegame( } } } + +// Resets all components/resources loaded by `load_savegame` +fn reset_savegame( + mut commands: Commands, + grid: Res, + mut tile_query: Query<&mut TileState>, + mut phase: ResMut, + mut tracker: ResMut, + mut settings: ResMut, + mut pom_query: Query<(&mut GridPosition, &mut Transform), With>, + mut inventory: ResMut, +) { + *tracker = SessionTracker::default(); + *settings = TimerSettings::default(); + *phase = CurrentPhase(Phase::Focus { + duration: settings.focus_duration as f32, + }); + + inventory + .items + .iter() + .for_each(|entity| commands.entity(*entity).despawn()); + inventory.items.clear(); + + if let Ok((mut pom_pos, mut pom_transform)) = pom_query.single_mut() { + *pom_pos = GridPosition::default(); + pom_transform.translation = grid_to_world_coords(0, 0, Some(1.0), grid.width, grid.height); + } + + tile_query + .iter_mut() + .for_each(|mut state| *state = TileState::default()); +}