Пример #1
0
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);
		}
	}
}
Пример #2
0
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);
	
}