Fix `Resource::duplicate()` missing packed arrays

This commit is contained in:
Adam Scott 2023-01-21 14:18:57 -05:00
parent a3dae9e548
commit bfffb8f254
1 changed files with 28 additions and 8 deletions

View File

@ -260,9 +260,23 @@ Ref<Resource> Resource::duplicate(bool p_subresources) const {
} }
Variant p = get(E.name); Variant p = get(E.name);
if ((p.get_type() == Variant::DICTIONARY || p.get_type() == Variant::ARRAY)) { switch (p.get_type()) {
case Variant::Type::DICTIONARY:
case Variant::Type::ARRAY:
case Variant::Type::PACKED_BYTE_ARRAY:
case Variant::Type::PACKED_COLOR_ARRAY:
case Variant::Type::PACKED_INT32_ARRAY:
case Variant::Type::PACKED_INT64_ARRAY:
case Variant::Type::PACKED_FLOAT32_ARRAY:
case Variant::Type::PACKED_FLOAT64_ARRAY:
case Variant::Type::PACKED_STRING_ARRAY:
case Variant::Type::PACKED_VECTOR2_ARRAY:
case Variant::Type::PACKED_VECTOR3_ARRAY: {
r->set(E.name, p.duplicate(p_subresources)); r->set(E.name, p.duplicate(p_subresources));
} else if (p.get_type() == Variant::OBJECT && !(E.usage & PROPERTY_USAGE_NEVER_DUPLICATE) && (p_subresources || (E.usage & PROPERTY_USAGE_ALWAYS_DUPLICATE))) { } break;
case Variant::Type::OBJECT: {
if (!(E.usage & PROPERTY_USAGE_NEVER_DUPLICATE) && (p_subresources || (E.usage & PROPERTY_USAGE_ALWAYS_DUPLICATE))) {
Ref<Resource> sr = p; Ref<Resource> sr = p;
if (sr.is_valid()) { if (sr.is_valid()) {
r->set(E.name, sr->duplicate(p_subresources)); r->set(E.name, sr->duplicate(p_subresources));
@ -270,6 +284,12 @@ Ref<Resource> Resource::duplicate(bool p_subresources) const {
} else { } else {
r->set(E.name, p); r->set(E.name, p);
} }
} break;
default: {
r->set(E.name, p);
}
}
} }
return r; return r;