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