summaryrefslogtreecommitdiffstats
path: root/core/extension/gdextension_interface.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-05-22 14:02:59 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-05-22 14:02:59 +0200
commit80bf8fd186fad181bcafccf0b4ad15ff70752ed5 (patch)
treebdfd66318101cae65adfd6fb044c633bfccf9931 /core/extension/gdextension_interface.cpp
parentb85269cd8b6c0b8c4b3bf6d1255f79b6cac04ec2 (diff)
parentc6b0d4aae3bdd41e8bd45de03c83609892c6cb41 (diff)
downloadredot-engine-80bf8fd186fad181bcafccf0b4ad15ff70752ed5.tar.gz
Merge pull request #73511 from dsnopek/gdextension-object-name
Add GDExtension function to get Object class name
Diffstat (limited to 'core/extension/gdextension_interface.cpp')
-rw-r--r--core/extension/gdextension_interface.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/core/extension/gdextension_interface.cpp b/core/extension/gdextension_interface.cpp
index c661bfa8c7..12ef1772e3 100644
--- a/core/extension/gdextension_interface.cpp
+++ b/core/extension/gdextension_interface.cpp
@@ -992,6 +992,19 @@ static GDExtensionObjectPtr gdextension_object_get_instance_from_id(GDObjectInst
return (GDExtensionObjectPtr)ObjectDB::get_instance(ObjectID(p_instance_id));
}
+static GDExtensionBool gdextension_object_get_class_name(GDExtensionConstObjectPtr p_object, GDExtensionClassLibraryPtr p_library, GDExtensionUninitializedStringNamePtr r_class_name) {
+ if (!p_object) {
+ return false;
+ }
+ const Object *o = (const Object *)p_object;
+
+ memnew_placement(r_class_name, StringName);
+ StringName *class_name = reinterpret_cast<StringName *>(r_class_name);
+ *class_name = o->get_class_name_for_extension((GDExtension *)p_library);
+
+ return true;
+}
+
static GDExtensionObjectPtr gdextension_object_cast_to(GDExtensionConstObjectPtr p_object, void *p_class_tag) {
if (!p_object) {
return nullptr;
@@ -1176,6 +1189,7 @@ void gdextension_setup_interface() {
REGISTER_INTERFACE_FUNC(object_get_instance_binding);
REGISTER_INTERFACE_FUNC(object_set_instance_binding);
REGISTER_INTERFACE_FUNC(object_set_instance);
+ REGISTER_INTERFACE_FUNC(object_get_class_name);
REGISTER_INTERFACE_FUNC(object_cast_to);
REGISTER_INTERFACE_FUNC(object_get_instance_from_id);
REGISTER_INTERFACE_FUNC(object_get_instance_id);