diff --git a/src/editor/actions.rs b/src/editor/actions.rs index 62553fb716..18537af7a5 100644 --- a/src/editor/actions.rs +++ b/src/editor/actions.rs @@ -130,7 +130,10 @@ pub enum EditorAction { OpenCreateMapWindow, OpenMap(usize), OpenLoadMapWindow, - SaveMap(Option), + SaveMap { + name: Option, + is_user_map: Option, + }, OpenSaveMapWindow, DeleteMap(usize), ExitToMainMenu, diff --git a/src/editor/gui/editor_menu.rs b/src/editor/gui/editor_menu.rs index fba7fc397a..d7f951c312 100644 --- a/src/editor/gui/editor_menu.rs +++ b/src/editor/gui/editor_menu.rs @@ -37,7 +37,7 @@ pub fn open_editor_menu(ctx: &EditorContext) { MenuEntry { index: EDITOR_MENU_RESULT_SAVE, title: "Save".to_string(), - is_disabled: !ctx.is_user_map, + is_disabled: !ctx.is_user_map && !cfg!(debug_assertions), ..Default::default() }, MenuEntry { diff --git a/src/editor/gui/mod.rs b/src/editor/gui/mod.rs index 04a53fa4cd..2ace076d40 100644 --- a/src/editor/gui/mod.rs +++ b/src/editor/gui/mod.rs @@ -313,7 +313,10 @@ impl EditorGui { res = Some(action); } EDITOR_MENU_RESULT_SAVE => { - let action = EditorAction::SaveMap(None); + let action = EditorAction::SaveMap { + name: None, + is_user_map: None, + }; res = Some(action); } EDITOR_MENU_RESULT_SAVE_AS => { diff --git a/src/editor/gui/windows/save_map.rs b/src/editor/gui/windows/save_map.rs index 97565f23ba..2cc9ca6301 100644 --- a/src/editor/gui/windows/save_map.rs +++ b/src/editor/gui/windows/save_map.rs @@ -90,7 +90,10 @@ impl Window for SaveMapWindow { let mut action = None; if is_valid_map_export_path(&path, self.should_overwrite) { - let save_action = EditorAction::SaveMap(Some(self.name.clone())); + let save_action = EditorAction::SaveMap { + name: Some(self.name.clone()), + is_user_map: Some(true), + }; let batch = self.get_close_action().then(save_action); action = Some(batch); diff --git a/src/editor/mod.rs b/src/editor/mod.rs index 291730597f..6513378501 100644 --- a/src/editor/mod.rs +++ b/src/editor/mod.rs @@ -618,7 +618,7 @@ impl Editor { let mut gui = storage::get_mut::(); gui.add_window(LoadMapWindow::new()); } - EditorAction::SaveMap(name) => { + EditorAction::SaveMap { name, is_user_map } => { let mut map_resource = self.map_resource.clone(); if let Some(name) = name { @@ -630,7 +630,9 @@ impl Editor { map_resource.meta.path = path.to_string_lossy().to_string(); } - map_resource.meta.is_user_map = true; + if let Some(is_user_map) = is_user_map { + map_resource.meta.is_user_map = is_user_map; + } map_resource.meta.is_tiled_map = false; let mut resources = storage::get_mut::(); @@ -692,7 +694,10 @@ impl Node for Editor { if node.input.save { let action = if node.map_resource.meta.is_user_map { - EditorAction::SaveMap(None) + EditorAction::SaveMap { + name: None, + is_user_map: None, + } } else { EditorAction::OpenSaveMapWindow }; diff --git a/src/resources.rs b/src/resources.rs index ab4ea407c1..c0555619d5 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -430,13 +430,15 @@ impl Resources { let assets_path = Path::new(&self.assets_dir); let export_path = assets_path.join(&map_resource.meta.path); + let mut map_already_existed = false; if export_path.exists() { let mut i = 0; while i < self.maps.len() { let res = &self.maps[i]; if res.meta.path == map_resource.meta.path { - if res.meta.is_user_map { - self.maps.remove(i); + if res.meta.is_user_map || cfg!(debug_assertions) { + map_already_existed = true; + self.maps[i] = map_resource.clone(); break; } else { return Err(formaterr!( @@ -453,7 +455,9 @@ impl Resources { map_resource.map.save(export_path)?; - self.maps.push(map_resource.clone()); + if !map_already_existed { + self.maps.push(map_resource.clone()); + } self.save_maps_file()?; Ok(())