瀏覽代碼

Merge pull request #6462 from RandomShaper/fix-improve-anim-blend

Fix/improve AnimationPlayer blending logic
Rémi Verschelde 8 年之前
父節點
當前提交
df365fdc3c
共有 1 個文件被更改,包括 8 次插入17 次删除
  1. 8 17
      scene/animation/animation_player.cpp

+ 8 - 17
scene/animation/animation_player.cpp

@@ -588,35 +588,26 @@ void AnimationPlayer::_animation_process2(float p_delta) {
 
 
 	Playback &c=playback;
 	Playback &c=playback;
 
 
-	float prev_blend=1.0;
 	accum_pass++;
 	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();
 		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);
 		b.blend_left-=Math::absf(speed_scale*p_delta);
 
 
+		prev = E->prev();
 		if (b.blend_left<0) {
 		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);
+	
 
 
 }
 }