Merge pull request #6793 from volzhs/save-branch

Replace a node with saved branch scene instance
This commit is contained in:
Rémi Verschelde 2016-10-14 18:09:47 +02:00 committed by GitHub
commit 2f57249c29
2 changed files with 30 additions and 1 deletions

View file

@ -238,6 +238,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) { bool SceneTreeDock::_cyclical_dependency_exists(const String& p_target_scene_path, Node* p_desired_node) {
int childCount = p_desired_node->get_child_count(); int childCount = p_desired_node->get_child_count();
@ -1513,7 +1541,7 @@ void SceneTreeDock::_new_scene_from(String p_file) {
accept->popup_centered_minsize(); accept->popup_centered_minsize();
return; return;
} }
_replace_with_branch_scene(p_file, base);
} else { } else {
accept->get_ok()->set_text(TTR("I see..")); accept->get_ok()->set_text(TTR("I see.."));
accept->set_text(TTR("Error duplicating scene to save it.")); accept->set_text(TTR("Error duplicating scene to save it."));

View file

@ -153,6 +153,7 @@ class SceneTreeDock : public VBoxContainer {
void _filter_changed(const String& p_filter); void _filter_changed(const String& p_filter);
void _perform_instance_scenes(const Vector<String>& p_files,Node* parent,int p_pos); 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: protected: