2017-04-09 00:37:31 +02:00
/**************************************************************************/
/* editor_import_plugin.cpp */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* 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
2017-04-09 00:37:31 +02:00
# include "editor_import_plugin.h"
2022-02-12 02:46:22 +01:00
2020-11-07 19:33:38 -03:00
# include "core/object/script_language.h"
2025-06-10 16:47:26 +02:00
# include "editor/file_system/editor_file_system.h"
2017-04-09 00:37:31 +02:00
String EditorImportPlugin : : get_importer_name ( ) const {
2021-08-21 22:52:44 -03:00
String ret ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_importer_name , ret ) ;
return ret ;
2017-04-09 00:37:31 +02:00
}
String EditorImportPlugin : : get_visible_name ( ) const {
2021-08-21 22:52:44 -03:00
String ret ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_visible_name , ret ) ;
return ret ;
2017-04-09 00:37:31 +02:00
}
void EditorImportPlugin : : get_recognized_extensions ( List < String > * p_extensions ) const {
2021-08-21 22:52:44 -03:00
Vector < String > extensions ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_recognized_extensions , extensions ) ;
for ( int i = 0 ; i < extensions . size ( ) ; i + + ) {
p_extensions - > push_back ( extensions [ i ] ) ;
2017-04-09 00:37:31 +02:00
}
}
String EditorImportPlugin : : get_preset_name ( int p_idx ) const {
2021-08-21 22:52:44 -03:00
String ret ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_preset_name , p_idx , ret ) ;
return ret ;
2017-04-09 00:37:31 +02:00
}
2017-06-20 21:24:26 +02:00
int EditorImportPlugin : : get_preset_count ( ) const {
2021-08-21 22:52:44 -03:00
int ret ;
if ( GDVIRTUAL_CALL ( _get_preset_count , ret ) ) {
return ret ;
}
2025-05-21 22:13:09 +08:00
return 0 ;
2017-04-09 00:37:31 +02:00
}
String EditorImportPlugin : : get_save_extension ( ) const {
2021-08-21 22:52:44 -03:00
String ret ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_save_extension , ret ) ;
return ret ;
2017-04-09 00:37:31 +02:00
}
String EditorImportPlugin : : get_resource_type ( ) const {
2021-08-21 22:52:44 -03:00
String ret ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_resource_type , ret ) ;
return ret ;
2017-04-09 00:37:31 +02:00
}
2018-02-13 11:59:56 -02:00
float EditorImportPlugin : : get_priority ( ) const {
2021-08-21 22:52:44 -03:00
float ret ;
if ( GDVIRTUAL_CALL ( _get_priority , ret ) ) {
return ret ;
2018-02-13 11:59:56 -02:00
}
2025-05-21 22:13:09 +08:00
return 1.0 ;
2018-02-13 11:59:56 -02:00
}
int EditorImportPlugin : : get_import_order ( ) const {
2021-08-21 22:52:44 -03:00
int ret ;
if ( GDVIRTUAL_CALL ( _get_import_order , ret ) ) {
return ret ;
2018-02-13 11:59:56 -02:00
}
2025-05-21 22:13:09 +08:00
return IMPORT_ORDER_DEFAULT ;
2018-02-13 11:59:56 -02:00
}
2024-09-10 10:29:15 -05:00
int EditorImportPlugin : : get_format_version ( ) const {
int ret = 0 ;
if ( GDVIRTUAL_CALL ( _get_format_version , ret ) ) {
return ret ;
}
return 0 ;
}
2021-11-14 14:02:38 -03:00
void EditorImportPlugin : : get_import_options ( const String & p_path , List < ResourceImporter : : ImportOption > * r_options , int p_preset ) const {
2024-03-22 22:53:26 +01:00
Array needed = { " name " , " default_value " } ;
2022-08-05 03:41:48 +02:00
TypedArray < Dictionary > options ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _get_import_options , p_path , p_preset , options ) ;
for ( int i = 0 ; i < options . size ( ) ; i + + ) {
Dictionary d = options [ i ] ;
ERR_FAIL_COND ( ! d . has_all ( needed ) ) ;
String name = d [ " name " ] ;
Variant default_value = d [ " default_value " ] ;
PropertyHint hint = PROPERTY_HINT_NONE ;
if ( d . has ( " property_hint " ) ) {
hint = ( PropertyHint ) d [ " property_hint " ] . operator int64_t ( ) ;
}
String hint_string ;
if ( d . has ( " hint_string " ) ) {
hint_string = d [ " hint_string " ] ;
}
uint32_t usage = PROPERTY_USAGE_DEFAULT ;
if ( d . has ( " usage " ) ) {
usage = d [ " usage " ] ;
2017-04-09 00:37:31 +02:00
}
2021-08-21 22:52:44 -03:00
2025-03-28 22:35:45 +01:00
ImportOption option ( PropertyInfo ( default_value . get_type ( ) , name , hint , hint_string , usage ) , default_value ) ;
r_options - > push_back ( option ) ;
}
2017-04-09 00:37:31 +02:00
}
2022-05-13 15:04:37 +02:00
bool EditorImportPlugin : : get_option_visibility ( const String & p_path , const String & p_option , const HashMap < StringName , Variant > & p_options ) const {
2017-04-09 00:37:31 +02:00
Dictionary d ;
2022-05-13 15:04:37 +02:00
HashMap < StringName , Variant > : : ConstIterator E = p_options . begin ( ) ;
2017-04-09 00:37:31 +02:00
while ( E ) {
2022-05-13 15:04:37 +02:00
d [ E - > key ] = E - > value ;
+ + E ;
2017-04-09 00:37:31 +02:00
}
2022-09-29 12:53:28 +03:00
bool visible = false ;
2021-11-14 14:02:38 -03:00
if ( GDVIRTUAL_CALL ( _get_option_visibility , p_path , p_option , d , visible ) ) {
2021-08-21 22:52:44 -03:00
return visible ;
}
2025-05-21 22:13:09 +08:00
return true ;
2017-04-09 00:37:31 +02:00
}
2024-09-23 16:07:40 +02:00
Error EditorImportPlugin : : import ( ResourceUID : : ID p_source_id , const String & p_source_file , const String & p_save_path , const HashMap < StringName , Variant > & p_options , List < String > * r_platform_variants , List < String > * r_gen_files , Variant * r_metadata ) {
2017-04-09 00:37:31 +02:00
Dictionary options ;
2022-08-31 19:24:04 +02:00
TypedArray < String > platform_variants , gen_files ;
2017-04-09 00:37:31 +02:00
2022-05-13 15:04:37 +02:00
HashMap < StringName , Variant > : : ConstIterator E = p_options . begin ( ) ;
2017-04-09 00:37:31 +02:00
while ( E ) {
2022-05-13 15:04:37 +02:00
options [ E - > key ] = E - > value ;
+ + E ;
2017-04-09 00:37:31 +02:00
}
2023-01-15 20:33:20 +01:00
Error err = OK ;
2025-03-28 22:35:45 +01:00
GDVIRTUAL_CALL ( _import , p_source_file , p_save_path , options , platform_variants , gen_files , err ) ;
for ( int i = 0 ; i < platform_variants . size ( ) ; i + + ) {
r_platform_variants - > push_back ( platform_variants [ i ] ) ;
}
for ( int i = 0 ; i < gen_files . size ( ) ; i + + ) {
r_gen_files - > push_back ( gen_files [ i ] ) ;
2017-04-09 00:37:31 +02:00
}
2025-03-28 22:35:45 +01:00
return err ;
2017-04-09 00:37:31 +02:00
}
2024-01-09 13:03:45 +01:00
bool EditorImportPlugin : : can_import_threaded ( ) const {
bool ret = false ;
if ( GDVIRTUAL_CALL ( _can_import_threaded , ret ) ) {
return ret ;
} else {
return ResourceImporter : : can_import_threaded ( ) ;
}
}
2023-02-02 13:41:04 -08:00
Error EditorImportPlugin : : _append_import_external_resource ( const String & p_file , const Dictionary & p_custom_options , const String & p_custom_importer , Variant p_generator_parameters ) {
2023-01-31 15:59:52 +01:00
HashMap < StringName , Variant > options ;
2025-03-12 06:43:48 +08:00
for ( const KeyValue < Variant , Variant > & kv : p_custom_options ) {
options . insert ( kv . key , kv . value ) ;
2023-01-31 15:59:52 +01:00
}
2023-02-02 13:41:04 -08:00
return append_import_external_resource ( p_file , options , p_custom_importer , p_generator_parameters ) ;
2023-01-31 15:59:52 +01:00
}
2023-02-02 13:41:04 -08:00
Error EditorImportPlugin : : append_import_external_resource ( const String & p_file , const HashMap < StringName , Variant > & p_custom_options , const String & p_custom_importer , Variant p_generator_parameters ) {
2024-11-30 00:05:05 +01:00
ERR_FAIL_COND_V_MSG ( ! EditorFileSystem : : get_singleton ( ) - > is_importing ( ) , ERR_INVALID_PARAMETER , " Can only append files to import during a current reimport process. " ) ;
2023-02-02 13:41:04 -08:00
return EditorFileSystem : : get_singleton ( ) - > reimport_append ( p_file , p_custom_options , p_custom_importer , p_generator_parameters ) ;
2023-01-31 15:59:52 +01:00
}
2017-04-09 00:37:31 +02:00
void EditorImportPlugin : : _bind_methods ( ) {
2021-08-21 22:52:44 -03:00
GDVIRTUAL_BIND ( _get_importer_name )
GDVIRTUAL_BIND ( _get_visible_name )
GDVIRTUAL_BIND ( _get_preset_count )
GDVIRTUAL_BIND ( _get_preset_name , " preset_index " )
GDVIRTUAL_BIND ( _get_recognized_extensions )
2021-11-14 14:02:38 -03:00
GDVIRTUAL_BIND ( _get_import_options , " path " , " preset_index " )
2021-08-21 22:52:44 -03:00
GDVIRTUAL_BIND ( _get_save_extension )
GDVIRTUAL_BIND ( _get_resource_type )
GDVIRTUAL_BIND ( _get_priority )
GDVIRTUAL_BIND ( _get_import_order )
2024-09-10 10:29:15 -05:00
GDVIRTUAL_BIND ( _get_format_version )
2021-11-14 14:02:38 -03:00
GDVIRTUAL_BIND ( _get_option_visibility , " path " , " option_name " , " options " )
2021-08-21 22:52:44 -03:00
GDVIRTUAL_BIND ( _import , " source_file " , " save_path " , " options " , " platform_variants " , " gen_files " ) ;
2024-01-09 13:03:45 +01:00
GDVIRTUAL_BIND ( _can_import_threaded ) ;
2023-02-02 13:41:04 -08:00
ClassDB : : bind_method ( D_METHOD ( " append_import_external_resource " , " path " , " custom_options " , " custom_importer " , " generator_parameters " ) , & EditorImportPlugin : : _append_import_external_resource , DEFVAL ( Dictionary ( ) ) , DEFVAL ( String ( ) ) , DEFVAL ( Variant ( ) ) ) ;
2017-04-09 00:37:31 +02:00
}