diff options
author | Bojidar Marinov <bojidar.marinov.bg@gmail.com> | 2017-09-11 12:34:36 +0300 |
---|---|---|
committer | Bojidar Marinov <bojidar.marinov.bg@gmail.com> | 2017-09-11 12:34:36 +0300 |
commit | ebee9898ca71a7388412225fccaf460c258c6940 (patch) | |
tree | fadde7759dfebd6a973c92e8b767143b5e062b3b /editor | |
parent | 5f39f3a2dfba500b6c9cd8f87b0dd35949043822 (diff) |
Fix duplication of nodes resulting in shared metadata
Fixes #9547
Diffstat (limited to 'editor')
-rw-r--r-- | editor/scene_tree_dock.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index afdf48b314..4fe24a2eff 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -823,7 +823,14 @@ Node *SceneTreeDock::_duplicate(Node *p_node, Map<Node *, Node *> &duplimap) { if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) continue; String name = E->get().name; - node->set(name, p_node->get(name)); + Variant value = p_node->get(name); + // Duplicate dictionaries and arrays, mainly needed for __meta__ + if (value.get_type() == Variant::DICTIONARY) { + value = Dictionary(value).copy(); + } else if (value.get_type() == Variant::ARRAY) { + value = Array(value).duplicate(); + } + node->set(name, value); } List<Node::GroupInfo> group_info; |