| 
									
										
										
										
											2017-03-05 15:47:28 +01:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2019-02-12 13:30:56 +01:00
										 |  |  | /*  resource_importer.h                                                  */ | 
					
						
							| 
									
										
										
										
											2017-03-05 15:47:28 +01:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2017-03-05 15:47:28 +01:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2021-01-01 20:13:46 +01:00
										 |  |  | /* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2017-03-05 15:47:28 +01:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-12 13:30:56 +01:00
										 |  |  | #ifndef RESOURCE_IMPORTER_H
 | 
					
						
							|  |  |  | #define RESOURCE_IMPORTER_H
 | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-11 18:13:45 +02:00
										 |  |  | #include "core/io/resource_loader.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | class ResourceImporter; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ResourceFormatImporter : public ResourceFormatLoader { | 
					
						
							|  |  |  | 	struct PathAndType { | 
					
						
							|  |  |  | 		String path; | 
					
						
							|  |  |  | 		String type; | 
					
						
							| 
									
										
										
										
											2017-09-20 20:59:19 -03:00
										 |  |  | 		String importer; | 
					
						
							| 
									
										
										
										
											2019-04-19 15:54:33 -03:00
										 |  |  | 		String group_file; | 
					
						
							| 
									
										
										
										
											2019-02-26 18:43:37 -03:00
										 |  |  | 		Variant metadata; | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-02 01:20:12 +02:00
										 |  |  | 	Error _get_path_and_type(const String &p_path, PathAndType &r_path_and_type, bool *r_valid = nullptr) const; | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 	static ResourceFormatImporter *singleton; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 18:43:37 -03:00
										 |  |  | 	//need them to stay in order to compute the settings hash
 | 
					
						
							|  |  |  | 	struct SortImporterByName { | 
					
						
							| 
									
										
										
										
											2019-02-27 08:57:37 +01:00
										 |  |  | 		bool operator()(const Ref<ResourceImporter> &p_a, const Ref<ResourceImporter> &p_b) const; | 
					
						
							| 
									
										
										
										
											2019-02-26 18:43:37 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-17 07:33:00 +01:00
										 |  |  | 	Vector<Ref<ResourceImporter>> importers; | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 	static ResourceFormatImporter *get_singleton() { return singleton; } | 
					
						
							| 
									
										
										
										
											2021-02-11 14:18:45 -03:00
										 |  |  | 	virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = nullptr, bool p_use_sub_threads = false, float *r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE); | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 	virtual void get_recognized_extensions(List<String> *p_extensions) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	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; | 
					
						
							|  |  |  | 	virtual bool handles_type(const String &p_type) const; | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 	virtual String get_resource_type(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2019-02-26 18:43:37 -03:00
										 |  |  | 	virtual Variant get_resource_metadata(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2017-08-29 19:50:58 -03:00
										 |  |  | 	virtual bool is_import_valid(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual void get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types = false); | 
					
						
							| 
									
										
										
										
											2019-03-04 11:06:15 -03:00
										 |  |  | 	virtual bool is_imported(const String &p_path) const { return recognize_path(p_path); } | 
					
						
							| 
									
										
										
										
											2019-04-19 15:54:33 -03:00
										 |  |  | 	virtual String get_import_group_file(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2019-03-04 21:00:50 -03:00
										 |  |  | 	virtual bool exists(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-20 20:59:19 -03:00
										 |  |  | 	virtual int get_import_order(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String get_internal_resource_path(const String &p_path) const; | 
					
						
							| 
									
										
										
										
											2017-08-15 01:13:14 +02:00
										 |  |  | 	void get_internal_resource_path_list(const String &p_path, List<String> *r_paths); | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-27 08:57:37 +01:00
										 |  |  | 	void add_importer(const Ref<ResourceImporter> &p_importer) { | 
					
						
							|  |  |  | 		importers.push_back(p_importer); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-06-11 17:18:22 +08:00
										 |  |  | 	void remove_importer(const Ref<ResourceImporter> &p_importer) { importers.erase(p_importer); } | 
					
						
							| 
									
										
										
										
											2017-09-20 20:59:19 -03:00
										 |  |  | 	Ref<ResourceImporter> get_importer_by_name(const String &p_name) const; | 
					
						
							|  |  |  | 	Ref<ResourceImporter> get_importer_by_extension(const String &p_extension) const; | 
					
						
							| 
									
										
										
										
											2020-03-17 07:33:00 +01:00
										 |  |  | 	void get_importers_for_extension(const String &p_extension, List<Ref<ResourceImporter>> *r_importers); | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 18:43:37 -03:00
										 |  |  | 	bool are_import_settings_valid(const String &p_path) const; | 
					
						
							|  |  |  | 	String get_import_settings_hash() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	String get_import_base_path(const String &p_for_file) const; | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 	ResourceFormatImporter(); | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | class ResourceImporter : public Reference { | 
					
						
							| 
									
										
										
										
											2019-03-19 14:35:57 -04:00
										 |  |  | 	GDCLASS(ResourceImporter, Reference); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	virtual String get_importer_name() const = 0; | 
					
						
							|  |  |  | 	virtual String get_visible_name() const = 0; | 
					
						
							|  |  |  | 	virtual void get_recognized_extensions(List<String> *p_extensions) const = 0; | 
					
						
							|  |  |  | 	virtual String get_save_extension() const = 0; | 
					
						
							|  |  |  | 	virtual String get_resource_type() const = 0; | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 	virtual float get_priority() const { return 1.0; } | 
					
						
							| 
									
										
										
										
											2017-09-20 20:59:19 -03:00
										 |  |  | 	virtual int get_import_order() const { return 0; } | 
					
						
							| 
									
										
										
										
											2020-12-01 22:40:47 -03:00
										 |  |  | 	virtual int get_format_version() const { return 0; } | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	struct ImportOption { | 
					
						
							|  |  |  | 		PropertyInfo option; | 
					
						
							|  |  |  | 		Variant default_value; | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 21:36:34 +01:00
										 |  |  | 		ImportOption(const PropertyInfo &p_info, const Variant &p_default) : | 
					
						
							|  |  |  | 				option(p_info), | 
					
						
							|  |  |  | 				default_value(p_default) { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 		ImportOption() {} | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-01 09:45:45 -03:00
										 |  |  | 	virtual int get_preset_count() const { return 0; } | 
					
						
							|  |  |  | 	virtual String get_preset_name(int p_idx) const { return String(); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	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; | 
					
						
							| 
									
										
										
										
											2019-04-19 15:54:33 -03:00
										 |  |  | 	virtual String get_option_group_file() const { return String(); } | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-02 01:20:12 +02:00
										 |  |  | 	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 = nullptr, Variant *r_metadata = nullptr) = 0; | 
					
						
							| 
									
										
										
										
											2019-04-19 15:54:33 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-17 07:33:00 +01:00
										 |  |  | 	virtual Error import_group_file(const String &p_group_file, const Map<String, Map<StringName, Variant>> &p_source_file_options, const Map<String, String> &p_base_paths) { return ERR_UNAVAILABLE; } | 
					
						
							| 
									
										
										
										
											2019-02-26 18:43:37 -03:00
										 |  |  | 	virtual bool are_import_settings_valid(const String &p_path) const { return true; } | 
					
						
							|  |  |  | 	virtual String get_import_settings_string() const { return String(); } | 
					
						
							| 
									
										
										
										
											2017-01-25 21:55:59 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-12 13:30:56 +01:00
										 |  |  | #endif // RESOURCE_IMPORTER_H
 |