Fix Script Editor saves C# files as embedded scripts
fixes: #88543 fixes: #88160 Because of the limitations of compiled programming languages like C#, when a newly created *.cs file hasn't been compiled, we don't have any information about its `Path` or `Type` in the `assemply`. This means we end up creating an invalid instance of this file whenever there's a request. Consequently, multiple instances of the script can exist. When a new instance takes over the path, it clears the `path_cache` of the previous instance, leading to undefined behavior.
This commit is contained in:
parent
2e7fc81315
commit
c5e6a5863d
1 changed files with 16 additions and 1 deletions
|
@ -2851,7 +2851,22 @@ Ref<Resource> ResourceFormatLoaderCSharpScript::load(const String &p_path, const
|
|||
ERR_FAIL_COND_V_MSG(!scr->get_path().is_empty() && scr->get_path() != p_original_path, Ref<Resource>(),
|
||||
"The C# script path is different from the path it was registered in the C# dictionary.");
|
||||
|
||||
scr->set_path(p_original_path, true);
|
||||
Ref<Resource> existing = ResourceCache::get_ref(p_path);
|
||||
switch (p_cache_mode) {
|
||||
case ResourceFormatLoader::CACHE_MODE_IGNORE:
|
||||
break;
|
||||
case ResourceFormatLoader::CACHE_MODE_REUSE:
|
||||
if (existing.is_null()) {
|
||||
scr->set_path(p_original_path);
|
||||
} else {
|
||||
scr = existing;
|
||||
}
|
||||
break;
|
||||
case ResourceFormatLoader::CACHE_MODE_REPLACE:
|
||||
scr->set_path(p_original_path, true);
|
||||
break;
|
||||
}
|
||||
|
||||
scr->reload();
|
||||
|
||||
if (r_error) {
|
||||
|
|
Loading…
Reference in a new issue