Browse Source

[lua] Ported AnimationState changes

badlogic 8 years ago
parent
commit
c0908f19ed
1 changed files with 19 additions and 21 deletions
  1. 19 21
      spine-lua/AnimationState.lua

+ 19 - 21
spine-lua/AnimationState.lua

@@ -247,11 +247,7 @@ function AnimationState:update (delta)
 						end
 						skip = true
 					end
-					if not skip then
-						self:updateMixingFrom(current, delta, true);
-					end
 				else
-					self:updateMixingFrom(current, delta, true)
 					-- 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 and current.mixingFrom == nil then
 						tracks[i] = nil
@@ -261,7 +257,10 @@ function AnimationState:update (delta)
 					end
 				end
 
-				if not skip then current.trackTime = current.trackTime + currentDelta end
+				if not skip then 
+ 					self:updateMixingFrom(current, delta)
+          current.trackTime = current.trackTime + currentDelta
+        end
 			end
 		end
 	end
@@ -269,28 +268,23 @@ function AnimationState:update (delta)
 	queue:drain()
 end
 
-function AnimationState:updateMixingFrom (entry, delta, canEnd)
+function AnimationState:updateMixingFrom (entry, delta)
 	local from = entry.mixingFrom
 	if from == nil then return end
 
+ 	self:updateMixingFrom(from, delta)
+
 	local queue = self.queue
-	if canEnd and entry.mixTime >= entry.mixDuration and entry.mixTime > 0 then
+	if entry.mixTime >= entry.mixDuration and from.mixingFrom == nil and entry.mixTime > 0 then
+ 		entry.mixingFrom = null
 		queue:_end(from)
-		local newFrom = from.mixingFrom
-		entry.mixingFrom = newFrom
-		if newFrom == nil then return end
-		entry.mixTime = from.mixTime;
-		entry.mixDuration = from.mixDuration;
-		from = newFrom;
+    return
 	end
 
 	from.animationLast = from.nextAnimationLast
 	from.trackLast = from.nextTrackLast
-	local mixingFromDelta = delta * from.timeScale
-	from.trackTime = from.trackTime + mixingFromDelta;
-	entry.mixTime = entry.mixTime + mixingFromDelta;
-
-	self:updateMixingFrom(from, delta, canEnd and from.alpha == 1)
+	from.trackTime = from.trackTime + delta * from.timeScale;
+	entry.mixTime = entry.mixTime + delta * entry.timeScale;
 end
 
 function AnimationState:apply (skeleton)
@@ -305,7 +299,11 @@ function AnimationState:apply (skeleton)
 		if not (current == nil or current.delay > 0) then
 			-- Apply mixing from entries first.
 			local mix = current.alpha
-			if current.mixingFrom then mix = mix * self:applyMixingFrom(current, skeleton) end
+			if current.mixingFrom then 
+        mix = mix * self:applyMixingFrom(current, skeleton)
+      elseif current.trackTime >= current.trackEnd then
+        mix = 0
+      end
 
 			-- Apply current entry.
 			local animationLast = current.animationLast
@@ -563,11 +561,11 @@ function AnimationState:setAnimation (trackIndex, animation, loop)
   if current then
     if current.nextTrackLast == -1 then
       -- Don't mix from an entry that was never applied.
-      tracks[trackIndex] = nil
+      tracks[trackIndex] = current.mixingFrom
       queue:interrupt(current)
       queue:_end(current)
       self:disposeNext(current)
-      current = nil
+      current = current.mixingFrom
     else
       self:disposeNext(current)
     end