diff options
| author | volzhs | 2016-10-11 23:54:46 +0900 |
|---|---|---|
| committer | Rémi Verschelde | 2016-10-17 20:47:49 +0200 |
| commit | 81bc2716195bcb9ea4e505b73dd0b34288bc55fc (patch) | |
| tree | 3ec1b9c78ea99705f91a820cad6ba6c84462effd | |
| parent | 5f540a17cc08c6696f090ac0a551bd1cf45f8d1f (diff) | |
| download | godot-81bc2716195bcb9ea4e505b73dd0b34288bc55fc.tar.gz godot-81bc2716195bcb9ea4e505b73dd0b34288bc55fc.tar.zst godot-81bc2716195bcb9ea4e505b73dd0b34288bc55fc.zip | |
Replace a node with saved branch scene instance
(cherry picked from commit cc33c528eba7de158f5610fa884145fffc8df1c6)
| -rw-r--r-- | tools/editor/scene_tree_dock.cpp | 30 | ||||
| -rw-r--r-- | tools/editor/scene_tree_dock.h | 1 |
2 files changed, 30 insertions, 1 deletions
diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp index 2e8c83693..d540c4870 100644 --- a/tools/editor/scene_tree_dock.cpp +++ b/tools/editor/scene_tree_dock.cpp @@ -221,6 +221,34 @@ void SceneTreeDock::_perform_instance_scenes(const Vector<String>& p_files,Node* } +void SceneTreeDock::_replace_with_branch_scene(const String& p_file,Node* base) { + Ref<PackedScene> sdata = ResourceLoader::load(p_file); + if (!sdata.is_valid()) { + accept->get_ok()->set_text(TTR("Ugh")); + accept->set_text(vformat(TTR("Error loading scene from %s"),p_file)); + accept->popup_centered_minsize(); + return; + } + + Node *instanced_scene=sdata->instance(true); + if (!instanced_scene) { + accept->get_ok()->set_text(TTR("Ugh")); + accept->set_text(vformat(TTR("Error instancing scene from %s"),p_file)); + accept->popup_centered_minsize(); + return; + } + + Node *parent = base->get_parent(); + int pos = base->get_index(); + memdelete(base); + parent->add_child(instanced_scene); + parent->move_child(instanced_scene, pos); + instanced_scene->set_owner(edited_scene); + editor_selection->clear(); + editor_selection->add_node(instanced_scene); + scene_tree->set_selected(instanced_scene); +} + bool SceneTreeDock::_cyclical_dependency_exists(const String& p_target_scene_path, Node* p_desired_node) { int childCount = p_desired_node->get_child_count(); @@ -1522,7 +1550,7 @@ void SceneTreeDock::_new_scene_from(String p_file) { accept->popup_centered_minsize(); return; } - + _replace_with_branch_scene(p_file, base); } else { accept->get_ok()->set_text(TTR("I see..")); accept->set_text(TTR("Error duplicating scene to save it.")); diff --git a/tools/editor/scene_tree_dock.h b/tools/editor/scene_tree_dock.h index 04ed16967..04d13bfc7 100644 --- a/tools/editor/scene_tree_dock.h +++ b/tools/editor/scene_tree_dock.h @@ -149,6 +149,7 @@ class SceneTreeDock : public VBoxContainer { void _filter_changed(const String& p_filter); void _perform_instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos); + void _replace_with_branch_scene(const String& p_file,Node* base); protected: |
