|
@@ -3706,12 +3706,15 @@ void EditorNode::_remove_scene(int index, bool p_change_tab) {
|
|
}
|
|
}
|
|
|
|
|
|
void EditorNode::set_edited_scene(Node *p_scene) {
|
|
void EditorNode::set_edited_scene(Node *p_scene) {
|
|
|
|
+ set_edited_scene_root(p_scene, true);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void EditorNode::set_edited_scene_root(Node *p_scene, bool p_auto_add) {
|
|
Node *old_edited_scene_root = get_editor_data().get_edited_scene_root();
|
|
Node *old_edited_scene_root = get_editor_data().get_edited_scene_root();
|
|
- if (old_edited_scene_root) {
|
|
|
|
- if (old_edited_scene_root->get_parent() == scene_root) {
|
|
|
|
- scene_root->remove_child(old_edited_scene_root);
|
|
|
|
- }
|
|
|
|
- old_edited_scene_root->disconnect(SNAME("replacing_by"), callable_mp(this, &EditorNode::set_edited_scene));
|
|
|
|
|
|
+ ERR_FAIL_COND_MSG(p_scene && p_scene != old_edited_scene_root && p_scene->get_parent(), "Non-null nodes that are set as edited scene should not have a parent node.");
|
|
|
|
+
|
|
|
|
+ if (p_auto_add && old_edited_scene_root && old_edited_scene_root->get_parent() == scene_root) {
|
|
|
|
+ scene_root->remove_child(old_edited_scene_root);
|
|
}
|
|
}
|
|
get_editor_data().set_edited_scene_root(p_scene);
|
|
get_editor_data().set_edited_scene_root(p_scene);
|
|
|
|
|
|
@@ -3723,11 +3726,8 @@ void EditorNode::set_edited_scene(Node *p_scene) {
|
|
get_tree()->set_edited_scene_root(p_scene);
|
|
get_tree()->set_edited_scene_root(p_scene);
|
|
}
|
|
}
|
|
|
|
|
|
- if (p_scene) {
|
|
|
|
- if (p_scene->get_parent() != scene_root) {
|
|
|
|
- scene_root->add_child(p_scene, true);
|
|
|
|
- }
|
|
|
|
- p_scene->connect(SNAME("replacing_by"), callable_mp(this, &EditorNode::set_edited_scene));
|
|
|
|
|
|
+ if (p_auto_add && p_scene) {
|
|
|
|
+ scene_root->add_child(p_scene, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -5967,6 +5967,8 @@ void EditorNode::reload_instances_with_path_in_edited_scenes(const String &p_ins
|
|
instantiated_node->set_scene_file_path(String());
|
|
instantiated_node->set_scene_file_path(String());
|
|
}
|
|
}
|
|
current_edited_scene = instantiated_node;
|
|
current_edited_scene = instantiated_node;
|
|
|
|
+
|
|
|
|
+ editor_data.set_edited_scene_root(current_edited_scene);
|
|
}
|
|
}
|
|
|
|
|
|
// Replace the original node with the instantiated version.
|
|
// Replace the original node with the instantiated version.
|