summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Buring <ricardo.buring@gmail.com>2023-01-01 21:27:08 +0100
committerRicardo Buring <ricardo.buring@gmail.com>2023-01-01 21:27:08 +0100
commitd4e1dfe5dce4364baeb1781b0534909e1d895024 (patch)
tree0d515f31ce923ff0353b386739a6a0eb99d4779d
parent3da6db4fe41b8f3d3aaeb0dc80f1556f83fd7fe6 (diff)
downloadredot-cpp-d4e1dfe5dce4364baeb1781b0534909e1d895024.tar.gz
Add conversions between Variant and ObjectID
-rw-r--r--include/godot_cpp/variant/variant.hpp4
-rw-r--r--src/variant/variant.cpp19
2 files changed, 23 insertions, 0 deletions
diff --git a/include/godot_cpp/variant/variant.hpp b/include/godot_cpp/variant/variant.hpp
index 3d91a0a..6d26501 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 21b17b3..9d3bae5 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());