From 7a909896f73cf7ed81ba39028b75315ecf851628 Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Fri, 13 Sep 2024 13:05:20 -0700 Subject: [PATCH] Expose `get_export_option_visibility` to editor plugins --- doc/classes/EditorExportPlugin.xml | 9 +++++++++ editor/export/editor_export_plugin.cpp | 7 +++++++ editor/export/editor_export_plugin.h | 2 ++ editor/export/editor_export_preset.cpp | 25 +++++++++++++++++++++++-- 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/doc/classes/EditorExportPlugin.xml b/doc/classes/EditorExportPlugin.xml index 42e1968eb03..aa8e4b3d56c 100644 --- a/doc/classes/EditorExportPlugin.xml +++ b/doc/classes/EditorExportPlugin.xml @@ -159,6 +159,15 @@ Return a [PackedStringArray] of additional features this preset, for the given [param platform], should have. + + + + + + [b]Optional.[/b] + Validates [param option] and returns the visibility for the specified [param platform]. The default implementation returns [code]true[/code] for all options. + + diff --git a/editor/export/editor_export_plugin.cpp b/editor/export/editor_export_plugin.cpp index 5945c024135..999216b4951 100644 --- a/editor/export/editor_export_plugin.cpp +++ b/editor/export/editor_export_plugin.cpp @@ -295,6 +295,12 @@ bool EditorExportPlugin::_should_update_export_options(const Ref &p_export_platform, const String &p_option_name) const { + bool ret = true; + GDVIRTUAL_CALL(_get_export_option_visibility, p_export_platform, p_option_name, ret); + return ret; +} + String EditorExportPlugin::_get_export_option_warning(const Ref &p_export_platform, const String &p_option_name) const { String ret; GDVIRTUAL_CALL(_get_export_option_warning, p_export_platform, p_option_name, ret); @@ -354,6 +360,7 @@ void EditorExportPlugin::_bind_methods() { GDVIRTUAL_BIND(_get_export_options, "platform"); GDVIRTUAL_BIND(_get_export_options_overrides, "platform"); GDVIRTUAL_BIND(_should_update_export_options, "platform"); + GDVIRTUAL_BIND(_get_export_option_visibility, "platform", "option"); GDVIRTUAL_BIND(_get_export_option_warning, "platform", "option"); GDVIRTUAL_BIND(_get_export_features, "platform", "debug"); diff --git a/editor/export/editor_export_plugin.h b/editor/export/editor_export_plugin.h index 4c0107af721..db11d25f7dc 100644 --- a/editor/export/editor_export_plugin.h +++ b/editor/export/editor_export_plugin.h @@ -132,6 +132,7 @@ protected: GDVIRTUAL1RC(TypedArray, _get_export_options, const Ref &); GDVIRTUAL1RC(Dictionary, _get_export_options_overrides, const Ref &); GDVIRTUAL1RC(bool, _should_update_export_options, const Ref &); + GDVIRTUAL2RC(bool, _get_export_option_visibility, const Ref &, String); GDVIRTUAL2RC(String, _get_export_option_warning, const Ref &, String); GDVIRTUAL0RC(String, _get_name) @@ -160,6 +161,7 @@ protected: virtual void _get_export_options(const Ref &p_export_platform, List *r_options) const; virtual Dictionary _get_export_options_overrides(const Ref &p_export_platform) const; virtual bool _should_update_export_options(const Ref &p_export_platform) const; + virtual bool _get_export_option_visibility(const Ref &p_export_platform, const String &p_option_name) const; virtual String _get_export_option_warning(const Ref &p_export_platform, const String &p_option_name) const; public: diff --git a/editor/export/editor_export_preset.cpp b/editor/export/editor_export_preset.cpp index 9f805666d0a..2a468139d45 100644 --- a/editor/export/editor_export_preset.cpp +++ b/editor/export/editor_export_preset.cpp @@ -135,8 +135,29 @@ String EditorExportPreset::_get_property_warning(const StringName &p_name) const void EditorExportPreset::_get_property_list(List *p_list) const { for (const KeyValue &E : properties) { - if (!value_overrides.has(E.key) && platform->get_export_option_visibility(this, E.key)) { - p_list->push_back(E.value); + if (!value_overrides.has(E.key)) { + bool property_visible = platform->get_export_option_visibility(this, E.key); + if (!property_visible) { + continue; + } + + // Get option visibility from editor export plugins. + Vector> export_plugins = EditorExport::get_singleton()->get_export_plugins(); + for (int i = 0; i < export_plugins.size(); i++) { + if (!export_plugins[i]->supports_platform(platform)) { + continue; + } + + export_plugins.write[i]->set_export_preset(Ref(this)); + property_visible = export_plugins[i]->_get_export_option_visibility(platform, E.key); + if (!property_visible) { + break; + } + } + + if (property_visible) { + p_list->push_back(E.value); + } } } }