summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
authorBojidar Marinov <bojidar.marinov.bg@gmail.com>2017-09-11 12:34:36 +0300
committerBojidar Marinov <bojidar.marinov.bg@gmail.com>2017-09-11 12:34:36 +0300
commitebee9898ca71a7388412225fccaf460c258c6940 (patch)
treefadde7759dfebd6a973c92e8b767143b5e062b3b /editor
parent5f39f3a2dfba500b6c9cd8f87b0dd35949043822 (diff)
Fix duplication of nodes resulting in shared metadata
Fixes #9547
Diffstat (limited to 'editor')
-rw-r--r--editor/scene_tree_dock.cpp9
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;