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