added the new multiple levels to the save/load

This commit is contained in:
grimsace
2026-04-28 10:13:06 -05:00
parent e2a14feb82
commit dddf27ea6b
2 changed files with 15 additions and 13 deletions
+9 -7
View File
@@ -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
View File
@@ -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)