Merge branch '60-new-game-reset-bug' into 'dev'

Fix New Game Reset Bug

See merge request softwaregrundprojekt/2025-2026/einzelprojekt/tutorium-moritz/bernroider-dominik/bernroider-dominik!36
This commit is contained in:
Dominik Bernroider
2025-12-10 12:51:50 +00:00
3 changed files with 36 additions and 2 deletions

View File

@@ -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;

View File

@@ -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,

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, 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<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());
}