summaryrefslogtreecommitdiff
path: root/scene/animation
diff options
context:
space:
mode:
authorHein-Pieter van Braam <hp@tmm.cx>2019-02-01 16:15:39 +0100
committerHein-Pieter van Braam <hp@tmm.cx>2019-02-01 16:15:39 +0100
commit37aa06bf8af2fd9fa2a2d7e7dc6752e887ab8139 (patch)
tree7764e99dd79cda6623e0cbd55384f890f451ec53 /scene/animation
parent58de38497839148ac5ea2062fdd360e82e1197aa (diff)
When an animationplayer sets a property on itself recreate the caches
this fixes #25507
Diffstat (limited to 'scene/animation')
-rw-r--r--scene/animation/animation_player.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp
index 1d2001c30d..4c249b117e 100644
--- a/scene/animation/animation_player.cpp
+++ b/scene/animation/animation_player.cpp
@@ -344,10 +344,16 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
for (int i = 0; i < a->get_track_count(); i++) {
+ // If an animation changes this animation (or it animates itself)
+ // we need to recreate our animation cache
+ if (p_anim->node_cache.size() != a->get_track_count()) {
+ _ensure_node_caches(p_anim);
+ }
+
TrackNodeCache *nc = p_anim->node_cache[i];
- if (!nc) // no node cache for this track, skip it
- continue;
+ if (!nc)
+ continue; // no node cache for this track, skip it
if (!a->track_is_enabled(i))
continue; // do nothing if the track is disabled