diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTest.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTest.java index 8fe354667..a9e395e9e 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTest.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTest.java @@ -501,6 +501,24 @@ public class AnimationStateTest { } }); + setup("setAnimation twice", // 21 + expect(0, "start", 0, 0), // + + expect(1, "start", 0, 0), // + + expect(0, "interrupt", 0, 0), // + expect(0, "end", 0, 0), // + + expect(1, "event 0", 0, 0), // + expect(1, "event 14", 0.5f, 0.5f), // + expect(1, "event 30", 1, 1), // + expect(1, "complete", 1, 1), // + expect(1, "end", 1, 1.1f) // + ); + state.setAnimation(0, "events1", false); // First should be ignored. + state.setAnimation(0, "events2", false); + run(0.1f, 1000, null); + System.out.println("AnimationState tests passed."); } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index c7a9bf07b..0b9de0de3 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -265,8 +265,12 @@ public class AnimationState { TrackEntry entry = trackEntry(trackIndex, animation, loop, current); if (current != null) { freeAll(current.next); - current.next = entry; - entry.delay = current.trackLast; + if (current.trackLast == -1) // If current was never applied, don't mix from it, just replace it. + setCurrent(trackIndex, entry); + else { + current.next = entry; + entry.delay = current.trackLast; + } } else setCurrent(trackIndex, entry); return entry;