From ec00283f9100c0456f09fd70edd2c6d3eb763c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 7 Feb 2022 09:38:42 +0100 Subject: [PATCH] ResourceImporter: Restore default append logic for new importers This was changed in #56943 to allow adding new importers from plugins that take precedence over built-in ones, but this should be opt-in, not the default behavior. Fixes #57730. --- core/io/resource_importer.cpp | 8 ++++++-- core/io/resource_importer.h | 2 +- doc/classes/EditorPlugin.xml | 6 ++++++ editor/editor_plugin.cpp | 19 ++++++++++--------- editor/editor_plugin.h | 6 +++--- editor/import/resource_importer_scene.cpp | 16 ++++++++++++---- editor/import/resource_importer_scene.h | 4 ++-- 7 files changed, 40 insertions(+), 21 deletions(-) diff --git a/core/io/resource_importer.cpp b/core/io/resource_importer.cpp index e167611d4a6..9b6440e2a2e 100644 --- a/core/io/resource_importer.cpp +++ b/core/io/resource_importer.cpp @@ -464,7 +464,11 @@ void ResourceImporter::_bind_methods() { BIND_ENUM_CONSTANT(IMPORT_ORDER_SCENE); } -void ResourceFormatImporter::add_importer(const Ref &p_importer) { +void ResourceFormatImporter::add_importer(const Ref &p_importer, bool p_first_priority) { ERR_FAIL_COND(p_importer.is_null()); - importers.insert(0, p_importer); + if (p_first_priority) { + importers.insert(0, p_importer); + } else { + importers.push_back(p_importer); + } } diff --git a/core/io/resource_importer.h b/core/io/resource_importer.h index f242f29ccda..2fffc16ad8d 100644 --- a/core/io/resource_importer.h +++ b/core/io/resource_importer.h @@ -80,7 +80,7 @@ public: String get_internal_resource_path(const String &p_path) const; void get_internal_resource_path_list(const String &p_path, List *r_paths); - void add_importer(const Ref &p_importer); + void add_importer(const Ref &p_importer, bool p_first_priority = false); void remove_importer(const Ref &p_importer) { importers.erase(p_importer); } Ref get_importer_by_name(const String &p_name) const; diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml index cc1243898f9..b9267bc5775 100644 --- a/doc/classes/EditorPlugin.xml +++ b/doc/classes/EditorPlugin.xml @@ -379,8 +379,10 @@ + Registers a new [EditorImportPlugin]. Import plugins are used to import custom and unsupported assets as a custom [Resource] type. + If [code]first_priority[/code] is [code]true[/code], the new import plugin is inserted first in the list and takes precedence over pre-existing plugins. [b]Note:[/b] If you want to import custom 3D asset formats use [method add_scene_format_importer_plugin] instead. See [method add_inspector_plugin] for an example of how to register a plugin. @@ -408,15 +410,19 @@ + Registers a new [EditorSceneFormatImporter]. Scene importers are used to import custom 3D asset formats as scenes. + If [code]first_priority[/code] is [code]true[/code], the new import plugin is inserted first in the list and takes precedence over pre-existing plugins. + Add a [EditorScenePostImportPlugin]. These plugins allow customizing the import process of 3D assets by adding new options to the import dialogs. + If [code]first_priority[/code] is [code]true[/code], the new import plugin is inserted first in the list and takes precedence over pre-existing plugins. diff --git a/editor/editor_plugin.cpp b/editor/editor_plugin.cpp index a1c031aa1b3..fe44486d0df 100644 --- a/editor/editor_plugin.cpp +++ b/editor/editor_plugin.cpp @@ -717,9 +717,9 @@ void EditorPlugin::remove_translation_parser_plugin(const Refremove_parser(p_parser, EditorTranslationParser::CUSTOM); } -void EditorPlugin::add_import_plugin(const Ref &p_importer) { +void EditorPlugin::add_import_plugin(const Ref &p_importer, bool p_first_priority) { ERR_FAIL_COND(!p_importer.is_valid()); - ResourceFormatImporter::get_singleton()->add_importer(p_importer); + ResourceFormatImporter::get_singleton()->add_importer(p_importer, p_first_priority); EditorFileSystem::get_singleton()->call_deferred(SNAME("scan")); } @@ -759,9 +759,9 @@ void EditorPlugin::remove_inspector_plugin(const Ref &p_p EditorInspector::remove_inspector_plugin(p_plugin); } -void EditorPlugin::add_scene_format_importer_plugin(const Ref &p_importer) { +void EditorPlugin::add_scene_format_importer_plugin(const Ref &p_importer, bool p_first_priority) { ERR_FAIL_COND(!p_importer.is_valid()); - ResourceImporterScene::get_singleton()->add_importer(p_importer); + ResourceImporterScene::get_singleton()->add_importer(p_importer, p_first_priority); } void EditorPlugin::remove_scene_format_importer_plugin(const Ref &p_importer) { @@ -769,9 +769,10 @@ void EditorPlugin::remove_scene_format_importer_plugin(const Refremove_importer(p_importer); } -void EditorPlugin::add_scene_post_import_plugin(const Ref &p_plugin) { - ResourceImporterScene::get_singleton()->add_post_importer_plugin(p_plugin); +void EditorPlugin::add_scene_post_import_plugin(const Ref &p_plugin, bool p_first_priority) { + ResourceImporterScene::get_singleton()->add_post_importer_plugin(p_plugin, p_first_priority); } + void EditorPlugin::remove_scene_post_import_plugin(const Ref &p_plugin) { ResourceImporterScene::get_singleton()->remove_post_importer_plugin(p_plugin); } @@ -881,11 +882,11 @@ void EditorPlugin::_bind_methods() { ClassDB::bind_method(D_METHOD("queue_save_layout"), &EditorPlugin::queue_save_layout); ClassDB::bind_method(D_METHOD("add_translation_parser_plugin", "parser"), &EditorPlugin::add_translation_parser_plugin); ClassDB::bind_method(D_METHOD("remove_translation_parser_plugin", "parser"), &EditorPlugin::remove_translation_parser_plugin); - ClassDB::bind_method(D_METHOD("add_import_plugin", "importer"), &EditorPlugin::add_import_plugin); + ClassDB::bind_method(D_METHOD("add_import_plugin", "importer", "first_priority"), &EditorPlugin::add_import_plugin, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_import_plugin", "importer"), &EditorPlugin::remove_import_plugin); - ClassDB::bind_method(D_METHOD("add_scene_format_importer_plugin", "scene_format_importer"), &EditorPlugin::add_scene_format_importer_plugin); + ClassDB::bind_method(D_METHOD("add_scene_format_importer_plugin", "scene_format_importer", "first_priority"), &EditorPlugin::add_scene_format_importer_plugin, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_scene_format_importer_plugin", "scene_format_importer"), &EditorPlugin::remove_scene_format_importer_plugin); - ClassDB::bind_method(D_METHOD("add_scene_post_import_plugin", "scene_import_plugin"), &EditorPlugin::add_scene_post_import_plugin); + ClassDB::bind_method(D_METHOD("add_scene_post_import_plugin", "scene_import_plugin", "first_priority"), &EditorPlugin::add_scene_post_import_plugin, DEFVAL(false)); ClassDB::bind_method(D_METHOD("remove_scene_post_import_plugin", "scene_import_plugin"), &EditorPlugin::remove_scene_post_import_plugin); ClassDB::bind_method(D_METHOD("add_export_plugin", "plugin"), &EditorPlugin::add_export_plugin); ClassDB::bind_method(D_METHOD("remove_export_plugin", "plugin"), &EditorPlugin::remove_export_plugin); diff --git a/editor/editor_plugin.h b/editor/editor_plugin.h index 06517190f6e..f23c5f40f65 100644 --- a/editor/editor_plugin.h +++ b/editor/editor_plugin.h @@ -278,7 +278,7 @@ public: void add_translation_parser_plugin(const Ref &p_parser); void remove_translation_parser_plugin(const Ref &p_parser); - void add_import_plugin(const Ref &p_importer); + void add_import_plugin(const Ref &p_importer, bool p_first_priority = false); void remove_import_plugin(const Ref &p_importer); void add_export_plugin(const Ref &p_exporter); @@ -290,10 +290,10 @@ public: void add_inspector_plugin(const Ref &p_plugin); void remove_inspector_plugin(const Ref &p_plugin); - void add_scene_format_importer_plugin(const Ref &p_importer); + void add_scene_format_importer_plugin(const Ref &p_importer, bool p_first_priority = false); void remove_scene_format_importer_plugin(const Ref &p_importer); - void add_scene_post_import_plugin(const Ref &p_importer); + void add_scene_post_import_plugin(const Ref &p_importer, bool p_first_priority = false); void remove_scene_post_import_plugin(const Ref &p_importer); void add_autoload_singleton(const String &p_name, const String &p_path); diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 5d356604f41..22a11e11cbd 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -2088,18 +2088,26 @@ ResourceImporterScene::ResourceImporterScene() { singleton = this; } -void ResourceImporterScene::add_importer(Ref p_importer) { +void ResourceImporterScene::add_importer(Ref p_importer, bool p_first_priority) { ERR_FAIL_COND(p_importer.is_null()); - importers.insert(0, p_importer); + if (p_first_priority) { + importers.insert(0, p_importer); + } else { + importers.push_back(p_importer); + } } void ResourceImporterScene::remove_post_importer_plugin(const Ref &p_plugin) { post_importer_plugins.erase(p_plugin); } -void ResourceImporterScene::add_post_importer_plugin(const Ref &p_plugin) { +void ResourceImporterScene::add_post_importer_plugin(const Ref &p_plugin, bool p_first_priority) { ERR_FAIL_COND(p_plugin.is_null()); - post_importer_plugins.insert(0, p_plugin); + if (p_first_priority) { + post_importer_plugins.insert(0, p_plugin); + } else { + post_importer_plugins.push_back(p_plugin); + } } void ResourceImporterScene::remove_importer(Ref p_importer) { diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h index a3aeac40227..04fcc4268b1 100644 --- a/editor/import/resource_importer_scene.h +++ b/editor/import/resource_importer_scene.h @@ -224,12 +224,12 @@ class ResourceImporterScene : public ResourceImporter { public: static ResourceImporterScene *get_singleton() { return singleton; } - void add_post_importer_plugin(const Ref &p_plugin); + void add_post_importer_plugin(const Ref &p_plugin, bool p_first_priority = false); void remove_post_importer_plugin(const Ref &p_plugin); const Vector> &get_importers() const { return importers; } - void add_importer(Ref p_importer); + void add_importer(Ref p_importer, bool p_first_priority = false); void remove_importer(Ref p_importer); virtual String get_importer_name() const override;