void AnimationPlayer::_animation_process2(float p_delta) { Playback &c = playback; accum_pass++; _animation_process_data(c.current, p_delta, 1.0f); List<Blend>::Element *prev = NULL; for (List<Blend>::Element *E = c.blend.back(); E; E = prev) { Blend &b = E->get(); 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) { c.blend.erase(E); } } }
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 for (List<Blend>::Element *E=c.blend.back();E;E=E->prev(),pop_count++) { Blend& b=E->get(); _animation_process_data(b.data,p_delta,prev_blend); prev_blend=1.0-b.blend_left/b.blend_time; b.blend_left-=Math::absf(speed_scale*p_delta); if (b.blend_left<0) { pop=pop_count; } } while(pop--) { c.blend.pop_back(); } _animation_process_data(c.current,p_delta,prev_blend); }