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:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user