Merge remote-tracking branch 'origin/master'

This commit is contained in:
NathanSweet 2016-11-28 16:39:46 +01:00
commit 0d284dfc1a
5 changed files with 14 additions and 10 deletions

View File

@ -89,7 +89,7 @@ public class AnimationState {
next.delay = 0; next.delay = 0;
next.trackTime = nextTime + delta * next.timeScale; next.trackTime = nextTime + delta * next.timeScale;
current.trackTime += currentDelta; current.trackTime += currentDelta;
setCurrent(i, next); setCurrent(i, next, true);
while (next.mixingFrom != null) { while (next.mixingFrom != null) {
next.mixTime += currentDelta; next.mixTime += currentDelta;
next = next.mixingFrom; next = next.mixingFrom;
@ -355,12 +355,12 @@ public class AnimationState {
} }
private function setCurrent (index:int, current:TrackEntry):void { private function setCurrent (index:int, current:TrackEntry, interrupt:Boolean):void {
var from:TrackEntry = expandToIndex(index); var from:TrackEntry = expandToIndex(index);
tracks[index] = current; tracks[index] = current;
if (from != null) { if (from != null) {
queue.interrupt(from); if (interrupt) queue.interrupt(from);
current.mixingFrom = from; current.mixingFrom = from;
current.mixTime = 0; current.mixTime = 0;
@ -381,6 +381,7 @@ public class AnimationState {
public function setAnimation (trackIndex:int, animation:Animation, loop:Boolean):TrackEntry { public function setAnimation (trackIndex:int, animation:Animation, loop:Boolean):TrackEntry {
if (animation == null) throw new ArgumentError("animation cannot be null."); if (animation == null) throw new ArgumentError("animation cannot be null.");
var interrupt:Boolean = true;
var current:TrackEntry = expandToIndex(trackIndex); var current:TrackEntry = expandToIndex(trackIndex);
if (current != null) { if (current != null) {
if (current.nextTrackLast == -1) { if (current.nextTrackLast == -1) {
@ -390,11 +391,12 @@ public class AnimationState {
queue.end(current); queue.end(current);
disposeNext(current); disposeNext(current);
current = current.mixingFrom; current = current.mixingFrom;
interrupt = false;
} else } else
disposeNext(current); disposeNext(current);
} }
var entry:TrackEntry = trackEntry(trackIndex, animation, loop, current); var entry:TrackEntry = trackEntry(trackIndex, animation, loop, current);
setCurrent(trackIndex, entry); setCurrent(trackIndex, entry, interrupt);
queue.drain(); queue.drain();
return entry; return entry;
} }
@ -417,7 +419,7 @@ public class AnimationState {
var entry:TrackEntry = trackEntry(trackIndex, animation, loop, last); var entry:TrackEntry = trackEntry(trackIndex, animation, loop, last);
if (last == null) { if (last == null) {
setCurrent(trackIndex, entry); setCurrent(trackIndex, entry, true);
queue.drain(); queue.drain();
} else { } else {
last.next = entry; last.next = entry;

View File

@ -240,7 +240,7 @@ function AnimationState:update (delta)
_next.delay = 0 _next.delay = 0
_next.trackTime = nextTime + delta * _next.timeScale _next.trackTime = nextTime + delta * _next.timeScale
current.trackTime = current.trackTime + currentDelta current.trackTime = current.trackTime + currentDelta
self:setCurrent(i, _next) self:setCurrent(i, _next, true)
while _next.mixingFrom do while _next.mixingFrom do
_next.mixTime = _next.mixTime + currentDelta _next.mixTime = _next.mixTime + currentDelta
_next = _next.mixingFrom _next = _next.mixingFrom
@ -530,14 +530,14 @@ function AnimationState:clearTrack (trackIndex)
queue:drain() queue:drain()
end end
function AnimationState:setCurrent (index, current) function AnimationState:setCurrent (index, current, interrupt)
local from = self:expandToIndex(index) local from = self:expandToIndex(index)
local tracks = self.tracks local tracks = self.tracks
local queue = self.queue local queue = self.queue
tracks[index] = current tracks[index] = current
if from then if from then
queue:interrupt(from) if interrupt then queue:interrupt(from) end
current.mixingFrom = from current.mixingFrom = from
current.mixTime = 0 current.mixTime = 0
@ -556,6 +556,7 @@ end
function AnimationState:setAnimation (trackIndex, animation, loop) function AnimationState:setAnimation (trackIndex, animation, loop)
if not animation then error("animation cannot be null.") end if not animation then error("animation cannot be null.") end
local interrupt = true;
local current = self:expandToIndex(trackIndex) local current = self:expandToIndex(trackIndex)
local queue = self.queue local queue = self.queue
if current then if current then
@ -566,12 +567,13 @@ function AnimationState:setAnimation (trackIndex, animation, loop)
queue:_end(current) queue:_end(current)
self:disposeNext(current) self:disposeNext(current)
current = current.mixingFrom current = current.mixingFrom
interrupt = false;
else else
self:disposeNext(current) self:disposeNext(current)
end end
end end
local entry = self:trackEntry(trackIndex, animation, loop, current) local entry = self:trackEntry(trackIndex, animation, loop, current)
self:setCurrent(trackIndex, entry) self:setCurrent(trackIndex, entry, interrupt)
queue:drain() queue:drain()
return entry return entry
end end
@ -597,7 +599,7 @@ function AnimationState:addAnimation (trackIndex, animation, loop, delay)
local data = self.data local data = self.data
if not last then if not last then
self:setCurrent(trackIndex, entry) self:setCurrent(trackIndex, entry, true)
queue:drain() queue:drain()
else else
last.next = entry last.next = entry