mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Fix Clear Inheritance error
This commit is contained in:
parent
816ec99355
commit
766b45bdd9
5 changed files with 51 additions and 30 deletions
|
|
@ -706,33 +706,7 @@ bool EditorData::check_and_update_scene(int p_idx) {
|
|||
bool must_reload = _find_updated_instances(edited_scene[p_idx].root, edited_scene[p_idx].root, checked_scenes);
|
||||
|
||||
if (must_reload) {
|
||||
Ref<PackedScene> pscene;
|
||||
pscene.instantiate();
|
||||
|
||||
EditorProgress ep("update_scene", TTR("Updating Scene"), 2);
|
||||
ep.step(TTR("Storing local changes..."), 0);
|
||||
// Pack first, so it stores diffs to previous version of saved scene.
|
||||
Error err = pscene->pack(edited_scene[p_idx].root);
|
||||
ERR_FAIL_COND_V(err != OK, false);
|
||||
ep.step(TTR("Updating scene..."), 1);
|
||||
Node *new_scene = pscene->instantiate(PackedScene::GEN_EDIT_STATE_MAIN);
|
||||
ERR_FAIL_NULL_V(new_scene, false);
|
||||
|
||||
// Transfer selection.
|
||||
List<Node *> new_selection;
|
||||
for (const Node *E : edited_scene.write[p_idx].selection) {
|
||||
NodePath p = edited_scene[p_idx].root->get_path_to(E);
|
||||
Node *new_node = new_scene->get_node(p);
|
||||
if (new_node) {
|
||||
new_selection.push_back(new_node);
|
||||
}
|
||||
}
|
||||
|
||||
new_scene->set_scene_file_path(edited_scene[p_idx].root->get_scene_file_path());
|
||||
Node *old_root = edited_scene[p_idx].root;
|
||||
EditorNode::get_singleton()->set_edited_scene(new_scene);
|
||||
memdelete(old_root);
|
||||
edited_scene.write[p_idx].selection = new_selection;
|
||||
reload_scene_from_memory(p_idx, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -740,6 +714,46 @@ bool EditorData::check_and_update_scene(int p_idx) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool EditorData::reload_scene_from_memory(int p_idx, bool p_mark_unsaved) {
|
||||
ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), false);
|
||||
if (!edited_scene[p_idx].root) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Ref<PackedScene> pscene;
|
||||
pscene.instantiate();
|
||||
|
||||
EditorProgress ep("update_scene", TTR("Updating Scene"), 2);
|
||||
ep.step(TTR("Storing local changes..."), 0);
|
||||
// Pack first, so it stores diffs to previous version of saved scene.
|
||||
Error err = pscene->pack(edited_scene[p_idx].root);
|
||||
ERR_FAIL_COND_V(err != OK, false);
|
||||
ep.step(TTR("Updating scene..."), 1);
|
||||
Node *new_scene = pscene->instantiate(PackedScene::GEN_EDIT_STATE_MAIN);
|
||||
ERR_FAIL_NULL_V(new_scene, false);
|
||||
|
||||
// Transfer selection.
|
||||
List<Node *> new_selection;
|
||||
for (const Node *E : edited_scene.write[p_idx].selection) {
|
||||
NodePath p = edited_scene[p_idx].root->get_path_to(E);
|
||||
Node *new_node = new_scene->get_node(p);
|
||||
if (new_node) {
|
||||
new_selection.push_back(new_node);
|
||||
}
|
||||
}
|
||||
|
||||
new_scene->set_scene_file_path(edited_scene[p_idx].root->get_scene_file_path());
|
||||
Node *old_root = edited_scene[p_idx].root;
|
||||
EditorNode::get_singleton()->set_edited_scene(new_scene);
|
||||
memdelete(old_root);
|
||||
edited_scene.write[p_idx].selection = new_selection;
|
||||
|
||||
if (p_mark_unsaved) {
|
||||
EditorUndoRedoManager::get_singleton()->clear_history(get_scene_history_id(p_idx));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int EditorData::get_edited_scene() const {
|
||||
return current_edited_scene;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue