فهرست منبع

Save branch as scene by dropping to filesystem

kobewi 4 سال پیش
والد
کامیت
d4f4cfbb40
3فایلهای تغییر یافته به همراه21 افزوده شده و 0 حذف شده
  1. 15 0
      editor/filesystem_dock.cpp
  2. 5 0
      editor/scene_tree_dock.cpp
  3. 1 0
      editor/scene_tree_dock.h

+ 15 - 0
editor/filesystem_dock.cpp

@@ -2158,6 +2158,14 @@ bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_da
 		return true;
 	}
 
+	if (drag_data.has("type") && String(drag_data["type"]) == "nodes") {
+		// Save branch as scene.
+		String to_dir;
+		bool favorite;
+		_get_drag_target_folder(to_dir, favorite, p_point, p_from);
+		return !favorite && Array(drag_data["nodes"]).size() == 1;
+	}
+
 	return false;
 }
 
@@ -2296,6 +2304,13 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data,
 			_update_tree(_compute_uncollapsed_paths());
 		}
 	}
+
+	if (drag_data.has("type") && String(drag_data["type"]) == "nodes") {
+		String to_dir;
+		bool favorite;
+		_get_drag_target_folder(to_dir, favorite, p_point, p_from);
+		EditorNode::get_singleton()->get_scene_tree_dock()->save_branch_to_file(to_dir);
+	}
 }
 
 void FileSystemDock::_get_drag_target_folder(String &target, bool &target_favorites, const Point2 &p_point, Control *p_from) const {

+ 5 - 0
editor/scene_tree_dock.cpp

@@ -2837,6 +2837,11 @@ void SceneTreeDock::set_filter(const String &p_filter) {
 	scene_tree->set_filter(p_filter);
 }
 
+void SceneTreeDock::save_branch_to_file(String p_directory) {
+	new_scene_from_dialog->set_current_dir(p_directory);
+	_tool_selected(TOOL_NEW_SCENE_FROM);
+}
+
 void SceneTreeDock::_focus_node() {
 	Node *node = scene_tree->get_selected();
 	ERR_FAIL_COND(!node);

+ 1 - 0
editor/scene_tree_dock.h

@@ -269,6 +269,7 @@ protected:
 public:
 	String get_filter();
 	void set_filter(const String &p_filter);
+	void save_branch_to_file(String p_directory);
 
 	void _focus_node();