fix: Fix new game reset bug (#60)

This commit is contained in:
demenik
2025-12-10 13:47:51 +01:00
parent ceeeca7b5b
commit 2e429605f3
2 changed files with 35 additions and 1 deletions

View File

@@ -5,7 +5,7 @@ use std::collections::VecDeque;
#[derive(Component)] #[derive(Component)]
pub struct Pom; pub struct Pom;
#[derive(Component, Serialize, Deserialize, Clone, Copy)] #[derive(Component, Serialize, Deserialize, Clone, Copy, Default)]
pub struct GridPosition { pub struct GridPosition {
pub x: u32, pub x: u32,
pub y: u32, pub y: u32,

View File

@@ -19,6 +19,7 @@ impl Plugin for SavegamePlugin {
app.add_systems(Update, dump_savegame.run_if(in_state(AppState::GameScreen))); 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(Update, load_savegame.run_if(in_state(AppState::GameScreen)));
app.add_systems(OnExit(AppState::GameScreen), reset_savegame);
app.add_systems(Update, load_popup_handler); 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<Grid>,
mut tile_query: Query<&mut TileState>,
mut phase: ResMut<CurrentPhase>,
mut tracker: ResMut<SessionTracker>,
mut settings: ResMut<TimerSettings>,
mut pom_query: Query<(&mut GridPosition, &mut Transform), With<Pom>>,
mut inventory: ResMut<Inventory>,
) {
*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());
}