Merge pull request #1138 from dsnopek/editor-plugins-deinitialize

Automatically remove editor plugins when deinitializing GDExtension
This commit is contained in:
Rémi Verschelde
2023-06-19 10:43:34 +02:00
3 changed files with 74 additions and 2 deletions

View File

@@ -1236,6 +1236,9 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
else:
result.append(f"#include <godot_cpp/{get_include_path(included)}>")
if class_name == "EditorPlugin":
result.append("#include <godot_cpp/templates/vector.hpp>")
if len(fully_used_classes) > 0:
result.append("")
@@ -1385,17 +1388,23 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
if class_name == "EditorPlugin":
result.append("class EditorPlugins {")
result.append("private:")
result.append("\tstatic Vector<StringName> plugin_classes;")
result.append("")
result.append("public:")
result.append("\tstatic void add_plugin_class(const StringName &p_class_name);")
result.append("\tstatic void remove_plugin_class(const StringName &p_class_name);")
result.append("\tstatic void deinitialize(GDExtensionInitializationLevel p_level);")
result.append("")
result.append("\ttemplate <class T>")
result.append("\tstatic void add_by_type() {")
result.append("\t\tinternal::gdextension_interface_editor_add_plugin(T::get_class_static()._native_ptr());")
result.append("\t\tadd_plugin_class(T::get_class_static());")
result.append("\t}")
result.append("\ttemplate <class T>")
result.append("\tstatic void remove_by_type() {")
result.append("\t\tinternal::gdextension_interface_editor_remove_plugin(T::get_class_static()._native_ptr());")
result.append("\t\tremove_plugin_class(T::get_class_static());")
result.append("\t}")
result.append("};")