diff options
author | Bojidar Marinov <bojidar.marinov.bg@gmail.com> | 2018-03-09 21:16:08 +0200 |
---|---|---|
committer | Bojidar Marinov <bojidar.marinov.bg@gmail.com> | 2018-03-13 17:18:08 +0200 |
commit | 9f6c0c6eaef754f2049ee536c5b38bfdc65fbd08 (patch) | |
tree | 823f108360644d6403500810f31d08d7d5e37160 /scene/main | |
parent | b84236944215445be191047ab628e570ffd69e99 (diff) |
Duplicate Arrays and Dictionaries when instancing scene in editor
Also, add deep (=false) parameter to Array.duplicate and Dictionary.duplicate
Fixes #13971
Diffstat (limited to 'scene/main')
-rw-r--r-- | scene/main/node.cpp | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/scene/main/node.cpp b/scene/main/node.cpp index cf22383e36..05b7b6bcc8 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2163,13 +2163,7 @@ Node *Node::_duplicate(int p_flags, Map<const Node *, Node *> *r_duplimap) const if (name == script_property_name) continue; - Variant value = N->get()->get(name); - // Duplicate dictionaries and arrays, mainly needed for __meta__ - if (value.get_type() == Variant::DICTIONARY) { - value = Dictionary(value).duplicate(); - } else if (value.get_type() == Variant::ARRAY) { - value = Array(value).duplicate(); - } + Variant value = N->get()->get(name).duplicate(true); if (E->get().usage & PROPERTY_USAGE_DO_NOT_SHARE_ON_DUPLICATE) { @@ -2313,13 +2307,7 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p continue; String name = E->get().name; - Variant value = get(name); - // Duplicate dictionaries and arrays, mainly needed for __meta__ - if (value.get_type() == Variant::DICTIONARY) { - value = Dictionary(value).duplicate(); - } else if (value.get_type() == Variant::ARRAY) { - value = Array(value).duplicate(); - } + Variant value = get(name).duplicate(true); node->set(name, value); } |