summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHaoyu Qiu <timothyqiu32@gmail.com>2023-09-28 22:35:35 +0800
committerHaoyu Qiu <timothyqiu32@gmail.com>2023-09-28 22:53:29 +0800
commitb50d0ebb289ec40141c7daca2cba97047fc30493 (patch)
tree216475e31ba2e527ad5cc1df3ae04c8d78bbf7cd
parent4c3dc26367518e006f8555c12f5d2df0b8a28192 (diff)
downloadredot-engine-b50d0ebb289ec40141c7daca2cba97047fc30493.tar.gz
Fix "Some nodes are referenced by animation tracks" when deleting instance
-rw-r--r--editor/scene_tree_dock.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index d7c6cb04a4..c92455d9c1 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -1546,6 +1546,14 @@ void SceneTreeDock::_fill_path_renames(Vector<StringName> base_path, Vector<Stri
}
bool SceneTreeDock::_has_tracks_to_delete(Node *p_node, List<Node *> &p_to_delete) const {
+ // Skip if this node will be deleted.
+ for (const Node *F : p_to_delete) {
+ if (F == p_node || F->is_ancestor_of(p_node)) {
+ return false;
+ }
+ }
+
+ // This is an AnimationPlayer that survives the deletion.
AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node);
if (ap) {
Node *root = ap->get_node(ap->get_root());
@@ -1574,11 +1582,13 @@ bool SceneTreeDock::_has_tracks_to_delete(Node *p_node, List<Node *> &p_to_delet
}
}
+ // Recursively check child nodes.
for (int i = 0; i < p_node->get_child_count(); i++) {
if (_has_tracks_to_delete(p_node->get_child(i), p_to_delete)) {
return true;
}
}
+
return false;
}