diff --git a/spine-as3/spine-as3-example/lib/spine-as3.swc b/spine-as3/spine-as3-example/lib/spine-as3.swc
index ce264476e..2d9fd25cf 100644
Binary files a/spine-as3/spine-as3-example/lib/spine-as3.swc and b/spine-as3/spine-as3-example/lib/spine-as3.swc differ
diff --git a/spine-as3/spine-as3/src/spine/Bone.as b/spine-as3/spine-as3/src/spine/Bone.as
index 3415284b0..deefb3fa6 100644
--- a/spine-as3/spine-as3/src/spine/Bone.as
+++ b/spine-as3/spine-as3/src/spine/Bone.as
@@ -307,7 +307,7 @@ public class Bone implements Updatable {
* the applied transform after the world transform has been modified directly (eg, by a constraint).
*
* Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. */
- function updateAppliedTransform () : void {
+ internal function updateAppliedTransform () : void {
appliedValid = true;
var parent:Bone = this.parent;
if (parent == null) {
diff --git a/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as b/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as
index 1a8e3a23a..48b760134 100644
--- a/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as
@@ -59,14 +59,20 @@ public class AttachmentTimeline implements Timeline {
public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
var attachmentName:String;
- if (mixingOut && setupPose) {
- var slot:Slot = skeleton.slots[slotIndex];
+ var slot:Slot = skeleton.slots[slotIndex];
+ if (mixingOut && setupPose) {
attachmentName = slot.data.attachmentName;
slot.attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slotIndex, attachmentName);
return;
}
var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
+ if (time < frames[0]) {
+ if (setupPose) {
+ attachmentName = slot.data.attachmentName;
+ slot.attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slotIndex, attachmentName);
+ }
+ return;
+ }
var frameIndex:int;
if (time >= frames[frames.length - 1]) // Time is after last frame.
diff --git a/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as b/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as
index a875cd2ae..b3c09efcb 100644
--- a/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as
@@ -62,7 +62,17 @@ public class ColorTimeline extends CurveTimeline {
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
+ var slot:Slot = skeleton.slots[slotIndex];
+
+ if (time < frames[0]) {
+ if (setupPose) {
+ slot.r = slot.data.r;
+ slot.g = slot.data.g;
+ slot.b = slot.data.b;
+ slot.a = slot.data.a;
+ }
+ return;
+ }
var r:Number, g:Number, b:Number, a:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
@@ -86,8 +96,7 @@ public class ColorTimeline extends CurveTimeline {
g += (frames[frame + G] - g) * percent;
b += (frames[frame + B] - b) * percent;
a += (frames[frame + A] - a) * percent;
- }
- var slot:Slot = skeleton.slots[slotIndex];
+ }
if (alpha == 1) {
slot.r = r;
slot.g = g;
diff --git a/spine-as3/spine-as3/src/spine/animation/DeformTimeline.as b/spine-as3/spine-as3/src/spine/animation/DeformTimeline.as
index 0cf832298..ebebe0346 100644
--- a/spine-as3/spine-as3/src/spine/animation/DeformTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/DeformTimeline.as
@@ -63,12 +63,15 @@ public class DeformTimeline extends CurveTimeline {
if (!(slotAttachment is VertexAttachment) || !(VertexAttachment(slotAttachment)).applyDeform(attachment)) return;
var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
+ var verticesArray:Vector. = slot.attachmentVertices;
+ if (time < frames[0]) {
+ if (setupPose) verticesArray.length = 0;
+ return;
+ }
var frameVertices:Vector.> = this.frameVertices;
var vertexCount:int = frameVertices[0].length;
-
- var verticesArray:Vector. = slot.attachmentVertices;
+
if (verticesArray.length != vertexCount) alpha = 1; // Don't mix from uninitialized slot vertices.
verticesArray.length = vertexCount;
var vertices:Vector. = verticesArray;
diff --git a/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as b/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as
index 620c8ce02..01e7ae743 100644
--- a/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as
@@ -62,9 +62,17 @@ public class DrawOrderTimeline implements Timeline {
skeleton.drawOrder[ii] = skeleton.slots[ii];
return;
}
-
- if (time < frames[0])
- return; // Time is before first frame.
+
+ var drawOrder:Vector. = skeleton.drawOrder;
+ var slots:Vector. = skeleton.slots;
+ var slot:Slot;
+ var i:int = 0;
+ if (time < frames[0]) {
+ if (setupPose) {
+ for each (slot in slots)
+ drawOrder[i++] = slot;
+ }
+ }
var frameIndex:int;
if (time >= frames[int(frames.length - 1)]) // Time is after last frame.
@@ -72,12 +80,10 @@ public class DrawOrderTimeline implements Timeline {
else
frameIndex = Animation.binarySearch1(frames, time) - 1;
- var drawOrder:Vector. = skeleton.drawOrder;
- var slots:Vector. = skeleton.slots;
var drawOrderToSetupIndex:Vector. = drawOrders[frameIndex];
- var i:int = 0;
+ i = 0;
if (!drawOrderToSetupIndex) {
- for each (var slot:Slot in slots)
+ for each (slot in slots)
drawOrder[i++] = slot;
} else {
for each (var setupIndex:int in drawOrderToSetupIndex)
diff --git a/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as b/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as
index 3e0fbdf77..9d38b0d76 100644
--- a/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as
@@ -59,9 +59,14 @@ public class IkConstraintTimeline extends CurveTimeline {
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- if (time < frames[0]) return; // Time is before first frame.
-
var constraint:IkConstraint = skeleton.ikConstraints[ikConstraintIndex];
+ if (time < frames[0]) {
+ if (setupPose) {
+ constraint.mix = constraint.data.mix;
+ constraint.bendDirection = constraint.data.bendDirection;
+ }
+ return;
+ }
if (time >= frames[int(frames.length - ENTRIES)]) { // Time is after last frame.
if (setupPose) {
diff --git a/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as b/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as
index 3fc632113..a275e8139 100644
--- a/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as
@@ -59,10 +59,15 @@ public class PathConstraintMixTimeline extends CurveTimeline {
frames[frameIndex + TRANSLATE] = translateMix;
}
- override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- if (time < frames[0]) return; // Time is before first frame.
-
+ override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex];
+ if (time < frames[0]) {
+ if (setupPose) {
+ constraint.rotateMix = constraint.data.rotateMix;
+ constraint.translateMix = constraint.data.translateMix;
+ }
+ return;
+ }
var rotate:Number, translate:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
diff --git a/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as b/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as
index cb420dee5..783d44ff6 100644
--- a/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as
@@ -58,10 +58,12 @@ public class PathConstraintPositionTimeline extends CurveTimeline {
frames[frameIndex + VALUE] = value;
}
- override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- if (time < frames[0]) return; // Time is before first frame.
-
+ override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex];
+ if (time < frames[0]) {
+ if (setupPose) constraint.position = constraint.data.position;
+ return;
+ }
var position:Number;
if (time >= frames[frames.length - ENTRIES]) // Time is after last frame.
diff --git a/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as b/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as
index 6f7ac730b..5a7132b92 100644
--- a/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as
@@ -43,9 +43,11 @@ public class PathConstraintSpacingTimeline extends PathConstraintPositionTimelin
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- if (time < frames[0]) return; // Time is before first frame.
-
var constraint:PathConstraint = skeleton.pathConstraints[pathConstraintIndex];
+ if (time < frames[0]) {
+ if (setupPose) constraint.spacing = constraint.data.spacing;
+ return;
+ }
var spacing:Number;
if (time >= frames[frames.length - ENTRIES]) // Time is after last frame.
diff --git a/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as b/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as
index c2f615b17..2cb5b5523 100644
--- a/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as
@@ -58,11 +58,14 @@ public class RotateTimeline extends CurveTimeline {
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
+ var frames:Vector. = this.frames;
var bone:Bone = skeleton.bones[boneIndex];
var r:Number;
+ if (time < frames[0]) {
+ if (setupPose) bone.rotation = bone.data.rotation;
+ return;
+ }
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
if (setupPose)
diff --git a/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as b/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as
index 4052f921f..065e730c9 100644
--- a/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as
@@ -45,9 +45,15 @@ public class ScaleTimeline extends TranslateTimeline {
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
-
var bone:Bone = skeleton.bones[boneIndex];
+
+ if (time < frames[0]) {
+ if (setupPose) {
+ bone.scaleX = bone.data.scaleX;
+ bone.scaleY = bone.data.scaleY;
+ }
+ return;
+ }
var x:Number, y:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
diff --git a/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as b/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as
index 79bbed794..1efbb0c79 100644
--- a/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/ShearTimeline.as
@@ -43,10 +43,16 @@ public class ShearTimeline extends TranslateTimeline {
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
-
+ var frames:Vector. = this.frames;
var bone:Bone = skeleton.bones[boneIndex];
+
+ if (time < frames[0]) {
+ if (setupPose) {
+ bone.shearX = bone.data.shearX;
+ bone.shearY = bone.data.shearY;
+ }
+ return;
+ }
var x:Number, y:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
diff --git a/spine-as3/spine-as3/src/spine/animation/TrackEntry.as b/spine-as3/spine-as3/src/spine/animation/TrackEntry.as
index fd7b1c5c6..e7ecb9d78 100644
--- a/spine-as3/spine-as3/src/spine/animation/TrackEntry.as
+++ b/spine-as3/spine-as3/src/spine/animation/TrackEntry.as
@@ -49,6 +49,9 @@ public class TrackEntry implements Poolable {
public var timelinesFirst:Vector. = new Vector.();
public var timelinesRotation:Vector. = new Vector.();
+ public function TrackEntry () {
+ }
+
public function getAnimationTime():Number {
if (loop) {
var duration:Number = animationEnd - animationStart;
diff --git a/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as b/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as
index 9636be357..40ab5bb96 100644
--- a/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as
@@ -62,10 +62,20 @@ public class TransformConstraintTimeline extends CurveTimeline {
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
+ var frames:Vector. = this.frames;
var constraint:TransformConstraint = skeleton.transformConstraints[transformConstraintIndex];
+ var data:TransformConstraintData;
+ if (time < frames[0]) {
+ if (setupPose) {
+ data = constraint.data;
+ constraint.rotateMix = constraint.data.rotateMix;
+ constraint.translateMix = constraint.data.translateMix;
+ constraint.scaleMix = constraint.data.scaleMix;
+ constraint.shearMix = constraint.data.shearMix;
+ }
+ return;
+ }
var rotate:Number, translate:Number, scale:Number, shear:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
@@ -91,7 +101,7 @@ public class TransformConstraintTimeline extends CurveTimeline {
shear += (frames[frame + SHEAR] - shear) * percent;
}
if (setupPose) {
- var data:TransformConstraintData = constraint.data;
+ data = constraint.data;
constraint.rotateMix = data.rotateMix + (rotate - data.rotateMix) * alpha;
constraint.translateMix = data.translateMix + (translate - data.translateMix) * alpha;
constraint.scaleMix = data.scaleMix + (scale - data.scaleMix) * alpha;
diff --git a/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as b/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as
index ee727c281..685e576ac 100644
--- a/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as
+++ b/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as
@@ -59,10 +59,16 @@ public class TranslateTimeline extends CurveTimeline {
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
- var frames:Vector. = this.frames;
- if (time < frames[0]) return; // Time is before first frame.
+ var frames:Vector. = this.frames;
var bone:Bone = skeleton.bones[boneIndex];
+ if (time < frames[0]) {
+ if (setupPose) {
+ bone.x = bone.data.x;
+ bone.y = bone.data.y;
+ }
+ return;
+ }
var x:Number, y:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
diff --git a/spine-starling/spine-starling-example/lib/spine-as3.swc b/spine-starling/spine-starling-example/lib/spine-as3.swc
index ce264476e..2d9fd25cf 100644
Binary files a/spine-starling/spine-starling-example/lib/spine-as3.swc and b/spine-starling/spine-starling-example/lib/spine-as3.swc differ
diff --git a/spine-starling/spine-starling-example/src/spine/examples/Main.as b/spine-starling/spine-starling-example/src/spine/examples/Main.as
index 838669a84..7184b430b 100644
--- a/spine-starling/spine-starling-example/src/spine/examples/Main.as
+++ b/spine-starling/spine-starling-example/src/spine/examples/Main.as
@@ -40,12 +40,12 @@ public class Main extends Sprite {
public function Main () {
var example:Class;
- // example = SpineboyExample;
+ example = SpineboyExample;
// example = GoblinsExample;
// example = RaptorExample;
// example = TankExample;
// example = VineExample;
- example = StretchymanExample;
+ // example = StretchymanExample;
_starling = new Starling(example, stage);
_starling.enableErrorChecking = true;
diff --git a/spine-starling/spine-starling/lib/spine-as3.swc b/spine-starling/spine-starling/lib/spine-as3.swc
index ce264476e..2d9fd25cf 100644
Binary files a/spine-starling/spine-starling/lib/spine-as3.swc and b/spine-starling/spine-starling/lib/spine-as3.swc differ