Added function ResourceLoader.exists(), to check if a resource exists. Closes #19140
This commit is contained in:
parent
767fb2fa0b
commit
852378109f
4 changed files with 45 additions and 4 deletions
|
@ -112,11 +112,15 @@ PoolStringArray _ResourceLoader::get_dependencies(const String &p_path) {
|
|||
return ret;
|
||||
};
|
||||
|
||||
bool _ResourceLoader::has(const String &p_path) {
|
||||
bool _ResourceLoader::has_cached(const String &p_path) {
|
||||
|
||||
String local_path = ProjectSettings::get_singleton()->localize_path(p_path);
|
||||
return ResourceCache::has(local_path);
|
||||
};
|
||||
}
|
||||
|
||||
bool _ResourceLoader::exists(const String &p_path, const String &p_type_hint) {
|
||||
return ResourceLoader::exists(p_path, p_type_hint);
|
||||
}
|
||||
|
||||
void _ResourceLoader::_bind_methods() {
|
||||
|
||||
|
@ -125,7 +129,8 @@ void _ResourceLoader::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_recognized_extensions_for_type", "type"), &_ResourceLoader::get_recognized_extensions_for_type);
|
||||
ClassDB::bind_method(D_METHOD("set_abort_on_missing_resources", "abort"), &_ResourceLoader::set_abort_on_missing_resources);
|
||||
ClassDB::bind_method(D_METHOD("get_dependencies", "path"), &_ResourceLoader::get_dependencies);
|
||||
ClassDB::bind_method(D_METHOD("has", "path"), &_ResourceLoader::has);
|
||||
ClassDB::bind_method(D_METHOD("has_cached", "path"), &_ResourceLoader::has_cached);
|
||||
ClassDB::bind_method(D_METHOD("exists", "path", "type_hint"), &_ResourceLoader::exists, DEFVAL(""));
|
||||
}
|
||||
|
||||
_ResourceLoader::_ResourceLoader() {
|
||||
|
|
|
@ -55,7 +55,8 @@ public:
|
|||
PoolVector<String> get_recognized_extensions_for_type(const String &p_type);
|
||||
void set_abort_on_missing_resources(bool p_abort);
|
||||
PoolStringArray get_dependencies(const String &p_path);
|
||||
bool has(const String &p_path);
|
||||
bool has_cached(const String &p_path);
|
||||
bool exists(const String &p_path, const String &p_type_hint = "");
|
||||
|
||||
_ResourceLoader();
|
||||
};
|
||||
|
|
|
@ -123,6 +123,9 @@ Ref<ResourceInteractiveLoader> ResourceFormatLoader::load_interactive(const Stri
|
|||
return ril;
|
||||
}
|
||||
|
||||
bool ResourceFormatLoader::exists(const String &p_path) const {
|
||||
return FileAccess::exists(p_path); //by default just check file
|
||||
}
|
||||
RES ResourceFormatLoader::load(const String &p_path, const String &p_original_path, Error *r_error) {
|
||||
|
||||
String path = p_path;
|
||||
|
@ -239,6 +242,36 @@ RES ResourceLoader::load(const String &p_path, const String &p_type_hint, bool p
|
|||
return res;
|
||||
}
|
||||
|
||||
bool ResourceLoader::exists(const String &p_path, const String &p_type_hint) {
|
||||
|
||||
String local_path;
|
||||
if (p_path.is_rel_path())
|
||||
local_path = "res://" + p_path;
|
||||
else
|
||||
local_path = ProjectSettings::get_singleton()->localize_path(p_path);
|
||||
|
||||
if (ResourceCache::has(local_path)) {
|
||||
|
||||
return false; //if cached, it probably exists i guess
|
||||
}
|
||||
|
||||
bool xl_remapped = false;
|
||||
String path = _path_remap(local_path, &xl_remapped);
|
||||
|
||||
// Try all loaders and pick the first match for the type hint
|
||||
for (int i = 0; i < loader_count; i++) {
|
||||
|
||||
if (!loader[i]->recognize_path(path, p_type_hint)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (loader[i]->exists(path))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Ref<ResourceInteractiveLoader> ResourceLoader::load_interactive(const String &p_path, const String &p_type_hint, bool p_no_cache, Error *r_error) {
|
||||
|
||||
if (r_error)
|
||||
|
|
|
@ -60,6 +60,7 @@ class ResourceFormatLoader {
|
|||
public:
|
||||
virtual Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
|
||||
virtual bool exists(const String &p_path) const;
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const = 0;
|
||||
virtual void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const;
|
||||
virtual bool recognize_path(const String &p_path, const String &p_for_type = String()) const;
|
||||
|
@ -106,6 +107,7 @@ class ResourceLoader {
|
|||
public:
|
||||
static Ref<ResourceInteractiveLoader> load_interactive(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL);
|
||||
static RES load(const String &p_path, const String &p_type_hint = "", bool p_no_cache = false, Error *r_error = NULL);
|
||||
static bool exists(const String &p_path, const String &p_type_hint = "");
|
||||
|
||||
static void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions);
|
||||
static void add_resource_format_loader(ResourceFormatLoader *p_format_loader, bool p_at_front = false);
|
||||
|
|
Loading…
Reference in a new issue