From 00dea1a55ed69f157947a23d32c06f0d92d052e7 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Sun, 27 Aug 2023 00:21:01 +0100 Subject: [PATCH] fixes master dungeon map bug - map params weren't being saved it was saving the version of the map at creation (e.g. no viewsheds, no bloodstains, no tile changes), and never updating it on transition --- src/map/dungeon.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/map/dungeon.rs b/src/map/dungeon.rs index c7b5ebc..fad2eed 100644 --- a/src/map/dungeon.rs +++ b/src/map/dungeon.rs @@ -202,11 +202,13 @@ pub fn level_transition(ecs: &mut World, new_id: i32, offset: i32) -> Option(); + let mut dungeon_master = ecs.write_resource::(); // Unwrapping here panics if new_id isn't present. But this should // never be called without new_id being present by level_transition. let map = dungeon_master.get_map(new_id).unwrap(); let mut worldmap_resource = ecs.write_resource::(); + // Store new state of old map + dungeon_master.store_map(&worldmap_resource); let player_entity = ecs.fetch::(); // Find down stairs, place player let w = map.width; @@ -254,8 +256,10 @@ fn transition_to_new_map(ecs: &mut World, new_id: i32) -> Vec { } let mapgen_history = builder.build_data.history.clone(); let player_start; + let old_map: Map; { let mut worldmap_resource = ecs.write_resource::(); + old_map = worldmap_resource.clone(); *worldmap_resource = builder.build_data.map.clone(); // Unwrap so we get a CTD if there's no starting pos. player_start = builder.build_data.starting_position.as_mut().unwrap().clone(); @@ -285,6 +289,7 @@ fn transition_to_new_map(ecs: &mut World, new_id: i32) -> Vec { } // Store newly minted map let mut dungeon_master = ecs.write_resource::(); + dungeon_master.store_map(&old_map); dungeon_master.store_map(&builder.build_data.map); return mapgen_history; }