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
This commit is contained in:
Llywelwyn 2023-08-27 00:21:01 +01:00
parent 38eed3e483
commit 00dea1a55e

View file

@ -202,11 +202,13 @@ pub fn level_transition(ecs: &mut World, new_id: i32, offset: i32) -> Option<Vec
} }
fn transition_to_existing_map(ecs: &mut World, new_id: i32, offset: i32) { fn transition_to_existing_map(ecs: &mut World, new_id: i32, offset: i32) {
let dungeon_master = ecs.read_resource::<MasterDungeonMap>(); let mut dungeon_master = ecs.write_resource::<MasterDungeonMap>();
// Unwrapping here panics if new_id isn't present. But this should // Unwrapping here panics if new_id isn't present. But this should
// never be called without new_id being present by level_transition. // never be called without new_id being present by level_transition.
let map = dungeon_master.get_map(new_id).unwrap(); let map = dungeon_master.get_map(new_id).unwrap();
let mut worldmap_resource = ecs.write_resource::<Map>(); let mut worldmap_resource = ecs.write_resource::<Map>();
// Store new state of old map
dungeon_master.store_map(&worldmap_resource);
let player_entity = ecs.fetch::<Entity>(); let player_entity = ecs.fetch::<Entity>();
// Find down stairs, place player // Find down stairs, place player
let w = map.width; let w = map.width;
@ -254,8 +256,10 @@ fn transition_to_new_map(ecs: &mut World, new_id: i32) -> Vec<Map> {
} }
let mapgen_history = builder.build_data.history.clone(); let mapgen_history = builder.build_data.history.clone();
let player_start; let player_start;
let old_map: Map;
{ {
let mut worldmap_resource = ecs.write_resource::<Map>(); let mut worldmap_resource = ecs.write_resource::<Map>();
old_map = worldmap_resource.clone();
*worldmap_resource = builder.build_data.map.clone(); *worldmap_resource = builder.build_data.map.clone();
// Unwrap so we get a CTD if there's no starting pos. // Unwrap so we get a CTD if there's no starting pos.
player_start = builder.build_data.starting_position.as_mut().unwrap().clone(); 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<Map> {
} }
// Store newly minted map // Store newly minted map
let mut dungeon_master = ecs.write_resource::<MasterDungeonMap>(); let mut dungeon_master = ecs.write_resource::<MasterDungeonMap>();
dungeon_master.store_map(&old_map);
dungeon_master.store_map(&builder.build_data.map); dungeon_master.store_map(&builder.build_data.map);
return mapgen_history; return mapgen_history;
} }