diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-01-18 11:41:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-18 11:41:57 +0100 |
commit | 0dfe0d01669d3f281ec02e136676079016c0424c (patch) | |
tree | ee5c7ef4312eb13daaf2fbb6f23a7a514b7c194a | |
parent | cb15429e4a2cf0682acd626e7ecf703c2a159460 (diff) | |
parent | d4e1dfe5dce4364baeb1781b0534909e1d895024 (diff) | |
download | redot-cpp-0dfe0d01669d3f281ec02e136676079016c0424c.tar.gz |
Merge pull request #983 from rburing/variant_to_from_objectid
Add conversions between `Variant` and `ObjectID`
-rw-r--r-- | include/godot_cpp/variant/variant.hpp | 4 | ||||
-rw-r--r-- | src/variant/variant.cpp | 19 |
2 files changed, 23 insertions, 0 deletions
diff --git a/include/godot_cpp/variant/variant.hpp b/include/godot_cpp/variant/variant.hpp index 2aa54a2..b131d74 100644 --- a/include/godot_cpp/variant/variant.hpp +++ b/include/godot_cpp/variant/variant.hpp @@ -42,6 +42,8 @@ namespace godot { +class ObjectID; + class Variant { uint8_t opaque[GODOT_CPP_VARIANT_SIZE]{ 0 }; @@ -187,6 +189,7 @@ public: Variant(const StringName &v); Variant(const NodePath &v); Variant(const godot::RID &v); + Variant(const ObjectID &v); Variant(const Object *v); Variant(const Callable &v); Variant(const Signal &v); @@ -230,6 +233,7 @@ public: operator StringName() const; operator NodePath() const; operator godot::RID() const; + operator ObjectID() const; operator Object *() const; operator Callable() const; operator Signal() const; diff --git a/src/variant/variant.cpp b/src/variant/variant.cpp index 7fa8c24..4026637 100644 --- a/src/variant/variant.cpp +++ b/src/variant/variant.cpp @@ -191,6 +191,10 @@ Variant::Variant(const Object *v) { } } +Variant::Variant(const ObjectID &p_id) : + Variant(p_id.operator uint64_t()) { +} + Variant::Variant(const Callable &v) { from_type_constructor[CALLABLE](_native_ptr(), v._native_ptr()); } @@ -410,6 +414,21 @@ Variant::operator Object *() const { return reinterpret_cast<Object *>(internal::gde_interface->object_get_instance_binding(obj, internal::token, &Object::___binding_callbacks)); } +Variant::operator ObjectID() const { + if (get_type() == Type::INT) { + return ObjectID(operator uint64_t()); + } else if (get_type() == Type::OBJECT) { + Object *obj = operator Object *(); + if (obj != nullptr) { + return ObjectID(obj->get_instance_id()); + } else { + return ObjectID(); + } + } else { + return ObjectID(); + } +} + Variant::operator Callable() const { Callable result; to_type_constructor[CALLABLE](result._native_ptr(), _native_ptr()); |