1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-15 13:51:40 +00:00

Fix Clear Inheritance error

This commit is contained in:
xuhuisheng
2025-09-29 14:57:29 +08:00
parent 816ec99355
commit 766b45bdd9
5 changed files with 51 additions and 30 deletions

View File

@@ -1396,7 +1396,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
Node *node = e->get();
if (node) {
node->set_scene_inherited_state(Ref<SceneState>());
scene_tree->update_tree();
editor_data->reload_scene_from_memory(editor_data->get_edited_scene(), true);
scene_tree->clear_cache();
InspectorDock::get_inspector_singleton()->update_tree();
}
}

View File

@@ -706,6 +706,20 @@ 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) {
reload_scene_from_memory(p_idx, false);
return true;
}
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();
@@ -734,10 +748,10 @@ bool EditorData::check_and_update_scene(int p_idx) {
memdelete(old_root);
edited_scene.write[p_idx].selection = new_selection;
return true;
if (p_mark_unsaved) {
EditorUndoRedoManager::get_singleton()->clear_history(get_scene_history_id(p_idx));
}
return false;
return true;
}
int EditorData::get_edited_scene() const {

View File

@@ -219,6 +219,7 @@ public:
void set_edited_scene_live_edit_root(const NodePath &p_root);
NodePath get_edited_scene_live_edit_root();
bool check_and_update_scene(int p_idx);
bool reload_scene_from_memory(int p_idx, bool p_mark_unsaved);
void move_edited_scene_to_index(int p_idx);
bool call_build();

View File

@@ -1728,13 +1728,17 @@ void SceneTreeEditor::set_display_foreign_nodes(bool p_display) {
_update_tree();
}
void SceneTreeEditor::set_valid_types(const Vector<StringName> &p_valid) {
valid_types = p_valid;
void SceneTreeEditor::clear_cache() {
node_cache.force_update = true;
callable_mp(this, &SceneTreeEditor::_update_tree).call_deferred(false);
tree_dirty = true;
}
void SceneTreeEditor::set_valid_types(const Vector<StringName> &p_valid) {
valid_types = p_valid;
clear_cache();
}
void SceneTreeEditor::set_editor_selection(EditorSelection *p_selection) {
editor_selection = p_selection;
tree->set_select_mode(Tree::SELECT_MULTI);

View File

@@ -248,6 +248,7 @@ public:
void set_show_enabled_subscene(bool p_show) { show_enabled_subscene = p_show; }
void set_valid_types(const Vector<StringName> &p_valid);
void clear_cache();
inline void update_tree() { _update_tree(); }