|
@@ -108,9 +108,7 @@ public class AnimationState {
|
|
|
}
|
|
|
continue;
|
|
|
}
|
|
|
- updateMixingFrom(current, delta);
|
|
|
} else {
|
|
|
- updateMixingFrom(current, delta);
|
|
|
// Clear the track when there is no next entry, the track end time is reached, and there is no mixingFrom.
|
|
|
if (current.trackLast >= current.trackEnd && current.mixingFrom == null) {
|
|
|
tracks.set(i, null);
|
|
@@ -119,6 +117,7 @@ public class AnimationState {
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
+ updateMixingFrom(current, delta);
|
|
|
|
|
|
current.trackTime += currentDelta;
|
|
|
}
|
|
@@ -158,7 +157,10 @@ public class AnimationState {
|
|
|
|
|
|
// Apply mixing from entries first.
|
|
|
float mix = current.alpha;
|
|
|
- if (current.mixingFrom != null) mix *= applyMixingFrom(current, skeleton);
|
|
|
+ if (current.mixingFrom != null)
|
|
|
+ mix *= applyMixingFrom(current, skeleton);
|
|
|
+ else if (current.trackTime >= current.trackEnd) //
|
|
|
+ mix = 0; // Set to setup pose the last time the entry will be applied.
|
|
|
|
|
|
// Apply current entry.
|
|
|
float animationLast = current.animationLast, animationTime = current.getAnimationTime();
|
|
@@ -408,11 +410,11 @@ public class AnimationState {
|
|
|
if (current != null) {
|
|
|
if (current.nextTrackLast == -1) {
|
|
|
// Don't mix from an entry that was never applied.
|
|
|
- tracks.set(trackIndex, null);
|
|
|
+ tracks.set(trackIndex, current.mixingFrom);
|
|
|
queue.interrupt(current);
|
|
|
queue.end(current);
|
|
|
disposeNext(current);
|
|
|
- current = null;
|
|
|
+ current = current.mixingFrom;
|
|
|
} else
|
|
|
disposeNext(current);
|
|
|
}
|
|
@@ -750,10 +752,10 @@ public class AnimationState {
|
|
|
/** The track time in seconds when this animation will be removed from the track. Defaults to the animation
|
|
|
* {@link Animation#duration} for non-looping animations and the highest float possible for looping animations. If the track
|
|
|
* end time is reached, no other animations are queued for playback, and mixing from any previous animations is complete,
|
|
|
- * then the track is cleared, leaving skeletons in their previous pose.
|
|
|
+ * then the properties keyed by the animation are set to the setup pose and the track is cleared.
|
|
|
* <p>
|
|
|
- * It may be desired to use {@link AnimationState#addEmptyAnimation(int, float, float)} to mix the skeletons back to the
|
|
|
- * setup pose, rather than leaving them in their previous pose. */
|
|
|
+ * It may be desired to use {@link AnimationState#addEmptyAnimation(int, float, float)} to mix the properties back to the
|
|
|
+ * setup pose over time, rather than have it happen instantly. */
|
|
|
public float getTrackEnd () {
|
|
|
return trackEnd;
|
|
|
}
|