浏览代码

Fix SceneTreeDock invalid state after trying to remove internal Node

kleonc 1 年之前
父节点
当前提交
5ae85a4fb9
共有 1 个文件被更改,包括 7 次插入4 次删除
  1. 7 4
      editor/scene_tree_dock.cpp

+ 7 - 4
editor/scene_tree_dock.cpp

@@ -2650,6 +2650,13 @@ void SceneTreeDock::_delete_confirm(bool p_cut) {
 		}
 		}
 	}
 	}
 
 
+	if (!entire_scene) {
+		for (const Node *E : remove_list) {
+			// `move_child` + `get_index` doesn't really work for internal nodes.
+			ERR_FAIL_COND_MSG(E->get_internal_mode() != INTERNAL_MODE_DISABLED, "Trying to remove internal node, this is not supported.");
+		}
+	}
+
 	EditorNode::get_singleton()->hide_unused_editors(this);
 	EditorNode::get_singleton()->hide_unused_editors(this);
 
 
 	EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
 	EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
@@ -2662,10 +2669,6 @@ void SceneTreeDock::_delete_confirm(bool p_cut) {
 		undo_redo->add_undo_method(scene_tree, "update_tree");
 		undo_redo->add_undo_method(scene_tree, "update_tree");
 		undo_redo->add_undo_reference(edited_scene);
 		undo_redo->add_undo_reference(edited_scene);
 	} else {
 	} else {
-		for (const Node *E : remove_list) {
-			// `move_child` + `get_index` doesn't really work for internal nodes.
-			ERR_FAIL_COND_MSG(E->get_internal_mode() != INTERNAL_MODE_DISABLED, "Trying to remove internal node, this is not supported.");
-		}
 		if (delete_tracks_checkbox->is_pressed() || p_cut) {
 		if (delete_tracks_checkbox->is_pressed() || p_cut) {
 			remove_list.sort_custom<Node::Comparator>(); // Sort nodes to keep positions.
 			remove_list.sort_custom<Node::Comparator>(); // Sort nodes to keep positions.
 			HashMap<Node *, NodePath> path_renames;
 			HashMap<Node *, NodePath> path_renames;