From 8d10d8e7e6571221c6e9ad587d816d51265ec46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Sun, 23 Nov 2025 15:10:00 +0200 Subject: [PATCH] Allow `override.cfg` to add autoloads to the front of the list. --- core/config/project_settings.cpp | 25 ++++++++++++++++++++++--- core/config/project_settings.h | 2 +- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp index 99a2fc67146..8557c04051a 100644 --- a/core/config/project_settings.cpp +++ b/core/config/project_settings.cpp @@ -339,7 +339,19 @@ bool ProjectSettings::_set(const StringName &p_name, const Variant &p_value) { } else { props[p_name] = VariantContainer(p_value, last_order++); } - if (p_name.operator String().begins_with("autoload/")) { + if (p_name.operator String().begins_with("autoload_prepend/")) { + String node_name = p_name.operator String().get_slicec('/', 1); + AutoloadInfo autoload; + autoload.name = node_name; + String path = p_value; + if (path.begins_with("*")) { + autoload.is_singleton = true; + autoload.path = path.substr(1).simplify_path(); + } else { + autoload.path = path.simplify_path(); + } + add_autoload(autoload, true); + } else if (p_name.operator String().begins_with("autoload/")) { String node_name = p_name.operator String().get_slicec('/', 1); AutoloadInfo autoload; autoload.name = node_name; @@ -1468,9 +1480,16 @@ const HashMap &ProjectSettings::get_a return autoloads; } -void ProjectSettings::add_autoload(const AutoloadInfo &p_autoload) { +void ProjectSettings::add_autoload(const AutoloadInfo &p_autoload, bool p_front_insert) { ERR_FAIL_COND_MSG(p_autoload.name == StringName(), "Trying to add autoload with no name."); - autoloads[p_autoload.name] = p_autoload; + if (p_front_insert) { + if (autoloads.has(p_autoload.name)) { + autoloads.erase(p_autoload.name); + } + autoloads.insert(p_autoload.name, p_autoload, true); + } else { + autoloads[p_autoload.name] = p_autoload; + } } void ProjectSettings::remove_autoload(const StringName &p_autoload) { diff --git a/core/config/project_settings.h b/core/config/project_settings.h index 546234ebede..a0962a61560 100644 --- a/core/config/project_settings.h +++ b/core/config/project_settings.h @@ -219,7 +219,7 @@ public: bool check_changed_settings_in_group(const String &p_setting_prefix) const; const HashMap &get_autoload_list() const; - void add_autoload(const AutoloadInfo &p_autoload); + void add_autoload(const AutoloadInfo &p_autoload, bool p_front_insert = false); void remove_autoload(const StringName &p_autoload); bool has_autoload(const StringName &p_autoload) const; AutoloadInfo get_autoload(const StringName &p_name) const;