Skip to content

Commit

Permalink
Merge pull request godotengine#49664 from nekomatata/fix-editable-dup…
Browse files Browse the repository at this point in the history
…licated

Fix loading packed scene with editable children at runtime
  • Loading branch information
mhilbrunner authored Aug 28, 2021
2 parents 04c64b5 + fab88a8 commit 00e66e2
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion scene/resources/packed_scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -379,10 +379,17 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map
return OK;
}

bool is_editable_instance = false;

// save the child instantiated scenes that are chosen as editable, so they can be restored
// upon load back
if (p_node != p_owner && p_node->get_filename() != String() && p_owner->is_editable_instance(p_node)) {
editable_instances.push_back(p_owner->get_path_to(p_node));
// Node is the root of an editable instance.
is_editable_instance = true;
} else if (p_node->get_owner() && p_node->get_owner() != p_owner && p_owner->is_editable_instance(p_node->get_owner())) {
// Node is part of an editable instance.
is_editable_instance = true;
}

NodeData nd;
Expand Down Expand Up @@ -610,7 +617,7 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Map

// Save the right type. If this node was created by an instance
// then flag that the node should not be created but reused
if (pack_state_stack.is_empty()) {
if (pack_state_stack.is_empty() && !is_editable_instance) {
//this node is not part of an instancing process, so save the type
nd.type = _nm_get_string(p_node->get_class(), name_map);
} else {
Expand Down

0 comments on commit 00e66e2

Please sign in to comment.