added the new multiple levels to the save/load
This commit is contained in:
+8
-6
@@ -141,19 +141,21 @@ impl eframe::App for DungeonApp {
|
||||
self.push_undo_snapshot();
|
||||
self.regenerate_layout();
|
||||
} else if panel_result.save_clicked {
|
||||
if self.settings.active_level_index < self.levels.len() {
|
||||
let layout = &self.levels[self.settings.active_level_index];
|
||||
let svg = exporter::build_svg(layout, &self.settings);
|
||||
if let Err(err) = saveandload::save_dungeon(&self.settings, layout, svg) {
|
||||
eprintln!("{err}");
|
||||
let mut layouts = Vec::new();
|
||||
let mut svgs = Vec::new();
|
||||
for layout in &self.levels {
|
||||
layouts.push(layout.clone());
|
||||
svgs.push(exporter::build_svg(layout, &self.settings));
|
||||
}
|
||||
if let Err(err) = saveandload::save_dungeon(&self.settings, layouts, svgs) {
|
||||
eprintln!("{err}");
|
||||
}
|
||||
} else if panel_result.load_clicked {
|
||||
match saveandload::load_dungeon() {
|
||||
Ok(data) => {
|
||||
self.push_undo_snapshot();
|
||||
self.settings = data.settings;
|
||||
self.levels = vec![data.layout];
|
||||
self.levels = data.layouts;
|
||||
self.settings.active_level_index = 0;
|
||||
// Don't regenerate_layout() here to preserve the exact loaded state.
|
||||
}
|
||||
|
||||
+6
-6
@@ -9,14 +9,14 @@ use crate::ui::UiSettings;
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct DungeonSave {
|
||||
pub settings: UiSettings,
|
||||
pub layout: DungeonLayout,
|
||||
pub svg: String,
|
||||
pub layouts: Vec<DungeonLayout>,
|
||||
pub svgs: Vec<String>,
|
||||
}
|
||||
|
||||
pub fn save_dungeon(
|
||||
settings: &UiSettings,
|
||||
layout: &DungeonLayout,
|
||||
svg: String,
|
||||
layouts: Vec<DungeonLayout>,
|
||||
svgs: Vec<String>,
|
||||
) -> Result<PathBuf, String> {
|
||||
let path = FileDialog::new()
|
||||
.set_title("Save Dungeon State")
|
||||
@@ -27,8 +27,8 @@ pub fn save_dungeon(
|
||||
|
||||
let save_data = DungeonSave {
|
||||
settings: settings.clone(),
|
||||
layout: layout.clone(),
|
||||
svg,
|
||||
layouts,
|
||||
svgs,
|
||||
};
|
||||
|
||||
let json = serde_json::to_string_pretty(&save_data)
|
||||
|
||||
Reference in New Issue
Block a user