diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp index d918e727558..67f2c10099e 100644 --- a/core/variant/variant.cpp +++ b/core/variant/variant.cpp @@ -1793,31 +1793,31 @@ String Variant::stringify(int recursion_count) const { } // Packed arrays cannot contain recursive structures, the recursion_count increment is not needed. case PACKED_VECTOR2_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedVector2Array(), recursion_count); } case PACKED_VECTOR3_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedVector3Array(), recursion_count); } case PACKED_COLOR_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedColorArray(), recursion_count); } case PACKED_STRING_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedStringArray(), recursion_count); } case PACKED_BYTE_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedByteArray(), recursion_count); } case PACKED_INT32_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedInt32Array(), recursion_count); } case PACKED_INT64_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedInt64Array(), recursion_count); } case PACKED_FLOAT32_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedFloat32Array(), recursion_count); } case PACKED_FLOAT64_ARRAY: { - return stringify_vector(operator Vector(), recursion_count); + return stringify_vector(operator PackedFloat64Array(), recursion_count); } case ARRAY: { ERR_FAIL_COND_V_MSG(recursion_count > MAX_RECURSION, "[...]", "Maximum array recursion reached!"); @@ -2207,31 +2207,31 @@ inline DA _convert_array_from_variant(const Variant &p_variant) { return _convert_array(p_variant.operator Array()); } case Variant::PACKED_BYTE_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedByteArray()); } case Variant::PACKED_INT32_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedInt32Array()); } case Variant::PACKED_INT64_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedInt64Array()); } case Variant::PACKED_FLOAT32_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedFloat32Array()); } case Variant::PACKED_FLOAT64_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedFloat64Array()); } case Variant::PACKED_STRING_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedStringArray()); } case Variant::PACKED_VECTOR2_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedVector2Array()); } case Variant::PACKED_VECTOR3_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedVector3Array()); } case Variant::PACKED_COLOR_ARRAY: { - return _convert_array>(p_variant.operator Vector()); + return _convert_array(p_variant.operator PackedColorArray()); } default: { return DA(); @@ -2247,75 +2247,75 @@ Variant::operator Array() const { } } -Variant::operator Vector() const { +Variant::operator PackedByteArray() const { if (type == PACKED_BYTE_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { +Variant::operator PackedInt32Array() const { if (type == PACKED_INT32_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { +Variant::operator PackedInt64Array() const { if (type == PACKED_INT64_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { +Variant::operator PackedFloat32Array() const { if (type == PACKED_FLOAT32_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { +Variant::operator PackedFloat64Array() const { if (type == PACKED_FLOAT64_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { +Variant::operator PackedStringArray() const { if (type == PACKED_STRING_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { - if (type == PACKED_VECTOR3_ARRAY) { - return static_cast *>(_data.packed_array)->array; - } else { - return _convert_array_from_variant>(*this); - } -} - -Variant::operator Vector() const { +Variant::operator PackedVector2Array() const { if (type == PACKED_VECTOR2_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } -Variant::operator Vector() const { +Variant::operator PackedVector3Array() const { + if (type == PACKED_VECTOR3_ARRAY) { + return static_cast *>(_data.packed_array)->array; + } else { + return _convert_array_from_variant(*this); + } +} + +Variant::operator PackedColorArray() const { if (type == PACKED_COLOR_ARRAY) { return static_cast *>(_data.packed_array)->array; } else { - return _convert_array_from_variant>(*this); + return _convert_array_from_variant(*this); } } @@ -2350,7 +2350,7 @@ Variant::operator Vector() const { } Variant::operator Vector() const { - Vector va = operator Vector(); + PackedVector3Array va = operator PackedVector3Array(); Vector faces; int va_size = va.size(); if (va_size == 0) { @@ -2386,7 +2386,7 @@ Variant::operator Vector() const { } Variant::operator Vector() const { - Vector from = operator Vector(); + PackedStringArray from = operator PackedStringArray(); Vector to; int len = from.size(); to.resize(len); @@ -2646,18 +2646,53 @@ Variant::Variant(const Array &p_array) { memnew_placement(_data._mem, Array(p_array)); } -Variant::Variant(const Vector &p_array) { - type = ARRAY; +Variant::Variant(const PackedByteArray &p_byte_array) { + type = PACKED_BYTE_ARRAY; - Array *plane_array = memnew_placement(_data._mem, Array); - - plane_array->resize(p_array.size()); - - for (int i = 0; i < p_array.size(); i++) { - plane_array->operator[](i) = Variant(p_array[i]); - } + _data.packed_array = PackedArrayRef::create(p_byte_array); } +Variant::Variant(const PackedInt32Array &p_int32_array) { + type = PACKED_INT32_ARRAY; + _data.packed_array = PackedArrayRef::create(p_int32_array); +} + +Variant::Variant(const PackedInt64Array &p_int64_array) { + type = PACKED_INT64_ARRAY; + _data.packed_array = PackedArrayRef::create(p_int64_array); +} + +Variant::Variant(const PackedFloat32Array &p_float32_array) { + type = PACKED_FLOAT32_ARRAY; + _data.packed_array = PackedArrayRef::create(p_float32_array); +} + +Variant::Variant(const PackedFloat64Array &p_float64_array) { + type = PACKED_FLOAT64_ARRAY; + _data.packed_array = PackedArrayRef::create(p_float64_array); +} + +Variant::Variant(const PackedStringArray &p_string_array) { + type = PACKED_STRING_ARRAY; + _data.packed_array = PackedArrayRef::create(p_string_array); +} + +Variant::Variant(const PackedVector2Array &p_vector2_array) { + type = PACKED_VECTOR2_ARRAY; + _data.packed_array = PackedArrayRef::create(p_vector2_array); +} + +Variant::Variant(const PackedVector3Array &p_vector3_array) { + type = PACKED_VECTOR3_ARRAY; + _data.packed_array = PackedArrayRef::create(p_vector3_array); +} + +Variant::Variant(const PackedColorArray &p_color_array) { + type = PACKED_COLOR_ARRAY; + _data.packed_array = PackedArrayRef::create(p_color_array); +} + +/* helpers */ Variant::Variant(const Vector<::RID> &p_array) { type = ARRAY; @@ -2670,54 +2705,20 @@ Variant::Variant(const Vector<::RID> &p_array) { } } -Variant::Variant(const Vector &p_byte_array) { - type = PACKED_BYTE_ARRAY; +Variant::Variant(const Vector &p_array) { + type = ARRAY; - _data.packed_array = PackedArrayRef::create(p_byte_array); -} + Array *plane_array = memnew_placement(_data._mem, Array); -Variant::Variant(const Vector &p_int32_array) { - type = PACKED_INT32_ARRAY; - _data.packed_array = PackedArrayRef::create(p_int32_array); -} + plane_array->resize(p_array.size()); -Variant::Variant(const Vector &p_int64_array) { - type = PACKED_INT64_ARRAY; - _data.packed_array = PackedArrayRef::create(p_int64_array); -} - -Variant::Variant(const Vector &p_float32_array) { - type = PACKED_FLOAT32_ARRAY; - _data.packed_array = PackedArrayRef::create(p_float32_array); -} - -Variant::Variant(const Vector &p_float64_array) { - type = PACKED_FLOAT64_ARRAY; - _data.packed_array = PackedArrayRef::create(p_float64_array); -} - -Variant::Variant(const Vector &p_string_array) { - type = PACKED_STRING_ARRAY; - _data.packed_array = PackedArrayRef::create(p_string_array); -} - -Variant::Variant(const Vector &p_vector3_array) { - type = PACKED_VECTOR3_ARRAY; - _data.packed_array = PackedArrayRef::create(p_vector3_array); -} - -Variant::Variant(const Vector &p_vector2_array) { - type = PACKED_VECTOR2_ARRAY; - _data.packed_array = PackedArrayRef::create(p_vector2_array); -} - -Variant::Variant(const Vector &p_color_array) { - type = PACKED_COLOR_ARRAY; - _data.packed_array = PackedArrayRef::create(p_color_array); + for (int i = 0; i < p_array.size(); i++) { + plane_array->operator[](i) = Variant(p_array[i]); + } } Variant::Variant(const Vector &p_face_array) { - Vector vertices; + PackedVector3Array vertices; int face_count = p_face_array.size(); vertices.resize(face_count * 3); @@ -2737,7 +2738,6 @@ Variant::Variant(const Vector &p_face_array) { *this = vertices; } -/* helpers */ Variant::Variant(const Vector &p_array) { type = NIL; Array arr; @@ -2750,7 +2750,7 @@ Variant::Variant(const Vector &p_array) { Variant::Variant(const Vector &p_array) { type = NIL; - Vector v; + PackedStringArray v; int len = p_array.size(); v.resize(len); for (int i = 0; i < len; i++) { @@ -3100,7 +3100,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_BYTE_ARRAY: { - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedByteArray &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { const uint8_t *r = arr.ptr(); @@ -3111,7 +3111,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_INT32_ARRAY: { - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedInt32Array &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { const int32_t *r = arr.ptr(); @@ -3122,7 +3122,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_INT64_ARRAY: { - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedInt64Array &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { const int64_t *r = arr.ptr(); @@ -3133,7 +3133,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_FLOAT32_ARRAY: { - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedFloat32Array &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { @@ -3149,7 +3149,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_FLOAT64_ARRAY: { - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedFloat64Array &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { @@ -3166,7 +3166,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_STRING_ARRAY: { uint32_t hash = HASH_MURMUR3_SEED; - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedStringArray &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { @@ -3182,7 +3182,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_VECTOR2_ARRAY: { uint32_t hash = HASH_MURMUR3_SEED; - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedVector2Array &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { @@ -3199,7 +3199,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_VECTOR3_ARRAY: { uint32_t hash = HASH_MURMUR3_SEED; - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedVector3Array &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { @@ -3217,7 +3217,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const { } break; case PACKED_COLOR_ARRAY: { uint32_t hash = HASH_MURMUR3_SEED; - const Vector &arr = PackedArrayRef::get_array(_data.packed_array); + const PackedColorArray &arr = PackedArrayRef::get_array(_data.packed_array); int len = arr.size(); if (likely(len)) { diff --git a/core/variant/variant.h b/core/variant/variant.h index c3c87d4692a..d685444c30f 100644 --- a/core/variant/variant.h +++ b/core/variant/variant.h @@ -404,21 +404,21 @@ public: operator Dictionary() const; operator Array() const; - operator Vector() const; - operator Vector() const; - operator Vector() const; - operator Vector() const; - operator Vector() const; - operator Vector() const; - operator Vector() const; - operator Vector() const; + operator PackedByteArray() const; + operator PackedInt32Array() const; + operator PackedInt64Array() const; + operator PackedFloat32Array() const; + operator PackedFloat64Array() const; + operator PackedStringArray() const; + operator PackedVector3Array() const; + operator PackedVector2Array() const; + operator PackedColorArray() const; + + operator Vector<::RID>() const; operator Vector() const; operator Vector() const; - operator Vector() const; operator Vector() const; - operator Vector<::RID>() const; - operator Vector() const; // some core type enums to convert to operator Side() const; @@ -473,21 +473,21 @@ public: Variant(const Dictionary &p_dictionary); Variant(const Array &p_array); - Variant(const Vector &p_array); // helper - Variant(const Vector &p_byte_array); - Variant(const Vector &p_int32_array); - Variant(const Vector &p_int64_array); - Variant(const Vector &p_float32_array); - Variant(const Vector &p_float64_array); - Variant(const Vector &p_string_array); - Variant(const Vector &p_vector3_array); - Variant(const Vector &p_color_array); - Variant(const Vector &p_face_array); + Variant(const PackedByteArray &p_byte_array); + Variant(const PackedInt32Array &p_int32_array); + Variant(const PackedInt64Array &p_int64_array); + Variant(const PackedFloat32Array &p_float32_array); + Variant(const PackedFloat64Array &p_float64_array); + Variant(const PackedStringArray &p_string_array); + Variant(const PackedVector2Array &p_vector2_array); + Variant(const PackedVector3Array &p_vector3_array); + Variant(const PackedColorArray &p_color_array); + Variant(const Vector<::RID> &p_array); // helper + Variant(const Vector &p_array); // helper + Variant(const Vector &p_face_array); Variant(const Vector &p_array); Variant(const Vector &p_array); - Variant(const Vector<::RID> &p_array); // helper - Variant(const Vector &p_array); // helper Variant(const IPAddress &p_address);