Merge pull request #97119 from dsnopek/gdextension-object-instance-id
GDExtension: Allow directly getting `ObjectID` from `Variant`
This commit is contained in:
commit
4dd812f2ed
2 changed files with 24 additions and 0 deletions
|
@ -507,6 +507,14 @@ static GDExtensionBool gdextension_variant_has_key(GDExtensionConstVariantPtr p_
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GDObjectInstanceID gdextension_variant_get_object_instance_id(GDExtensionConstVariantPtr p_self) {
|
||||||
|
const Variant *self = (const Variant *)p_self;
|
||||||
|
if (likely(self->get_type() == Variant::OBJECT)) {
|
||||||
|
return self->operator ObjectID();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void gdextension_variant_get_type_name(GDExtensionVariantType p_type, GDExtensionUninitializedVariantPtr r_ret) {
|
static void gdextension_variant_get_type_name(GDExtensionVariantType p_type, GDExtensionUninitializedVariantPtr r_ret) {
|
||||||
String name = Variant::get_type_name((Variant::Type)p_type);
|
String name = Variant::get_type_name((Variant::Type)p_type);
|
||||||
memnew_placement(r_ret, String(name));
|
memnew_placement(r_ret, String(name));
|
||||||
|
@ -1610,6 +1618,7 @@ void gdextension_setup_interface() {
|
||||||
REGISTER_INTERFACE_FUNC(variant_has_method);
|
REGISTER_INTERFACE_FUNC(variant_has_method);
|
||||||
REGISTER_INTERFACE_FUNC(variant_has_member);
|
REGISTER_INTERFACE_FUNC(variant_has_member);
|
||||||
REGISTER_INTERFACE_FUNC(variant_has_key);
|
REGISTER_INTERFACE_FUNC(variant_has_key);
|
||||||
|
REGISTER_INTERFACE_FUNC(variant_get_object_instance_id);
|
||||||
REGISTER_INTERFACE_FUNC(variant_get_type_name);
|
REGISTER_INTERFACE_FUNC(variant_get_type_name);
|
||||||
REGISTER_INTERFACE_FUNC(variant_can_convert);
|
REGISTER_INTERFACE_FUNC(variant_can_convert);
|
||||||
REGISTER_INTERFACE_FUNC(variant_can_convert_strict);
|
REGISTER_INTERFACE_FUNC(variant_can_convert_strict);
|
||||||
|
|
|
@ -1307,6 +1307,21 @@ typedef GDExtensionBool (*GDExtensionInterfaceVariantHasMember)(GDExtensionVaria
|
||||||
*/
|
*/
|
||||||
typedef GDExtensionBool (*GDExtensionInterfaceVariantHasKey)(GDExtensionConstVariantPtr p_self, GDExtensionConstVariantPtr p_key, GDExtensionBool *r_valid);
|
typedef GDExtensionBool (*GDExtensionInterfaceVariantHasKey)(GDExtensionConstVariantPtr p_self, GDExtensionConstVariantPtr p_key, GDExtensionBool *r_valid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name variant_get_object_instance_id
|
||||||
|
* @since 4.4
|
||||||
|
*
|
||||||
|
* Gets the object instance ID from a variant of type GDEXTENSION_VARIANT_TYPE_OBJECT.
|
||||||
|
*
|
||||||
|
* If the variant isn't of type GDEXTENSION_VARIANT_TYPE_OBJECT, then zero will be returned.
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* @param p_self A pointer to the Variant.
|
||||||
|
*
|
||||||
|
* @return The instance ID for the contained object.
|
||||||
|
*/
|
||||||
|
typedef GDObjectInstanceID (*GDExtensionInterfaceVariantGetObjectInstanceId)(GDExtensionConstVariantPtr p_self);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name variant_get_type_name
|
* @name variant_get_type_name
|
||||||
* @since 4.1
|
* @since 4.1
|
||||||
|
|
Loading…
Reference in a new issue