From 9c1b5b209ae48815adee967c7f57e99780817466 Mon Sep 17 00:00:00 2001 From: badlogic Date: Mon, 28 Nov 2016 16:46:14 +0100 Subject: [PATCH] [csharp] Ported latest AnimationState changes --- spine-csharp/src/AnimationState.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index 804bc5a8f..c05067502 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -95,7 +95,7 @@ namespace Spine { next.delay = 0; next.trackTime = nextTime + (delta * next.timeScale); current.trackTime += currentDelta; - SetCurrent(i, next); + SetCurrent(i, next, true); while (next.mixingFrom != null) { next.mixTime += currentDelta; next = next.mixingFrom; @@ -378,12 +378,12 @@ namespace Spine { queue.Drain(); } - private void SetCurrent (int index, TrackEntry current) { + private void SetCurrent (int index, TrackEntry current, bool interrupt) { TrackEntry from = ExpandToIndex(index); tracks.Items[index] = current; if (from != null) { - queue.Interrupt(from); + if (interrupt) queue.Interrupt(from); current.mixingFrom = from; current.mixTime = 0; @@ -413,6 +413,7 @@ namespace Spine { /// after . public TrackEntry SetAnimation (int trackIndex, Animation animation, bool loop) { if (animation == null) throw new ArgumentNullException("animation", "animation cannot be null."); + bool interrupt = true; TrackEntry current = ExpandToIndex(trackIndex); if (current != null) { if (current.nextTrackLast == -1) { @@ -422,12 +423,13 @@ namespace Spine { queue.End(current); DisposeNext(current); current = current.mixingFrom; + interrupt = false; } else { DisposeNext(current); } } TrackEntry entry = NewTrackEntry(trackIndex, animation, loop, current); - SetCurrent(trackIndex, entry); + SetCurrent(trackIndex, entry, interrupt); queue.Drain(); return entry; } @@ -460,7 +462,7 @@ namespace Spine { TrackEntry entry = NewTrackEntry(trackIndex, animation, loop, last); if (last == null) { - SetCurrent(trackIndex, entry); + SetCurrent(trackIndex, entry, true); queue.Drain(); } else { last.next = entry;