feat: Add inventory savegame loading (#48)

This commit is contained in:
demenik
2025-11-27 18:08:35 +01:00
parent afe3b97894
commit 78997acf31
3 changed files with 33 additions and 2 deletions

View File

@@ -28,6 +28,7 @@ struct SaveData {
session_tracker: SessionTracker,
timer_settings: TimerSettings,
pom_position: GridPosition,
inventory: Vec<ItemStack>,
}
fn dump_savegame(
@@ -39,6 +40,8 @@ fn dump_savegame(
tracker: Res<SessionTracker>,
settings: Res<TimerSettings>,
pom_query: Query<&GridPosition, With<Pom>>,
inventory: Res<Inventory>,
item_query: Query<&ItemStack>,
) {
for _ in messages.read() {
let mut tile_states = Vec::new();
@@ -61,6 +64,12 @@ fn dump_savegame(
let pom_pos = pom_query.single().unwrap();
let item_stacks: Vec<ItemStack> = inventory
.items
.iter()
.filter_map(|entity| item_query.get(*entity).ok().cloned())
.collect();
let save_data = SaveData {
grid_width: grid.width,
grid_height: grid.height,
@@ -69,6 +78,7 @@ fn dump_savegame(
session_tracker: tracker.clone(),
timer_settings: settings.clone(),
pom_position: *pom_pos,
inventory: item_stacks,
};
match serde_json::to_string_pretty(&save_data) {
@@ -91,6 +101,7 @@ fn dump_savegame(
}
fn load_savegame(
mut commands: Commands,
mut messages: MessageReader<SavegameLoadMessage>,
save_path: Res<SavegamePath>,
grid: Res<Grid>,
@@ -99,6 +110,7 @@ fn load_savegame(
mut tracker: ResMut<SessionTracker>,
mut settings: ResMut<TimerSettings>,
mut pom_query: Query<(&mut GridPosition, &mut Transform), With<Pom>>,
mut inventory: ResMut<Inventory>,
) {
for _ in messages.read() {
if let Ok(mut file) = File::open(&save_path.0) {
@@ -136,6 +148,14 @@ fn load_savegame(
}
}
}
let stack_entities: Vec<Entity> = save_data
.inventory
.iter()
.map(|stack| commands.spawn(stack.clone()).id())
.collect();
inventory.items = stack_entities;
println!("Game loaded from {}", save_path.0.display());
}
Err(e) => {