diff options
Diffstat (limited to 'scene/animation/animation_player.cpp')
-rw-r--r-- | scene/animation/animation_player.cpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index dabdde8ece..e9f1904fe9 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -588,35 +588,26 @@ void AnimationPlayer::_animation_process2(float p_delta) { Playback &c=playback; - float prev_blend=1.0; accum_pass++; - int pop_count=1; - int pop=0; // if >0, then amount of elements to pop from the back + _animation_process_data(c.current,p_delta,1.0f); - - for (List<Blend>::Element *E=c.blend.back();E;E=E->prev(),pop_count++) { + List<Blend>::Element *prev = NULL; + for (List<Blend>::Element *E=c.blend.back();E;E=prev) { Blend& b=E->get(); - _animation_process_data(b.data,p_delta,prev_blend); - - prev_blend=1.0-b.blend_left/b.blend_time; + float blend=b.blend_left/b.blend_time; + _animation_process_data(b.data,p_delta,blend); b.blend_left-=Math::absf(speed_scale*p_delta); + prev = E->prev(); if (b.blend_left<0) { - pop=pop_count; + c.blend.erase(E); } } - - while(pop--) { - - c.blend.pop_back(); - } - - - _animation_process_data(c.current,p_delta,prev_blend); + } |