Browse Source

When an animationplayer sets a property on itself recreate the caches

this fixes #25507
Hein-Pieter van Braam 6 years ago
parent
commit
37aa06bf8a
1 changed files with 8 additions and 2 deletions
  1. 8 2
      scene/animation/animation_player.cpp

+ 8 - 2
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++) {
 	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];
 		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))
 		if (!a->track_is_enabled(i))
 			continue; // do nothing if the track is disabled
 			continue; // do nothing if the track is disabled