Skip to content

Commit 6250c3f

Browse files
committed
Add support for adding/removing editor plugins
1 parent 2e45bd8 commit 6250c3f

File tree

4 files changed

+44
-0
lines changed

4 files changed

+44
-0
lines changed

binding_generator.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,24 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
13821382
result.append("};")
13831383
result.append("")
13841384

1385+
if class_name == "EditorPlugin":
1386+
result.append("class EditorPlugins {")
1387+
result.append("public:")
1388+
result.append("")
1389+
1390+
result.append("\ttemplate <class T>")
1391+
result.append("\tstatic void add_by_type() {")
1392+
result.append("\t\tinternal::gdextension_interface_editor_add_plugin(T::get_class_static()._native_ptr());")
1393+
result.append("\t}")
1394+
1395+
result.append("\ttemplate <class T>")
1396+
result.append("\tstatic void remove_by_type() {")
1397+
result.append("\t\tinternal::gdextension_interface_editor_remove_plugin(T::get_class_static()._native_ptr());")
1398+
result.append("\t}")
1399+
1400+
result.append("};")
1401+
result.append("")
1402+
13851403
result.append("} // namespace godot")
13861404
result.append("")
13871405

gdextension/gdextension_interface.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2119,6 +2119,26 @@ typedef void (*GDExtensionInterfaceClassdbUnregisterExtensionClass)(GDExtensionC
21192119
*/
21202120
typedef void (*GDExtensionInterfaceGetLibraryPath)(GDExtensionClassLibraryPtr p_library, GDExtensionStringPtr r_path);
21212121

2122+
/**
2123+
* @name editor_add_plugin
2124+
*
2125+
* Adds an editor plugin.
2126+
*
2127+
* It's safe to call during initialization.
2128+
*
2129+
* @param p_class_name A pointer to a StringName with the name of a class (descending from EditorPlugin) which is already registered with ClassDB.
2130+
*/
2131+
typedef void (*GDExtensionInterfaceEditorAddPlugin)(GDExtensionConstStringNamePtr p_class_name);
2132+
2133+
/**
2134+
* @name editor_remove_plugin
2135+
*
2136+
* Removes an editor plugin.
2137+
*
2138+
* @param p_class_name A pointer to a StringName with the name of a class that was previously added as an editor plugin.
2139+
*/
2140+
typedef void (*GDExtensionInterfaceEditorRemovePlugin)(GDExtensionConstStringNamePtr p_class_name);
2141+
21222142
#ifdef __cplusplus
21232143
}
21242144
#endif

include/godot_cpp/godot.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ extern "C" GDExtensionInterfaceClassdbRegisterExtensionClassPropertySubgroup gde
178178
extern "C" GDExtensionInterfaceClassdbRegisterExtensionClassSignal gdextension_interface_classdb_register_extension_class_signal;
179179
extern "C" GDExtensionInterfaceClassdbUnregisterExtensionClass gdextension_interface_classdb_unregister_extension_class;
180180
extern "C" GDExtensionInterfaceGetLibraryPath gdextension_interface_get_library_path;
181+
extern "C" GDExtensionInterfaceEditorAddPlugin gdextension_interface_editor_add_plugin;
182+
extern "C" GDExtensionInterfaceEditorRemovePlugin gdextension_interface_editor_remove_plugin;
181183

182184
} // namespace internal
183185

src/godot.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ GDExtensionInterfaceClassdbRegisterExtensionClassPropertySubgroup gdextension_in
182182
GDExtensionInterfaceClassdbRegisterExtensionClassSignal gdextension_interface_classdb_register_extension_class_signal = nullptr;
183183
GDExtensionInterfaceClassdbUnregisterExtensionClass gdextension_interface_classdb_unregister_extension_class = nullptr;
184184
GDExtensionInterfaceGetLibraryPath gdextension_interface_get_library_path = nullptr;
185+
GDExtensionInterfaceEditorAddPlugin gdextension_interface_editor_add_plugin = nullptr;
186+
GDExtensionInterfaceEditorRemovePlugin gdextension_interface_editor_remove_plugin = nullptr;
185187

186188
} // namespace internal
187189

@@ -362,6 +364,8 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
362364
LOAD_PROC_ADDRESS(classdb_register_extension_class_signal, GDExtensionInterfaceClassdbRegisterExtensionClassSignal);
363365
LOAD_PROC_ADDRESS(classdb_unregister_extension_class, GDExtensionInterfaceClassdbUnregisterExtensionClass);
364366
LOAD_PROC_ADDRESS(get_library_path, GDExtensionInterfaceGetLibraryPath);
367+
LOAD_PROC_ADDRESS(editor_add_plugin, GDExtensionInterfaceEditorAddPlugin);
368+
LOAD_PROC_ADDRESS(editor_remove_plugin, GDExtensionInterfaceEditorRemovePlugin);
365369

366370
// Load the Godot version.
367371
internal::gdextension_interface_get_godot_version(&internal::godot_version);

0 commit comments

Comments
 (0)