Browse Source

[haxe] Port of commit 8d058fb: Improved AnimationState behavior when paused. See #2705.

Davide Tantillo 9 months ago
parent
commit
ae5ae4ddf2
1 changed files with 11 additions and 10 deletions
  1. 11 10
      spine-haxe/spine-haxe/spine/animation/AnimationState.hx

+ 11 - 10
spine-haxe/spine-haxe/spine/animation/AnimationState.hx

@@ -148,17 +148,18 @@ class AnimationState {
 		from.animationLast = from.nextAnimationLast;
 		from.animationLast = from.nextAnimationLast;
 		from.trackLast = from.nextTrackLast;
 		from.trackLast = from.nextTrackLast;
 
 
-		// Require mixTime > 0 to ensure the mixing from entry was applied at least once.
-		if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {
-			// Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame).
-			if (from.totalAlpha == 0 || to.mixDuration == 0) {
-				to.mixingFrom = from.mixingFrom;
-				if (from.mixingFrom != null)
-					from.mixingFrom.mixingTo = to;
-				to.interruptAlpha = from.interruptAlpha;
-				queue.end(from);
+		if (to.nextTrackLast != -1) { // The from entry was applied at least once.
+			var discard:Bool = to.mixTime == 0 && from.mixTime == 0; // Discard the from entry when neither have advanced yet.
+			if (to.mixTime >= to.mixDuration || discard) {
+				// Require totalAlpha == 0 to ensure mixing is complete or the transition is a single frame or discarded.
+				if (from.totalAlpha == 0 || to.mixDuration == 0 || discard) {
+					to.mixingFrom = from.mixingFrom;
+					if (from.mixingFrom != null) from.mixingFrom.mixingTo = to;
+					to.interruptAlpha = from.interruptAlpha;
+					queue.end(from);
+				}
+				return finished;
 			}
 			}
-			return finished;
 		}
 		}
 
 
 		from.trackTime += delta * from.timeScale;
 		from.trackTime += delta * from.timeScale;