Skip to content

Commit

Permalink
Merge pull request #96499 from beev1s/shallow-script-cache-error
Browse files Browse the repository at this point in the history
Fix resource loader not resolving shallow loaded scripts through dependencies
  • Loading branch information
Repiteo committed Oct 25, 2024
2 parents 07e759b + fd5fc9f commit 2584f75
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
20 changes: 20 additions & 0 deletions modules/gdscript/gdscript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1075,6 +1075,26 @@ void GDScript::_bind_methods() {
ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &GDScript::_new, MethodInfo("new"));
}

void GDScript::set_path_cache(const String &p_path) {
if (ResourceCache::has(p_path)) {
set_path(p_path, true);
return;
}

if (is_root_script()) {
Script::set_path_cache(p_path);
}

String old_path = path;
path = p_path;
path_valid = true;
GDScriptCache::move_script(old_path, p_path);

for (KeyValue<StringName, Ref<GDScript>> &kv : subclasses) {
kv.value->set_path_cache(p_path);
}
}

void GDScript::set_path(const String &p_path, bool p_take_over) {
if (is_root_script()) {
Script::set_path(p_path, p_take_over);
Expand Down
1 change: 1 addition & 0 deletions modules/gdscript/gdscript.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,7 @@ class GDScript : public Script {

virtual Error reload(bool p_keep_state = false) override;

virtual void set_path_cache(const String &p_path) override;
virtual void set_path(const String &p_path, bool p_take_over = false) override;
String get_script_path() const;
Error load_source_code(const String &p_path);
Expand Down
3 changes: 2 additions & 1 deletion modules/gdscript/gdscript_cache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ Ref<GDScript> GDScriptCache::get_shallow_script(const String &p_path, Error &r_e

Ref<GDScript> script;
script.instantiate();
script->set_path(p_path, true);
script->set_path_cache(p_path);
if (remapped_path.get_extension().to_lower() == "gdc") {
Vector<uint8_t> buffer = get_binary_tokens(remapped_path);
if (buffer.is_empty()) {
Expand Down Expand Up @@ -360,6 +360,7 @@ Ref<GDScript> GDScriptCache::get_full_script(const String &p_path, Error &r_erro
return script;
}
}
script->set_path(p_path, true);

const String remapped_path = ResourceLoader::path_remap(p_path);

Expand Down

0 comments on commit 2584f75

Please sign in to comment.