浏览代码

Add Control to preferred types

(cherry picked from commit ec86d3268429eebbf512779bd03df9cd754cea99)

Fix crash by calculating wrong size of array.

(cherry picked from commit 81b6000812983ee6d113921bc62c47ebd8d5611f)
Stijn Hinlopen 5 年之前
父节点
当前提交
cdb9b51ed1
共有 1 个文件被更改,包括 16 次插入7 次删除
  1. 16 7
      editor/scene_tree_dock.cpp

+ 16 - 7
editor/scene_tree_dock.cpp

@@ -362,17 +362,26 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 			if (!profile_allow_editing) {
 			if (!profile_allow_editing) {
 				break;
 				break;
 			}
 			}
-			String preferred = "";
-			Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene();
 
 
+			// Prefer nodes that inherit from the current scene root.
+			Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene();
 			if (current_edited_scene_root) {
 			if (current_edited_scene_root) {
+				String root_class = current_edited_scene_root->get_class_name();
+				static Vector<String> preferred_types;
+				if (preferred_types.empty()) {
+					preferred_types.push_back("Control");
+					preferred_types.push_back("Node2D");
+					preferred_types.push_back("Node3D");
+				}
 
 
-				if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Node2D"))
-					preferred = "Node2D";
-				else if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Spatial"))
-					preferred = "Spatial";
+				for (int i = 0; i < preferred_types.size(); i++) {
+					if (ClassDB::is_parent_class(root_class, preferred_types[i])) {
+						create_dialog->set_preferred_search_result_type(preferred_types[i]);
+						break;
+					}
+				}
 			}
 			}
-			create_dialog->set_preferred_search_result_type(preferred);
+
 			create_dialog->popup_create(true);
 			create_dialog->popup_create(true);
 		} break;
 		} break;
 		case TOOL_INSTANCE: {
 		case TOOL_INSTANCE: {