From 7460ddee0573c5c0801b1b08b85fc609f4c5aa00 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Sun, 13 Aug 2023 10:03:30 +0100 Subject: [PATCH] serialises dungeon map --- src/components.rs | 5 +++++ src/main.rs | 1 + src/saveload_system.rs | 28 +++++++++++++++++++++------- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/components.rs b/src/components.rs index 7bcce85..c4f7d9a 100644 --- a/src/components.rs +++ b/src/components.rs @@ -13,6 +13,11 @@ pub struct SerializeMe; #[derive(Component, Serialize, Deserialize, Clone)] pub struct SerializationHelper { pub map: super::map::Map, +} + +#[derive(Component, Serialize, Deserialize, Clone)] +pub struct DMSerializationHelper { + pub map: super::map::MasterDungeonMap, pub log: Vec>, pub events: HashMap, } diff --git a/src/main.rs b/src/main.rs index b6c3df0..0f1b86c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -520,6 +520,7 @@ fn main() -> rltk::BError { gs.ecs.register::(); gs.ecs.register::>(); gs.ecs.register::(); + gs.ecs.register::(); gs.ecs.insert(SimpleMarkerAllocator::::new()); raws::load_raws(); diff --git a/src/saveload_system.rs b/src/saveload_system.rs index 97b9aaf..def0feb 100644 --- a/src/saveload_system.rs +++ b/src/saveload_system.rs @@ -27,10 +27,13 @@ pub fn save_game(_ecs: &mut World) {} pub fn save_game(ecs: &mut World) { // Create helper let mapcopy = ecs.get_mut::().unwrap().clone(); - let savehelper = ecs + let dungeon_master = ecs.get_mut::().unwrap().clone(); + let savehelper = + ecs.create_entity().with(SerializationHelper { map: mapcopy }).marked::>().build(); + let savehelper2 = ecs .create_entity() - .with(SerializationHelper { - map: mapcopy, + .with(DMSerializationHelper { + map: dungeon_master, log: crate::gamelog::clone_log(), events: crate::gamelog::clone_events(), }) @@ -102,12 +105,14 @@ pub fn save_game(ecs: &mut World) { WantsToPickupItem, WantsToRemoveItem, WantsToUseItem, - SerializationHelper + SerializationHelper, + DMSerializationHelper ); } // Clean up - ecs.delete_entity(savehelper).expect("Crash on cleanup"); + ecs.delete_entity(savehelper).expect(" Crash on cleanup"); + ecs.delete_entity(savehelper2).expect(" Crash on cleanup"); } pub fn does_save_exist() -> bool { @@ -210,14 +215,17 @@ pub fn load_game(ecs: &mut World) { WantsToPickupItem, WantsToRemoveItem, WantsToUseItem, - SerializationHelper + SerializationHelper, + DMSerializationHelper ); } let mut deleteme: Option = None; + let mut deleteme2: Option = None; { let entities = ecs.entities(); let helper = ecs.read_storage::(); + let helper2 = ecs.read_storage::(); let player = ecs.read_storage::(); let position = ecs.read_storage::(); for (e, h) in (&entities, &helper).join() { @@ -225,6 +233,11 @@ pub fn load_game(ecs: &mut World) { *worldmap = h.map.clone(); worldmap.tile_content = vec![Vec::new(); (worldmap.width * worldmap.height) as usize]; deleteme = Some(e); + } + for (e, h) in (&entities, &helper2).join() { + let mut dungeonmaster = ecs.write_resource::(); + *dungeonmaster = h.map.clone(); + deleteme2 = Some(e); crate::gamelog::restore_log(&mut h.log.clone()); crate::gamelog::load_events(h.events.clone()); } @@ -235,7 +248,8 @@ pub fn load_game(ecs: &mut World) { *player_resource = e; } } - ecs.delete_entity(deleteme.unwrap()).expect("Unable to delete helper"); + ecs.delete_entity(deleteme.unwrap()).expect(" Unable to delete helper"); + ecs.delete_entity(deleteme2.unwrap()).expect(" Unable to delete helper"); } pub fn delete_save() {