|
@@ -104,7 +104,7 @@ public:
|
|
|
init_color_array(v);
|
|
|
break;
|
|
|
case Variant::OBJECT:
|
|
|
- object_assign_null(v);
|
|
|
+ init_object(v);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -280,6 +280,10 @@ public:
|
|
|
v->_data.packed_array = Variant::PackedArrayRef<Color>::create(Vector<Color>());
|
|
|
v->type = Variant::PACKED_COLOR_ARRAY;
|
|
|
}
|
|
|
+ _FORCE_INLINE_ static void init_object(Variant *v) {
|
|
|
+ object_assign_null(v);
|
|
|
+ v->type = Variant::OBJECT;
|
|
|
+ }
|
|
|
|
|
|
_FORCE_INLINE_ static void clear(Variant *v) {
|
|
|
v->clear();
|
|
@@ -1173,7 +1177,7 @@ struct VariantInitializer<PackedColorArray> {
|
|
|
|
|
|
template <>
|
|
|
struct VariantInitializer<Object *> {
|
|
|
- static _FORCE_INLINE_ void init(Variant *v) { VariantInternal::object_assign_null(v); }
|
|
|
+ static _FORCE_INLINE_ void init(Variant *v) { VariantInternal::init_object(v); }
|
|
|
};
|
|
|
|
|
|
template <class T>
|
|
@@ -1405,4 +1409,22 @@ struct VariantTypeConstructor {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+template <>
|
|
|
+struct VariantTypeConstructor<Object *> {
|
|
|
+ _FORCE_INLINE_ static void variant_from_type(void *p_variant, void *p_value) {
|
|
|
+ Variant *variant = reinterpret_cast<Variant *>(p_variant);
|
|
|
+ VariantInitializer<Object *>::init(variant);
|
|
|
+ Object *value = *(reinterpret_cast<Object **>(p_value));
|
|
|
+ if (value) {
|
|
|
+ VariantInternalAccessor<Object *>::set(variant, value);
|
|
|
+ VariantInternalAccessor<ObjectID>::set(variant, value->get_instance_id());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _FORCE_INLINE_ static void type_from_variant(void *p_value, void *p_variant) {
|
|
|
+ Object **value = reinterpret_cast<Object **>(p_value);
|
|
|
+ *value = VariantInternalAccessor<Object *>::get(reinterpret_cast<Variant *>(p_variant));
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
#endif // VARIANT_INTERNAL_H
|