diff options
| author | Haoyu Qiu <timothyqiu32@gmail.com> | 2023-09-28 22:35:35 +0800 |
|---|---|---|
| committer | Haoyu Qiu <timothyqiu32@gmail.com> | 2023-09-28 22:53:29 +0800 |
| commit | b50d0ebb289ec40141c7daca2cba97047fc30493 (patch) | |
| tree | 216475e31ba2e527ad5cc1df3ae04c8d78bbf7cd | |
| parent | 4c3dc26367518e006f8555c12f5d2df0b8a28192 (diff) | |
| download | redot-engine-b50d0ebb289ec40141c7daca2cba97047fc30493.tar.gz | |
Fix "Some nodes are referenced by animation tracks" when deleting instance
| -rw-r--r-- | editor/scene_tree_dock.cpp | 10 |
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; } |
