diff options
author | Hein-Pieter van Braam <hp@tmm.cx> | 2019-02-01 16:15:39 +0100 |
---|---|---|
committer | Hein-Pieter van Braam <hp@tmm.cx> | 2019-02-01 16:15:39 +0100 |
commit | 37aa06bf8af2fd9fa2a2d7e7dc6752e887ab8139 (patch) | |
tree | 7764e99dd79cda6623e0cbd55384f890f451ec53 /scene/animation | |
parent | 58de38497839148ac5ea2062fdd360e82e1197aa (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.cpp | 10 |
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 |