diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2017-02-27 14:39:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-27 14:39:54 +0100 |
commit | df365fdc3cd62b482d6ecc9a074f235886b6ee01 (patch) | |
tree | a53a0f1bbb18422e483da8414679049a598c6bd2 | |
parent | 5f31b3ce58a8480d651dd431c498e857cdd9a496 (diff) | |
parent | 83df74a17d4de3c32a752a56ad01e3f962749021 (diff) |
Merge pull request #6462 from RandomShaper/fix-improve-anim-blend
Fix/improve AnimationPlayer blending logic
-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); + } |