Browse Source

ProjectSettings: use RBMap again instead of HashMap

This fixes corruption of project.godot and failure to load global classes.
Ricardo Buring 3 years ago
parent
commit
9d9b50855c
2 changed files with 7 additions and 7 deletions
  1. 4 4
      core/config/project_settings.cpp
  2. 3 3
      core/config/project_settings.h

+ 4 - 4
core/config/project_settings.cpp

@@ -764,7 +764,7 @@ Error ProjectSettings::save() {
 	return error;
 	return error;
 }
 }
 
 
-Error ProjectSettings::_save_settings_binary(const String &p_file, const HashMap<String, List<String>> &props, const CustomMap &p_custom, const String &p_custom_features) {
+Error ProjectSettings::_save_settings_binary(const String &p_file, const RBMap<String, List<String>> &props, const CustomMap &p_custom, const String &p_custom_features) {
 	Error err;
 	Error err;
 	Ref<FileAccess> file = FileAccess::open(p_file, FileAccess::WRITE, &err);
 	Ref<FileAccess> file = FileAccess::open(p_file, FileAccess::WRITE, &err);
 	ERR_FAIL_COND_V_MSG(err != OK, err, "Couldn't save project.binary at " + p_file + ".");
 	ERR_FAIL_COND_V_MSG(err != OK, err, "Couldn't save project.binary at " + p_file + ".");
@@ -832,7 +832,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const HashMap
 	return OK;
 	return OK;
 }
 }
 
 
-Error ProjectSettings::_save_settings_text(const String &p_file, const HashMap<String, List<String>> &props, const CustomMap &p_custom, const String &p_custom_features) {
+Error ProjectSettings::_save_settings_text(const String &p_file, const RBMap<String, List<String>> &props, const CustomMap &p_custom, const String &p_custom_features) {
 	Error err;
 	Error err;
 	Ref<FileAccess> file = FileAccess::open(p_file, FileAccess::WRITE, &err);
 	Ref<FileAccess> file = FileAccess::open(p_file, FileAccess::WRITE, &err);
 
 
@@ -947,7 +947,7 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust
 
 
 	for (const KeyValue<String, Variant> &E : p_custom) {
 	for (const KeyValue<String, Variant> &E : p_custom) {
 		// Lookup global prop to store in the same order
 		// Lookup global prop to store in the same order
-		HashMap<StringName, VariantContainer>::Iterator global_prop = props.find(E.key);
+		RBMap<StringName, VariantContainer>::Iterator global_prop = props.find(E.key);
 
 
 		_VCSort vc;
 		_VCSort vc;
 		vc.name = E.key;
 		vc.name = E.key;
@@ -957,7 +957,7 @@ Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_cust
 		vclist.insert(vc);
 		vclist.insert(vc);
 	}
 	}
 
 
-	HashMap<String, List<String>> props;
+	RBMap<String, List<String>> props;
 
 
 	for (RBSet<_VCSort>::Element *E = vclist.front(); E; E = E->next()) {
 	for (RBSet<_VCSort>::Element *E = vclist.front(); E; E = E->next()) {
 		String category = E->get().name;
 		String category = E->get().name;

+ 3 - 3
core/config/project_settings.h

@@ -84,7 +84,7 @@ protected:
 	int last_builtin_order = 0;
 	int last_builtin_order = 0;
 	uint64_t last_save_time = 0;
 	uint64_t last_save_time = 0;
 
 
-	HashMap<StringName, VariantContainer> props;
+	RBMap<StringName, VariantContainer> props; // NOTE: Key order is used e.g. in the save_custom method.
 	String resource_path;
 	String resource_path;
 	HashMap<StringName, PropertyInfo> custom_prop_info;
 	HashMap<StringName, PropertyInfo> custom_prop_info;
 	bool disable_feature_overrides = false;
 	bool disable_feature_overrides = false;
@@ -108,8 +108,8 @@ protected:
 	Error _load_settings_binary(const String &p_path);
 	Error _load_settings_binary(const String &p_path);
 	Error _load_settings_text_or_binary(const String &p_text_path, const String &p_bin_path);
 	Error _load_settings_text_or_binary(const String &p_text_path, const String &p_bin_path);
 
 
-	Error _save_settings_text(const String &p_file, const HashMap<String, List<String>> &props, const CustomMap &p_custom = CustomMap(), const String &p_custom_features = String());
-	Error _save_settings_binary(const String &p_file, const HashMap<String, List<String>> &props, const CustomMap &p_custom = CustomMap(), const String &p_custom_features = String());
+	Error _save_settings_text(const String &p_file, const RBMap<String, List<String>> &props, const CustomMap &p_custom = CustomMap(), const String &p_custom_features = String());
+	Error _save_settings_binary(const String &p_file, const RBMap<String, List<String>> &props, const CustomMap &p_custom = CustomMap(), const String &p_custom_features = String());
 
 
 	Error _save_custom_bnd(const String &p_file);
 	Error _save_custom_bnd(const String &p_file);