diff --git a/spine-as3/spine-as3/src/spine/animation/AnimationState.as b/spine-as3/spine-as3/src/spine/animation/AnimationState.as index 8416a15d9..e333ea87c 100644 --- a/spine-as3/spine-as3/src/spine/animation/AnimationState.as +++ b/spine-as3/spine-as3/src/spine/animation/AnimationState.as @@ -201,9 +201,10 @@ public class AnimationState { _tracks[trackIndex] = entry; if (delay <= 0) { - if (last) - delay += Math.max(0, last.endTime - last.time) - _data.getMix(last.animation, animation); - else + if (last) { + if (last.time < last.endTime) delay += last.endTime - last.time; + delay -= _data.getMix(last.animation, animation); + } else delay = 0; } entry.delay = delay; diff --git a/spine-c/src/spine/AnimationState.c b/spine-c/src/spine/AnimationState.c index 6273919f3..71e350d3a 100644 --- a/spine-c/src/spine/AnimationState.c +++ b/spine-c/src/spine/AnimationState.c @@ -266,10 +266,8 @@ spTrackEntry* spAnimationState_addAnimation (spAnimationState* self, int trackIn if (delay <= 0) { if (last) { - float remaining = last->endTime - last->time; - if (remaining < 0) remaining = 0; - delay += remaining; - if (animation) delay -= spAnimationStateData_getMix(self->data, last->animation, animation); + if (last->time < last->endTime) delay += last->endTime - last->time; + delay -= spAnimationStateData_getMix(self->data, last->animation, animation); } else delay = 0; } diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index 4f6a94c03..db6bd5836 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -213,9 +213,10 @@ namespace Spine { tracks[trackIndex] = entry; if (delay <= 0) { - if (last != null) - delay += Math.Max(0, last.endTime - last.time) - data.GetMix(last.animation, animation); - else + if (last != null) { + if (last.time < last.endTime) delay += last.endTime - last.time; + delay -= data.GetMix(last.animation, animation); + } else delay = 0; } entry.delay = delay; diff --git a/spine-js/spine.js b/spine-js/spine.js index ba0e09423..2d00195e5 100644 --- a/spine-js/spine.js +++ b/spine-js/spine.js @@ -1109,9 +1109,10 @@ spine.AnimationState.prototype = { this.tracks[trackIndex] = entry; if (delay <= 0) { - if (last) - delay += last.endTime - this.data.getMix(last.animation, animation); - else + if (last) { + if (last.time < last.endTime) delay += last.endTime - last.time; + delay -= this.data.getMix(last.animation, animation); + } else delay = 0; } entry.delay = delay; diff --git a/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index c39345af9..79a921485 100644 --- a/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -232,9 +232,10 @@ public class AnimationState { tracks.set(trackIndex, entry); if (delay <= 0) { - if (last != null) - delay += Math.max(0, last.endTime - last.time) - data.getMix(last.animation, animation); - else + if (last != null) { + if (last.time < last.endTime) delay += last.endTime - last.time; + delay -= data.getMix(last.animation, animation); + } else delay = 0; } entry.delay = delay; diff --git a/spine-lua/AnimationState.lua b/spine-lua/AnimationState.lua index 1bd21b07f..61613c2d1 100644 --- a/spine-lua/AnimationState.lua +++ b/spine-lua/AnimationState.lua @@ -201,9 +201,8 @@ function AnimationState.new (data) delay = delay or 0 if delay <= 0 then if last then - local remaining = last.endTime - last.time - if remaining < 0 then remaining = 0 end - delay = delay + remaining - self.data:getMix(last.animation.name, animation.name) + if last.time < last.endTime then delay = delay + last.endTime - last.time end + delay = delay - self.data:getMix(last.animation.name, animation.name) else delay = 0 end