summaryrefslogtreecommitdiffstats
path: root/core/extension/gdextension.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-02-12 23:29:37 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-02-12 23:29:37 +0100
commit306dd5be3fe8887124be9ebce470090240c5f757 (patch)
tree8a510ffda0e85b2148ae5bd22180cc74718d9561 /core/extension/gdextension.cpp
parent3be3d5099cc75a2db544b3a0964a430c3eb00909 (diff)
parentbe11002e410bbd8e01ef3e91682a94b50dba1dd8 (diff)
downloadredot-engine-306dd5be3fe8887124be9ebce470090240c5f757.tar.gz
Merge pull request #87758 from dsnopek/gdextension-register-virtual-method
Allow GDExtensions to register virtual methods and call them on scripts
Diffstat (limited to 'core/extension/gdextension.cpp')
-rw-r--r--core/extension/gdextension.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/core/extension/gdextension.cpp b/core/extension/gdextension.cpp
index aba96befd6..53007bf5bf 100644
--- a/core/extension/gdextension.cpp
+++ b/core/extension/gdextension.cpp
@@ -518,6 +518,12 @@ void GDExtension::_register_extension_class_method(GDExtensionClassLibraryPtr p_
ClassDB::bind_method_custom(class_name, method);
}
+
+void GDExtension::_register_extension_class_virtual_method(GDExtensionClassLibraryPtr p_library, GDExtensionConstStringNamePtr p_class_name, const GDExtensionClassVirtualMethodInfo *p_method_info) {
+ StringName class_name = *reinterpret_cast<const StringName *>(p_class_name);
+ ClassDB::add_extension_class_virtual_method(class_name, p_method_info);
+}
+
void GDExtension::_register_extension_class_integer_constant(GDExtensionClassLibraryPtr p_library, GDExtensionConstStringNamePtr p_class_name, GDExtensionConstStringNamePtr p_enum_name, GDExtensionConstStringNamePtr p_constant_name, GDExtensionInt p_constant_value, GDExtensionBool p_is_bitfield) {
GDExtension *self = reinterpret_cast<GDExtension *>(p_library);
@@ -837,6 +843,7 @@ void GDExtension::initialize_gdextensions() {
#endif // DISABLE_DEPRECATED
register_interface_function("classdb_register_extension_class2", (GDExtensionInterfaceFunctionPtr)&GDExtension::_register_extension_class2);
register_interface_function("classdb_register_extension_class_method", (GDExtensionInterfaceFunctionPtr)&GDExtension::_register_extension_class_method);
+ register_interface_function("classdb_register_extension_class_virtual_method", (GDExtensionInterfaceFunctionPtr)&GDExtension::_register_extension_class_virtual_method);
register_interface_function("classdb_register_extension_class_integer_constant", (GDExtensionInterfaceFunctionPtr)&GDExtension::_register_extension_class_integer_constant);
register_interface_function("classdb_register_extension_class_property", (GDExtensionInterfaceFunctionPtr)&GDExtension::_register_extension_class_property);
register_interface_function("classdb_register_extension_class_property_indexed", (GDExtensionInterfaceFunctionPtr)&GDExtension::_register_extension_class_property_indexed);