-Properly handle missing ETC support on export
-Added ability for resource importers to save metadata -Added ability for resource importers to validate depending on project settings
This commit is contained in:
parent
3b0f301660
commit
f669ebeeaf
30 changed files with 338 additions and 39 deletions
|
|
@ -32,6 +32,9 @@
|
|||
|
||||
#include "core/os/os.h"
|
||||
#include "core/variant_parser.h"
|
||||
bool ResourceFormatImporter::SortImporterByName::operator() ( const Ref<ResourceImporter>& p_a,const Ref<ResourceImporter>& p_b) const {
|
||||
return p_a->get_importer_name() < p_b->get_importer_name();
|
||||
}
|
||||
|
||||
Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndType &r_path_and_type, bool *r_valid) const {
|
||||
|
||||
|
|
@ -90,6 +93,8 @@ Error ResourceFormatImporter::_get_path_and_type(const String &p_path, PathAndTy
|
|||
r_path_and_type.type = value;
|
||||
} else if (assign == "importer") {
|
||||
r_path_and_type.importer = value;
|
||||
} else if (assign == "metadata") {
|
||||
r_path_and_type.metadata = value;
|
||||
} else if (assign == "valid") {
|
||||
if (r_valid) {
|
||||
*r_valid = value;
|
||||
|
|
@ -304,6 +309,19 @@ String ResourceFormatImporter::get_resource_type(const String &p_path) const {
|
|||
return pat.type;
|
||||
}
|
||||
|
||||
Variant ResourceFormatImporter::get_resource_metadata(const String &p_path) const {
|
||||
PathAndType pat;
|
||||
Error err = _get_path_and_type(p_path, pat);
|
||||
|
||||
if (err != OK) {
|
||||
|
||||
return Variant();
|
||||
}
|
||||
|
||||
return pat.metadata;
|
||||
}
|
||||
|
||||
|
||||
void ResourceFormatImporter::get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types) {
|
||||
|
||||
PathAndType pat;
|
||||
|
|
@ -366,6 +384,35 @@ String ResourceFormatImporter::get_import_base_path(const String &p_for_file) co
|
|||
return "res://.import/" + p_for_file.get_file() + "-" + p_for_file.md5_text();
|
||||
}
|
||||
|
||||
bool ResourceFormatImporter::are_import_settings_valid(const String &p_path) const {
|
||||
|
||||
bool valid = true;
|
||||
PathAndType pat;
|
||||
_get_path_and_type(p_path, pat, &valid);
|
||||
|
||||
if (!valid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for(int i=0;i<importers.size();i++) {
|
||||
if (importers[i]->get_importer_name() == pat.importer) {
|
||||
if (!importers[i]->are_import_settings_valid(p_path)) { //importer thinks this is not valid
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
String ResourceFormatImporter::get_import_settings_hash() const {
|
||||
String hash;
|
||||
for(int i=0;i<importers.size();i++) {
|
||||
hash+=":"+importers[i]->get_importer_name()+":"+importers[i]->get_import_settings_string();
|
||||
}
|
||||
return hash.md5_text();
|
||||
}
|
||||
|
||||
ResourceFormatImporter *ResourceFormatImporter::singleton = NULL;
|
||||
|
||||
ResourceFormatImporter::ResourceFormatImporter() {
|
||||
|
|
|
|||
|
|
@ -43,12 +43,18 @@ class ResourceFormatImporter : public ResourceFormatLoader {
|
|||
String path;
|
||||
String type;
|
||||
String importer;
|
||||
Variant metadata;
|
||||
};
|
||||
|
||||
Error _get_path_and_type(const String &p_path, PathAndType &r_path_and_type, bool *r_valid = NULL) const;
|
||||
|
||||
static ResourceFormatImporter *singleton;
|
||||
|
||||
//need them to stay in order to compute the settings hash
|
||||
struct SortImporterByName {
|
||||
bool operator() ( const Ref<ResourceImporter>& p_a,const Ref<ResourceImporter>& p_b) const;
|
||||
};
|
||||
|
||||
Vector<Ref<ResourceImporter> > importers;
|
||||
|
||||
public:
|
||||
|
|
@ -59,6 +65,7 @@ public:
|
|||
virtual bool recognize_path(const String &p_path, const String &p_for_type = String()) const;
|
||||
virtual bool handles_type(const String &p_type) const;
|
||||
virtual String get_resource_type(const String &p_path) const;
|
||||
virtual Variant get_resource_metadata(const String &p_path) const;
|
||||
virtual bool is_import_valid(const String &p_path) const;
|
||||
virtual void get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types = false);
|
||||
|
||||
|
|
@ -68,12 +75,15 @@ public:
|
|||
String get_internal_resource_path(const String &p_path) const;
|
||||
void get_internal_resource_path_list(const String &p_path, List<String> *r_paths);
|
||||
|
||||
void add_importer(const Ref<ResourceImporter> &p_importer) { importers.push_back(p_importer); }
|
||||
void add_importer(const Ref<ResourceImporter> &p_importer) { importers.push_back(p_importer); importers.sort_custom<SortImporterByName>();}
|
||||
void remove_importer(const Ref<ResourceImporter> &p_importer) { importers.erase(p_importer); }
|
||||
Ref<ResourceImporter> get_importer_by_name(const String &p_name) const;
|
||||
Ref<ResourceImporter> get_importer_by_extension(const String &p_extension) const;
|
||||
void get_importers_for_extension(const String &p_extension, List<Ref<ResourceImporter> > *r_importers);
|
||||
|
||||
bool are_import_settings_valid(const String &p_path) const;
|
||||
String get_import_settings_hash() const;
|
||||
|
||||
String get_import_base_path(const String &p_for_file) const;
|
||||
ResourceFormatImporter();
|
||||
};
|
||||
|
|
@ -107,7 +117,10 @@ public:
|
|||
virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const = 0;
|
||||
virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const = 0;
|
||||
|
||||
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL) = 0;
|
||||
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = NULL, Variant *r_metadata=NULL) = 0;
|
||||
virtual bool are_import_settings_valid(const String &p_path) const { return true; }
|
||||
virtual String get_import_settings_string() const { return String(); }
|
||||
|
||||
};
|
||||
|
||||
#endif // RESOURCE_IMPORTER_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue