Jelajahi Sumber

tools: move _level_filename into Level so it is always up to date

Daniele Bartolini 6 tahun lalu
induk
melakukan
2cd7d36154
3 mengubah file dengan 17 tambahan dan 14 penghapusan
  1. 1 0
      CHANGELOG.md
  2. 10 0
      tools/level_editor/level.vala
  3. 6 14
      tools/level_editor/level_editor.vala

+ 1 - 0
CHANGELOG.md

@@ -25,3 +25,4 @@ Changelog
 * tools: the game will now be started or stopped according to its running state when launched from the Level Editor
 * tools: the game will now be started or stopped according to its running state when launched from the Level Editor
 * tools: the Properties Panel now accepts more sensible numeric ranges
 * tools: the Properties Panel now accepts more sensible numeric ranges
 * tools: the Properties Panel now allows the user to modify most Unit's component properties
 * tools: the Properties Panel now allows the user to modify most Unit's component properties
+* tools: fixed an issue that caused the Level Editor to not correctly save a level specified from command line

+ 10 - 0
tools/level_editor/level.vala

@@ -25,6 +25,8 @@ namespace Crown
 		public uint _num_units;
 		public uint _num_units;
 		public uint _num_sounds;
 		public uint _num_sounds;
 
 
+		public string _filename;
+
 		// Signals
 		// Signals
 		public signal void selection_changed(Gee.ArrayList<Guid?> selection);
 		public signal void selection_changed(Gee.ArrayList<Guid?> selection);
 		public signal void object_editor_name_changed(Guid object_id, string name);
 		public signal void object_editor_name_changed(Guid object_id, string name);
@@ -59,6 +61,8 @@ namespace Crown
 
 
 			_num_units = 0;
 			_num_units = 0;
 			_num_sounds = 0;
 			_num_sounds = 0;
+
+			_filename = null;
 		}
 		}
 
 
 		/// Loads the level from @a path.
 		/// Loads the level from @a path.
@@ -66,18 +70,24 @@ namespace Crown
 		{
 		{
 			reset();
 			reset();
 			_db.load(path);
 			_db.load(path);
+
+			_filename = path;
 		}
 		}
 
 
 		/// Saves the level to @a path.
 		/// Saves the level to @a path.
 		public void save(string path)
 		public void save(string path)
 		{
 		{
 			_db.save(path);
 			_db.save(path);
+
+			_filename = path;
 		}
 		}
 
 
 		/// Loads the empty level template.
 		/// Loads the empty level template.
 		public void load_empty_level()
 		public void load_empty_level()
 		{
 		{
 			load(_project.toolchain_dir() + "/" + "core/editors/levels/empty.level");
 			load(_project.toolchain_dir() + "/" + "core/editors/levels/empty.level");
+
+			_filename = null;
 		}
 		}
 
 
 		public void spawn_unit(Guid id, string name, Vector3 pos, Quaternion rot, Vector3 scl)
 		public void spawn_unit(Guid id, string name, Vector3 pos, Quaternion rot, Vector3 scl)

+ 6 - 14
tools/level_editor/level_editor.vala

@@ -61,7 +61,6 @@ namespace Crown
 		private ProjectStore _project_store;
 		private ProjectStore _project_store;
 		private Database _database;
 		private Database _database;
 		private Level _level;
 		private Level _level;
-		private string _level_filename;
 		private DataCompiler _data_compiler;
 		private DataCompiler _data_compiler;
 
 
 		// Widgets
 		// Widgets
@@ -237,7 +236,6 @@ namespace Crown
 			_project = project;
 			_project = project;
 			_database = database;
 			_database = database;
 			_level = level;
 			_level = level;
-			_level_filename = null;
 			_data_compiler = new DataCompiler(_compiler);
 			_data_compiler = new DataCompiler(_compiler);
 
 
 			// Widgets
 			// Widgets
@@ -855,7 +853,6 @@ namespace Crown
 
 
 		private void new_level()
 		private void new_level()
 		{
 		{
-			_level_filename = null;
 			_level.load_empty_level();
 			_level.load_empty_level();
 			_level.send_level();
 			_level.send_level();
 		}
 		}
@@ -878,10 +875,9 @@ namespace Crown
 				string filename = fcd.get_filename();
 				string filename = fcd.get_filename();
 				if (filename.has_prefix(_project.source_dir()))
 				if (filename.has_prefix(_project.source_dir()))
 				{
 				{
-					if (filename.has_suffix(".level") && filename != _level_filename)
+					if (filename.has_suffix(".level") && filename != _level._filename)
 					{
 					{
-						_level_filename = filename;
-						_level.load(_level_filename);
+						_level.load(filename);
 						_level.send_level();
 						_level.send_level();
 						send_state();
 						send_state();
 					}
 					}
@@ -912,7 +908,6 @@ namespace Crown
 				_console_view.logi("editor", "Loading project `%s`...".printf(filename));
 				_console_view.logi("editor", "Loading project `%s`...".printf(filename));
 				_project.load(filename, _project.toolchain_dir());
 				_project.load(filename, _project.toolchain_dir());
 
 
-				_level_filename = null;
 				_level.load_empty_level();
 				_level.load_empty_level();
 				stop_compiler();
 				stop_compiler();
 				start_compiler();
 				start_compiler();
@@ -943,10 +938,7 @@ namespace Crown
 				string filename = fcd.get_filename();
 				string filename = fcd.get_filename();
 				if (filename.has_prefix(_project.source_dir()))
 				if (filename.has_prefix(_project.source_dir()))
 				{
 				{
-					_level_filename = filename;
-					if (!_level_filename.has_suffix(".level"))
-						_level_filename += ".level";
-					_level.save(_level_filename);
+					_level.save(filename.has_suffix(".level") ? filename : filename + ".level");
 					saved = true;
 					saved = true;
 				}
 				}
 				else
 				else
@@ -963,13 +955,13 @@ namespace Crown
 		{
 		{
 			bool saved = false;
 			bool saved = false;
 
 
-			if (_level_filename == null)
+			if (_level._filename == null)
 			{
 			{
 				saved = save_as();
 				saved = save_as();
 			}
 			}
 			else
 			else
 			{
 			{
-				_level.save(_level_filename);
+				_level.save(_level._filename);
 				saved = true;
 				saved = true;
 			}
 			}
 
 
@@ -978,7 +970,7 @@ namespace Crown
 
 
 		private bool save_timeout()
 		private bool save_timeout()
 		{
 		{
-			if (_level_filename != null)
+			if (_level._filename != null)
 				save();
 				save();
 
 
 			return true;
 			return true;