Forráskód Böngészése

[as3] Fixed AnimationState not respecting MixBlend.first for rotate timelines. See #1274.

badlogic 6 éve
szülő
commit
fd51eee47f

BIN
spine-as3/spine-as3-example/lib/spine-as3.swc


+ 27 - 20
spine-as3/spine-as3/src/spine/animation/AnimationState.as

@@ -300,29 +300,36 @@ package spine.animation {
 			var rotateTimeline : RotateTimeline = RotateTimeline(timeline);
 			var frames : Vector.<Number> = rotateTimeline.frames;
 			var bone : Bone = skeleton.bones[rotateTimeline.boneIndex];
+			var r1 : Number, r2 : Number;
 			if (time < frames[0]) {
-				if (blend == MixBlend.setup) bone.rotation = bone.data.rotation;
-				return;
-			}
-
-			var r2 : Number;
-			if (time >= frames[frames.length - RotateTimeline.ENTRIES]) // Time is after last frame.
-				r2 = bone.data.rotation + frames[frames.length + RotateTimeline.PREV_ROTATION];
-			else {
-				// Interpolate between the previous frame and the current frame.
-				var frame : int = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);
-				var prevRotation : Number = frames[frame + RotateTimeline.PREV_ROTATION];
-				var frameTime : Number = frames[frame];
-				var percent : Number = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));
-
-				r2 = frames[frame + RotateTimeline.ROTATION] - prevRotation;
-				r2 -= (16384 - int((16384.499999999996 - r2 / 360))) * 360;
-				r2 = prevRotation + r2 * percent + bone.data.rotation;
-				r2 -= (16384 - int((16384.499999999996 - r2 / 360))) * 360;
+				switch (blend) {
+					case MixBlend.setup:
+						bone.rotation = bone.data.rotation;
+					default:
+						return;
+					case MixBlend.first:
+						r1 = bone.rotation;
+						r2 = bone.data.rotation;
+				}				
+			} else {			
+				r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation;
+				if (time >= frames[frames.length - RotateTimeline.ENTRIES]) // Time is after last frame.
+					r2 = bone.data.rotation + frames[frames.length + RotateTimeline.PREV_ROTATION];
+				else {
+					// Interpolate between the previous frame and the current frame.
+					var frame : int = Animation.binarySearch(frames, time, RotateTimeline.ENTRIES);
+					var prevRotation : Number = frames[frame + RotateTimeline.PREV_ROTATION];
+					var frameTime : Number = frames[frame];
+					var percent : Number = rotateTimeline.getCurvePercent((frame >> 1) - 1, 1 - (time - frameTime) / (frames[frame + RotateTimeline.PREV_TIME] - frameTime));
+	
+					r2 = frames[frame + RotateTimeline.ROTATION] - prevRotation;
+					r2 -= (16384 - int((16384.499999999996 - r2 / 360))) * 360;
+					r2 = prevRotation + r2 * percent + bone.data.rotation;
+					r2 -= (16384 - int((16384.499999999996 - r2 / 360))) * 360;
+				}
 			}
 
-			// Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.
-			var r1 : Number = blend == MixBlend.setup ? bone.data.rotation : bone.rotation;
+			// Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.			
 			var total : Number, diff : Number = r2 - r1;
 			diff -= (16384 - int((16384.499999999996 - diff / 360))) * 360;
 			if (diff == 0) {

BIN
spine-starling/spine-starling-example/lib/spine-as3.swc


BIN
spine-starling/spine-starling/lib/spine-as3.swc