Merge pull request #80281 from KoBeWi/unacceptable
Assign temporary path to preloaded resources
This commit is contained in:
commit
8928b2044b
7 changed files with 17 additions and 0 deletions
|
@ -90,6 +90,10 @@ String Resource::get_path() const {
|
||||||
return path_cache;
|
return path_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Resource::set_path_cache(const String &p_path) {
|
||||||
|
path_cache = p_path;
|
||||||
|
}
|
||||||
|
|
||||||
String Resource::generate_scene_unique_id() {
|
String Resource::generate_scene_unique_id() {
|
||||||
// Generate a unique enough hash, but still user-readable.
|
// Generate a unique enough hash, but still user-readable.
|
||||||
// If it's not unique it does not matter because the saver will try again.
|
// If it's not unique it does not matter because the saver will try again.
|
||||||
|
|
|
@ -103,6 +103,7 @@ public:
|
||||||
|
|
||||||
virtual void set_path(const String &p_path, bool p_take_over = false);
|
virtual void set_path(const String &p_path, bool p_take_over = false);
|
||||||
String get_path() const;
|
String get_path() const;
|
||||||
|
void set_path_cache(const String &p_path); // Set raw path without involving resource cache.
|
||||||
_FORCE_INLINE_ bool is_built_in() const { return path_cache.is_empty() || path_cache.contains("::") || path_cache.begins_with("local://"); }
|
_FORCE_INLINE_ bool is_built_in() const { return path_cache.is_empty() || path_cache.contains("::") || path_cache.begins_with("local://"); }
|
||||||
|
|
||||||
static String generate_scene_unique_id();
|
static String generate_scene_unique_id();
|
||||||
|
|
|
@ -774,6 +774,8 @@ Error ResourceLoaderBinary::load() {
|
||||||
res = Ref<Resource>(r);
|
res = Ref<Resource>(r);
|
||||||
if (!path.is_empty() && cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) {
|
if (!path.is_empty() && cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) {
|
||||||
r->set_path(path, cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE); //if got here because the resource with same path has different type, replace it
|
r->set_path(path, cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE); //if got here because the resource with same path has different type, replace it
|
||||||
|
} else if (!path.is_resource_file()) {
|
||||||
|
r->set_path_cache(path);
|
||||||
}
|
}
|
||||||
r->set_scene_unique_id(id);
|
r->set_scene_unique_id(id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -341,6 +341,8 @@ void ResourceLoader::_thread_load_function(void *p_userdata) {
|
||||||
if (load_task.resource.is_valid()) {
|
if (load_task.resource.is_valid()) {
|
||||||
if (load_task.cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) {
|
if (load_task.cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) {
|
||||||
load_task.resource->set_path(load_task.local_path);
|
load_task.resource->set_path(load_task.local_path);
|
||||||
|
} else if (!load_task.local_path.is_resource_file()) {
|
||||||
|
load_task.resource->set_path_cache(load_task.local_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (load_task.xl_remapped) {
|
if (load_task.xl_remapped) {
|
||||||
|
|
|
@ -992,6 +992,7 @@ void GDScript::set_path(const String &p_path, bool p_take_over) {
|
||||||
|
|
||||||
String old_path = path;
|
String old_path = path;
|
||||||
path = p_path;
|
path = p_path;
|
||||||
|
path_valid = true;
|
||||||
GDScriptCache::move_script(old_path, p_path);
|
GDScriptCache::move_script(old_path, p_path);
|
||||||
|
|
||||||
for (KeyValue<StringName, Ref<GDScript>> &kv : subclasses) {
|
for (KeyValue<StringName, Ref<GDScript>> &kv : subclasses) {
|
||||||
|
@ -1000,6 +1001,9 @@ void GDScript::set_path(const String &p_path, bool p_take_over) {
|
||||||
}
|
}
|
||||||
|
|
||||||
String GDScript::get_script_path() const {
|
String GDScript::get_script_path() const {
|
||||||
|
if (!path_valid && !get_path().is_empty()) {
|
||||||
|
return get_path();
|
||||||
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1035,6 +1039,7 @@ Error GDScript::load_source_code(const String &p_path) {
|
||||||
|
|
||||||
source = s;
|
source = s;
|
||||||
path = p_path;
|
path = p_path;
|
||||||
|
path_valid = true;
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
source_changed_cache = true;
|
source_changed_cache = true;
|
||||||
set_edited(false);
|
set_edited(false);
|
||||||
|
|
|
@ -171,6 +171,7 @@ class GDScript : public Script {
|
||||||
//exported members
|
//exported members
|
||||||
String source;
|
String source;
|
||||||
String path;
|
String path;
|
||||||
|
bool path_valid = false; // False if using default path.
|
||||||
StringName local_name; // Inner class identifier or `class_name`.
|
StringName local_name; // Inner class identifier or `class_name`.
|
||||||
StringName global_name; // `class_name`.
|
StringName global_name; // `class_name`.
|
||||||
String fully_qualified_name;
|
String fully_qualified_name;
|
||||||
|
|
|
@ -577,6 +577,8 @@ Error ResourceLoaderText::load() {
|
||||||
if (do_assign) {
|
if (do_assign) {
|
||||||
if (cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) {
|
if (cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE) {
|
||||||
res->set_path(path, cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE);
|
res->set_path(path, cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE);
|
||||||
|
} else if (!path.is_resource_file()) {
|
||||||
|
res->set_path_cache(path);
|
||||||
}
|
}
|
||||||
res->set_scene_unique_id(id);
|
res->set_scene_unique_id(id);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue