Преглед на файлове

Fix bugs of copying scene root node or pasting node as scene root

Fix crash when pasting a node as a new scene root.
Fix owner was not set correctly when copying scene root node from unsaved scene.

The owner of the root node is `nullptr`, which was ignored before.
风青山 преди 2 години
родител
ревизия
95248a7d72
променени са 1 файла, в които са добавени 6 реда и са изтрити 2 реда
  1. 6 2
      editor/scene_tree_dock.cpp

+ 6 - 2
editor/scene_tree_dock.cpp

@@ -493,7 +493,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 
 				// Preserve ownership relations ready for pasting.
 				List<Node *> owned;
-				node->get_owned_by(node->get_owner(), &owned);
+				node->get_owned_by(node->get_owner() ? node->get_owner() : node, &owned);
 
 				for (Node *F : owned) {
 					if (!duplimap.has(F) || F == node) {
@@ -3394,7 +3394,11 @@ List<Node *> SceneTreeDock::paste_nodes(bool p_paste_as_sibling) {
 	}
 
 	EditorUndoRedoManager *ur = EditorUndoRedoManager::get_singleton();
-	ur->create_action(vformat(p_paste_as_sibling ? TTR("Paste Node(s) as Sibling of %s") : TTR("Paste Node(s) as Child of %s"), paste_parent->get_name()), UndoRedo::MERGE_DISABLE, EditorNode::get_singleton()->get_edited_scene());
+	if (paste_parent) {
+		ur->create_action(vformat(p_paste_as_sibling ? TTR("Paste Node(s) as Sibling of %s") : TTR("Paste Node(s) as Child of %s"), paste_parent->get_name()), UndoRedo::MERGE_DISABLE, edited_scene);
+	} else {
+		ur->create_action(TTR("Paste Node(s) as Root"), UndoRedo::MERGE_DISABLE, edited_scene);
+	}
 	ur->add_do_method(editor_selection, "clear");
 
 	HashMap<Ref<Resource>, Ref<Resource>> resource_remap;