Skip to content

Commit 971e154

Browse files
committed
GDExtension: Allow directly getting ObjectID from Variant
1 parent 99a7a9c commit 971e154

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

core/extension/gdextension_interface.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,14 @@ static GDExtensionBool gdextension_variant_has_key(GDExtensionConstVariantPtr p_
507507
return ret;
508508
}
509509

510+
static GDObjectInstanceID gdextension_variant_get_object_instance_id(GDExtensionConstVariantPtr p_self) {
511+
const Variant *self = (const Variant *)p_self;
512+
if (likely(self->get_type() == Variant::OBJECT)) {
513+
return self->operator ObjectID();
514+
}
515+
return 0;
516+
}
517+
510518
static void gdextension_variant_get_type_name(GDExtensionVariantType p_type, GDExtensionUninitializedVariantPtr r_ret) {
511519
String name = Variant::get_type_name((Variant::Type)p_type);
512520
memnew_placement(r_ret, String(name));
@@ -1610,6 +1618,7 @@ void gdextension_setup_interface() {
16101618
REGISTER_INTERFACE_FUNC(variant_has_method);
16111619
REGISTER_INTERFACE_FUNC(variant_has_member);
16121620
REGISTER_INTERFACE_FUNC(variant_has_key);
1621+
REGISTER_INTERFACE_FUNC(variant_get_object_instance_id);
16131622
REGISTER_INTERFACE_FUNC(variant_get_type_name);
16141623
REGISTER_INTERFACE_FUNC(variant_can_convert);
16151624
REGISTER_INTERFACE_FUNC(variant_can_convert_strict);

core/extension/gdextension_interface.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,21 @@ typedef GDExtensionBool (*GDExtensionInterfaceVariantHasMember)(GDExtensionVaria
13071307
*/
13081308
typedef GDExtensionBool (*GDExtensionInterfaceVariantHasKey)(GDExtensionConstVariantPtr p_self, GDExtensionConstVariantPtr p_key, GDExtensionBool *r_valid);
13091309

1310+
/**
1311+
* @name variant_get_object_instance_id
1312+
* @since 4.4
1313+
*
1314+
* Gets the object instance ID from a variant of type GDEXTENSION_VARIANT_TYPE_OBJECT.
1315+
*
1316+
* If the variant isn't of type GDEXTENSION_VARIANT_TYPE_OBJECT, then zero will be returned.
1317+
* The instance ID will be returned even if the object is no longer valid - use `object_get_instance_by_id()` to check if the object is still valid.
1318+
*
1319+
* @param p_self A pointer to the Variant.
1320+
*
1321+
* @return The instance ID for the contained object.
1322+
*/
1323+
typedef GDObjectInstanceID (*GDExtensionInterfaceVariantGetObjectInstanceId)(GDExtensionConstVariantPtr p_self);
1324+
13101325
/**
13111326
* @name variant_get_type_name
13121327
* @since 4.1

0 commit comments

Comments
 (0)