1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-10 13:00:37 +00:00

Add support for Vector2i, Rect2i and Vector3i to Variant

WARNING: Requires C++17 'guaranteed copy elision' to fix ambiguous
operator problems in Variant.

This was added for this commit (and future C++17 uses) in #36457.
This commit is contained in:
Juan Linietsky
2020-02-22 00:26:41 -03:00
committed by Juan Linietsky
parent a7891b9d12
commit 6da0eef9e6
11 changed files with 1026 additions and 10 deletions

View File

@@ -76,6 +76,9 @@ enum {
VARIANT_CALLABLE = 42,
VARIANT_SIGNAL = 43,
VARIANT_STRING_NAME = 44,
VARIANT_VECTOR2I = 45,
VARIANT_RECT2I = 46,
VARIANT_VECTOR3I = 47,
OBJECT_EMPTY = 0,
OBJECT_EXTERNAL_RESOURCE = 1,
OBJECT_INTERNAL_RESOURCE = 2,
@@ -158,6 +161,14 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
v.y = f->get_real();
r_v = v;
} break;
case VARIANT_VECTOR2I: {
Vector2i v;
v.x = f->get_32();
v.y = f->get_32();
r_v = v;
} break;
case VARIANT_RECT2: {
@@ -168,6 +179,16 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
v.size.y = f->get_real();
r_v = v;
} break;
case VARIANT_RECT2I: {
Rect2i v;
v.position.x = f->get_32();
v.position.y = f->get_32();
v.size.x = f->get_32();
v.size.y = f->get_32();
r_v = v;
} break;
case VARIANT_VECTOR3: {
@@ -177,6 +198,14 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
v.z = f->get_real();
r_v = v;
} break;
case VARIANT_VECTOR3I: {
Vector3i v;
v.x = f->get_32();
v.y = f->get_32();
v.z = f->get_32();
r_v = v;
} break;
case VARIANT_PLANE: {
Plane v;
@@ -1292,6 +1321,14 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
f->store_real(val.x);
f->store_real(val.y);
} break;
case Variant::VECTOR2I: {
f->store_32(VARIANT_VECTOR2I);
Vector2i val = p_property;
f->store_32(val.x);
f->store_32(val.y);
} break;
case Variant::RECT2: {
@@ -1302,6 +1339,16 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
f->store_real(val.size.x);
f->store_real(val.size.y);
} break;
case Variant::RECT2I: {
f->store_32(VARIANT_RECT2I);
Rect2i val = p_property;
f->store_32(val.position.x);
f->store_32(val.position.y);
f->store_32(val.size.x);
f->store_32(val.size.y);
} break;
case Variant::VECTOR3: {
@@ -1311,6 +1358,15 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
f->store_real(val.y);
f->store_real(val.z);
} break;
case Variant::VECTOR3I: {
f->store_32(VARIANT_VECTOR3I);
Vector3i val = p_property;
f->store_32(val.x);
f->store_32(val.y);
f->store_32(val.z);
} break;
case Variant::PLANE: {