Bladeren bron

[as3] Ported skin bones/constraints changes. See #1346.

badlogic 6 jaren geleden
bovenliggende
commit
900085d26f
43 gewijzigde bestanden met toevoegingen van 228 en 140 verwijderingen
  1. BIN
      spine-as3/spine-as3-example/lib/spine-as3.swc
  2. 9 0
      spine-as3/spine-as3/.settings/org.eclipse.core.resources.prefs
  3. 6 0
      spine-as3/spine-as3/src/spine/Bone.as
  4. 1 0
      spine-as3/spine-as3/src/spine/BoneData.as
  5. 46 34
      spine-as3/spine-as3/src/spine/ConstraintData.as
  6. 7 6
      spine-as3/spine-as3/src/spine/IkConstraint.as
  7. 2 13
      spine-as3/spine-as3/src/spine/IkConstraintData.as
  8. 6 5
      spine-as3/spine-as3/src/spine/PathConstraint.as
  9. 2 13
      spine-as3/spine-as3/src/spine/PathConstraintData.as
  10. 39 5
      spine-as3/spine-as3/src/spine/Skeleton.as
  11. 2 2
      spine-as3/spine-as3/src/spine/SkeletonData.as
  12. 67 27
      spine-as3/spine-as3/src/spine/SkeletonJson.as
  13. 4 4
      spine-as3/spine-as3/src/spine/Skin.as
  14. 7 6
      spine-as3/spine-as3/src/spine/TransformConstraint.as
  15. 4 16
      spine-as3/spine-as3/src/spine/TransformConstraintData.as
  16. 1 0
      spine-as3/spine-as3/src/spine/Updatable.as
  17. 1 0
      spine-as3/spine-as3/src/spine/animation/AnimationState.as
  18. 1 0
      spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as
  19. 1 0
      spine-as3/spine-as3/src/spine/animation/ColorTimeline.as
  20. 1 0
      spine-as3/spine-as3/src/spine/animation/DeformTimeline.as
  21. 1 0
      spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as
  22. 1 0
      spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as
  23. 1 0
      spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as
  24. 1 0
      spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as
  25. 1 0
      spine-as3/spine-as3/src/spine/animation/RotateTimeline.as
  26. 1 0
      spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as
  27. 1 0
      spine-as3/spine-as3/src/spine/animation/ShearTimeline.as
  28. 1 0
      spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as
  29. 1 0
      spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as
  30. 1 0
      spine-as3/spine-as3/src/spine/animation/TwoColorTimeline.as
  31. 2 1
      spine-as3/spine-as3/src/spine/attachments/VertexAttachment.as
  32. BIN
      spine-starling/spine-starling-example/lib/spine-as3.swc
  33. BIN
      spine-starling/spine-starling-example/lib/spine-starling.swc
  34. 1 1
      spine-starling/spine-starling-example/src/spine/examples/GoblinsExample.as
  35. BIN
      spine-starling/spine-starling/lib/spine-as3.swc
  36. 1 0
      spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as
  37. 1 1
      spine-ts/build/spine-all.js
  38. 1 1
      spine-ts/build/spine-canvas.js
  39. 1 1
      spine-ts/build/spine-core.js
  40. 1 1
      spine-ts/build/spine-player.js
  41. 1 1
      spine-ts/build/spine-threejs.js
  42. 1 1
      spine-ts/build/spine-webgl.js
  43. 1 1
      spine-ts/core/src/Skeleton.ts

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


+ 9 - 0
spine-as3/spine-as3/.settings/org.eclipse.core.resources.prefs

@@ -1,12 +1,21 @@
 eclipse.preferences.version=1
+encoding//src/spine/Bone.as=UTF-8
+encoding//src/spine/BoneData.as=UTF-8
 encoding//src/spine/IkConstraint.as=UTF-8
 encoding//src/spine/IkConstraintData.as=UTF-8
 encoding//src/spine/Interpolation.as=UTF-8
 encoding//src/spine/MathUtils.as=UTF-8
+encoding//src/spine/PathConstraint.as=UTF-8
+encoding//src/spine/PathConstraintData.as=UTF-8
 encoding//src/spine/Skeleton.as=UTF-8
 encoding//src/spine/SkeletonClipping.as=UTF-8
+encoding//src/spine/SkeletonData.as=UTF-8
 encoding//src/spine/SkeletonJson.as=UTF-8
+encoding//src/spine/Skin.as=UTF-8
+encoding//src/spine/TransformConstraint.as=UTF-8
+encoding//src/spine/TransformConstraintData.as=UTF-8
 encoding//src/spine/Triangulator.as=UTF-8
+encoding//src/spine/Updatable.as=UTF-8
 encoding//src/spine/Vertex.as=UTF-8
 encoding//src/spine/VertexEffect.as=UTF-8
 encoding//src/spine/animation/Animation.as=UTF-8

+ 6 - 0
spine-as3/spine-as3/src/spine/Bone.as

@@ -56,6 +56,8 @@ package spine {
 		public var worldX : Number;
 		public var worldY : Number;
 		internal var _sorted : Boolean;
+		public var active : Boolean;
+		
 
 		/** @param parent May be null. */
 		public function Bone(data : BoneData, skeleton : Skeleton, parent : Bone) {
@@ -66,6 +68,10 @@ package spine {
 			_parent = parent;
 			setToSetupPose();
 		}
+		
+		public function isActive() : Boolean {
+			return active;
+		}
 
 		/** Same as updateWorldTransform(). This method exists for Bone to implement Updatable. */
 		public function update() : void {

+ 1 - 0
spine-as3/spine-as3/src/spine/BoneData.as

@@ -41,6 +41,7 @@ package spine {
 		public var shearX : Number;
 		public var shearY : Number;
 		public var transformMode : TransformMode = TransformMode.normal;
+		public var skinRequired : Boolean;
 
 		/** @param parent May be null. */
 		public function BoneData(index : int, name : String, parent : BoneData) {

+ 46 - 34
spine-as3/spine-as3/src/spine/Constraint.as → spine-as3/spine-as3/src/spine/ConstraintData.as

@@ -1,34 +1,46 @@
-/******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated May 1, 2019. Replaces all prior versions.
- *
- * Copyright (c) 2013-2019, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS
- * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS
- * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-package spine {
-	public interface Constraint extends Updatable {
-		function getOrder() : Number;
-	}
-}
+/******************************************************************************
+ * Spine Runtimes License Agreement
+ * Last updated May 1, 2019. Replaces all prior versions.
+ *
+ * Copyright (c) 2013-2019, Esoteric Software LLC
+ *
+ * Integration of the Spine Runtimes into software or otherwise creating
+ * derivative works of the Spine Runtimes is permitted under the terms and
+ * conditions of Section 2 of the Spine Editor License Agreement:
+ * http://esotericsoftware.com/spine-editor-license
+ *
+ * Otherwise, it is permitted to integrate the Spine Runtimes into software
+ * or otherwise create derivative works of the Spine Runtimes (collectively,
+ * "Products"), provided that each user of the Products must obtain their own
+ * Spine Editor license and redistribution of the Products in any form must
+ * include this license and copyright notice.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS
+ * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+
+package spine {
+	public class ConstraintData {
+		public var name: String;
+		public var order: Number;
+		public var skinRequired: Boolean;	
+		
+		function ConstraintData(name: String, order: Number, skinRequired: Boolean) {
+			this.name = name;
+			this.order = order;
+			this.skinRequired = skinRequired;	
+		}
+		
+		public function toString() : String {
+			return name;
+		}
+	}
+}

+ 7 - 6
spine-as3/spine-as3/src/spine/IkConstraint.as

@@ -28,7 +28,7 @@
  *****************************************************************************/
 
 package spine {
-	public class IkConstraint implements Constraint {
+	public class IkConstraint implements Updatable {
 		internal var _data : IkConstraintData;
 		public var bones : Vector.<Bone>;
 		public var target : Bone;
@@ -36,6 +36,7 @@ package spine {
 		public var compress: Boolean;
 		public var stretch: Boolean;
 		public var mix : Number;
+		public var active : Boolean;
 
 		public function IkConstraint(data : IkConstraintData, skeleton : Skeleton) {
 			if (data == null) throw new ArgumentError("data cannot be null.");
@@ -51,6 +52,10 @@ package spine {
 				bones[bones.length] = skeleton.findBone(boneData.name);
 			target = skeleton.findBone(data.target._name);
 		}
+		
+		public function isActive() : Boolean {
+			return active;
+		}
 
 		public function apply() : void {
 			update();
@@ -67,16 +72,12 @@ package spine {
 			}
 		}
 
-		public function getOrder() : Number {
-			return _data.order;
-		}
-
 		public function get data() : IkConstraintData {
 			return _data;
 		}
 
 		public function toString() : String {
-			return _data._name;
+			return _data.name;
 		}
 
 		/** Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified in the world

+ 2 - 13
spine-as3/spine-as3/src/spine/IkConstraintData.as

@@ -28,9 +28,7 @@
  *****************************************************************************/
 
 package spine {
-	public class IkConstraintData {
-		internal var _name : String;
-		public var order : Number;
+	public class IkConstraintData extends ConstraintData {		
 		public var bones : Vector.<BoneData> = new Vector.<BoneData>();
 		public var target : BoneData;
 		public var mix : Number = 1;
@@ -40,16 +38,7 @@ package spine {
 		public var uniform : Boolean = false;
 
 		public function IkConstraintData(name : String) {
-			if (name == null) throw new ArgumentError("name cannot be null.");
-			_name = name;
-		}
-
-		public function get name() : String {
-			return _name;
-		}
-
-		public function toString() : String {
-			return _name;
+			super(name, 0, false);			
 		}
 	}
 }

+ 6 - 5
spine-as3/spine-as3/src/spine/PathConstraint.as

@@ -30,7 +30,7 @@
 package spine {
 	import spine.attachments.PathAttachment;
 
-	public class PathConstraint implements Constraint {
+	public class PathConstraint implements Updatable {
 		private static const NONE : int = -1, BEFORE : int = -2, AFTER : int = -3;
 		private static const epsilon : Number = 0.00001;
 		internal var _data : PathConstraintData;
@@ -43,6 +43,7 @@ package spine {
 		internal const _curves : Vector.<Number> = new Vector.<Number>();
 		internal const _lengths : Vector.<Number> = new Vector.<Number>();
 		internal const _segments : Vector.<Number> = new Vector.<Number>(10);
+		public var active : Boolean;
 
 		public function PathConstraint(data : PathConstraintData, skeleton : Skeleton) {
 			if (data == null) throw new ArgumentError("data cannot be null.");
@@ -57,6 +58,10 @@ package spine {
 			rotateMix = data.rotateMix;
 			translateMix = data.translateMix;
 		}
+		
+		public function isActive() : Boolean {
+			return active;
+		}
 
 		public function apply() : void {
 			update();
@@ -442,10 +447,6 @@ package spine {
 			return _data;
 		}
 
-		public function getOrder() : Number {
-			return _data.order;
-		}
-
 		public function toString() : String {
 			return _data.name;
 		}

+ 2 - 13
spine-as3/spine-as3/src/spine/PathConstraintData.as

@@ -28,9 +28,7 @@
  *****************************************************************************/
 
 package spine {
-	public dynamic class PathConstraintData {
-		internal var _name : String;
-		public var order : Number;
+	public dynamic class PathConstraintData extends ConstraintData {			
 		internal var _bones : Vector.<BoneData> = new Vector.<BoneData>();
 		public var target : SlotData;
 		public var positionMode : PositionMode;
@@ -40,20 +38,11 @@ package spine {
 		public var position : Number, spacing : Number, rotateMix : Number, translateMix : Number;
 
 		public function PathConstraintData(name : String) {
-			if (name == null) throw new ArgumentError("name cannot be null.");
-			_name = name;
+			super(name, 0, false);
 		}
 
 		public function get bones() : Vector.<BoneData> {
 			return _bones;
 		}
-
-		public function get name() : String {
-			return _name;
-		}
-
-		public function toString() : String {
-			return name;
-		}
 	}
 }

+ 39 - 5
spine-as3/spine-as3/src/spine/Skeleton.as

@@ -104,8 +104,24 @@ package spine {
 			var bones : Vector.<Bone> = this.bones;
 			var i : Number = 0;
 			var n : Number = 0;
-			for (i = 0, n = bones.length; i < n; i++)
-				bones[i]._sorted = false;
+			var bone : Bone;
+			for (i = 0, n = bones.length; i < n; i++) {
+				bone = bones[i];
+				bone._sorted = bone.data.skinRequired;
+				bone.active = !bone._sorted;				
+			}
+			
+			if (skin != null) {
+				var skinBones : Vector.<BoneData> = skin.bones;
+				for (i = 0, n = this.skin.bones.length; i < n; i++) {
+					bone = this.bones[skinBones[i].index];
+					do {
+						bone._sorted = false;
+						bone.active = true;
+						bone = bone.parent;
+					} while (bone != null);
+				}
+			}
 
 			// IK first, lowest hierarchy depth first.
 			var ikConstraints : Vector.<IkConstraint> = this.ikConstraints;
@@ -143,8 +159,17 @@ package spine {
 			for (i = 0, n = bones.length; i < n; i++)
 				sortBone(bones[i]);
 		}
+		
+		static function contains(list : Vector.<ConstraintData>, element : ConstraintData) : Boolean {
+			for (var i : Number = 0; i < list.length; i++)
+				if  (list[i] == element) return true;
+			return false;
+		}
 
 		private function sortIkConstraint(constraint : IkConstraint) : void {
+			constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && contains(this.skin.constraints, constraint.data)));
+			if (!constraint.active) return;
+			
 			var target : Bone = constraint.target;
 			sortBone(target);
 
@@ -164,6 +189,9 @@ package spine {
 		}
 
 		private function sortPathConstraint(constraint : PathConstraint) : void {
+			constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && contains(this.skin.constraints, constraint.data)));
+			if (!constraint.active) return;
+			
 			var slot : Slot = constraint.target;
 			var slotIndex : Number = slot.data.index;
 			var slotBone : Bone = slot.bone;
@@ -192,6 +220,9 @@ package spine {
 		}
 
 		private function sortTransformConstraint(constraint : TransformConstraint) : void {
+			constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && contains(this.skin.constraints, constraint.data)));
+			if (!constraint.active) return;
+			
 			sortBone(constraint.target);
 
 			var constrained : Vector.<Bone> = constraint.bones;
@@ -255,6 +286,7 @@ package spine {
 		private function sortReset(bones : Vector.<Bone>) : void {
 			for (var i : int = 0, n : int = bones.length; i < n; i++) {
 				var bone : Bone = bones[i];
+				if (!bone.active) continue;
 				if (bone._sorted) sortReset(bone.children);
 				bone._sorted = false;
 			}
@@ -393,6 +425,7 @@ package spine {
 		 * no old skin, each slot's setup mode attachment is attached from the new skin.
 		 * @param newSkin May be null. */
 		public function set skin(newSkin : Skin) : void {
+			if (newSkin == _skin) return;
 			if (newSkin) {
 				if (skin)
 					newSkin.attachAll(this, skin);
@@ -409,6 +442,7 @@ package spine {
 				}
 			}
 			_skin = newSkin;
+			updateCache();
 		}
 
 		/** @return May be null. */
@@ -451,7 +485,7 @@ package spine {
 		public function findIkConstraint(constraintName : String) : IkConstraint {
 			if (constraintName == null) throw new ArgumentError("constraintName cannot be null.");
 			for each (var ikConstraint : IkConstraint in ikConstraints)
-				if (ikConstraint._data._name == constraintName) return ikConstraint;
+				if (ikConstraint._data.name == constraintName) return ikConstraint;
 			return null;
 		}
 
@@ -459,7 +493,7 @@ package spine {
 		public function findTransformConstraint(constraintName : String) : TransformConstraint {
 			if (constraintName == null) throw new ArgumentError("constraintName cannot be null.");
 			for each (var transformConstraint : TransformConstraint in transformConstraints)
-				if (transformConstraint._data._name == constraintName) return transformConstraint;
+				if (transformConstraint._data.name == constraintName) return transformConstraint;
 			return null;
 		}
 
@@ -467,7 +501,7 @@ package spine {
 		public function findPathConstraint(constraintName : String) : PathConstraint {
 			if (constraintName == null) throw new ArgumentError("constraintName cannot be null.");
 			for each (var pathConstraint : PathConstraint in pathConstraints)
-				if (pathConstraint._data._name == constraintName) return pathConstraint;
+				if (pathConstraint._data.name == constraintName) return pathConstraint;
 			return null;
 		}
 

+ 2 - 2
spine-as3/spine-as3/src/spine/SkeletonData.as

@@ -120,7 +120,7 @@ package spine {
 		public function findIkConstraint(constraintName : String) : IkConstraintData {
 			if (constraintName == null) throw new ArgumentError("constraintName cannot be null.");
 			for each (var ikConstraintData : IkConstraintData in ikConstraints)
-				if (ikConstraintData._name == constraintName) return ikConstraintData;
+				if (ikConstraintData.name == constraintName) return ikConstraintData;
 			return null;
 		}
 
@@ -129,7 +129,7 @@ package spine {
 		public function findTransformConstraint(constraintName : String) : TransformConstraintData {
 			if (constraintName == null) throw new ArgumentError("constraintName cannot be null.");
 			for each (var transformConstraintData : TransformConstraintData in transformConstraints)
-				if (transformConstraintData._name == constraintName) return transformConstraintData;
+				if (transformConstraintData.name == constraintName) return transformConstraintData;
 			return null;
 		}
 

+ 67 - 27
spine-as3/spine-as3/src/spine/SkeletonJson.as

@@ -118,6 +118,7 @@ package spine {
 				boneData.shearX = Number(boneMap["shearX"] || 0);
 				boneData.shearY = Number(boneMap["shearY"] || 0);
 				boneData.transformMode = TransformMode[boneMap["transform"] || "normal"];
+				boneData.skinRequired = boneMap.hasOwnProperty("skin") ? boneMap["skin"] : false;
 				skeletonData.bones.push(boneData);
 			}
 
@@ -148,6 +149,7 @@ package spine {
 			for each (var constraintMap : Object in root["ik"]) {
 				var ikConstraintData : IkConstraintData = new IkConstraintData(constraintMap["name"]);
 				ikConstraintData.order = constraintMap["order"] || 0;
+				ikConstraintData.skinRequired = constraintMap.hasOwnProperty("skin") ? constraintMap["skin"] : false;
 
 				for each (boneName in constraintMap["bones"]) {
 					var bone : BoneData = skeletonData.findBone(boneName);
@@ -171,6 +173,7 @@ package spine {
 			for each (constraintMap in root["transform"]) {
 				var transformConstraintData : TransformConstraintData = new TransformConstraintData(constraintMap["name"]);
 				transformConstraintData.order = constraintMap["order"] || 0;
+				transformConstraintData.skinRequired = constraintMap.hasOwnProperty("skin") ? constraintMap["skin"] : false;
 
 				for each (boneName in constraintMap["bones"]) {
 					bone = skeletonData.findBone(boneName);
@@ -203,6 +206,7 @@ package spine {
 			for each (constraintMap in root["path"]) {
 				var pathConstraintData : PathConstraintData = new PathConstraintData(constraintMap["name"]);
 				pathConstraintData.order = constraintMap["order"] || 0;
+				pathConstraintData.skinRequired = constraintMap.hasOwnProperty("skin") ? constraintMap["skin"] : false;
 
 				for each (boneName in constraintMap["bones"]) {
 					bone = skeletonData.findBone(boneName);
@@ -228,17 +232,51 @@ package spine {
 			}
 
 			// Skins.
-			var skins : Object = root["skins"];
-			for (var skinName : String in skins) {
-				var skinMap : Object = skins[skinName];
-				var skin : Skin = new Skin(skinName);
-				for (slotName in skinMap) {
-					var slotIndex : int = skeletonData.findSlotIndex(slotName);
-					var slotEntry : Object = skinMap[slotName];
+			var skins : Object = root["skins"];			
+			for (var i : Number = 0; i < skins.length; i++) {
+				var ii : Number;
+				var skinMap : Object = skins[i];
+				var skin : Skin = new Skin(skinMap["name"]);
+				
+				if (skinMap["bones"]) {
+					for (ii = 0; ii < skinMap["bones"].length; ii++) {
+						var boneData : BoneData = skeletonData.findBone(skinMap["bones"][ii]);
+						if (boneData == null) throw new Error("Skin bone not found: " + skinMap["bones"][ii]);
+						skin.bones.push(boneData);
+					}
+				}
+				
+				if (skinMap["ik"]) {
+					for (ii = 0; ii < skinMap["ik"].length; ii++) {
+						var constraint : ConstraintData = skeletonData.findIkConstraint(skinMap["ik"][ii]);
+						if (constraint == null) throw new Error("Skin IK constraint not found: " + skinMap["ik"][ii]);
+						skin.constraints.push(constraint);
+					}
+				}
+				
+				if (skinMap["transform"]) {
+					for (ii = 0; ii < skinMap["transform"].length; ii++) {
+						var constraint : ConstraintData = skeletonData.findIkConstraint(skinMap["transform"][ii]);
+						if (constraint == null) throw new Error("Skin transform constraint not found: " + skinMap["transform"][ii]);
+						skin.constraints.push(constraint);
+					}
+				}
+				
+				if (skinMap["path"]) {
+					for (ii = 0; ii < skinMap["path"].length; ii++) {
+						var constraint : ConstraintData = skeletonData.findIkConstraint(skinMap["path"][ii]);
+						if (constraint == null) throw new Error("Skin path constraint not found: " + skinMap["path"][ii]);
+						skin.constraints.push(constraint);
+					}
+				}
+				
+				for (slotName in skinMap.attachments) {
+					var slot : SlotData = skeletonData.findSlot(slotName);
+					var slotEntry : Object = skinMap.attachments[slotName];
 					for (var attachmentName : String in slotEntry) {
-						var attachment : Attachment = readAttachment(slotEntry[attachmentName], skin, slotIndex, attachmentName, skeletonData);
+						var attachment : Attachment = readAttachment(slotEntry[attachmentName], skin, slot.index, attachmentName, skeletonData);
 						if (attachment != null)
-							skin.setAttachment(slotIndex, attachmentName, attachment);
+							skin.setAttachment(slot.index, attachmentName, attachment);
 					}
 				}
 				skeletonData.skins[skeletonData.skins.length] = skin;
@@ -440,7 +478,7 @@ package spine {
 
 						frameIndex = 0;
 						for each (valueMap in values)
-							attachmentTimeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
+							attachmentTimeline.setFrame(frameIndex++, Number(valueMap["time"] || 0), valueMap["name"]);
 						timelines[timelines.length] = attachmentTimeline;
 						duration = Math.max(duration, attachmentTimeline.frames[attachmentTimeline.frameCount - 1]);
 					} else if (timelineName == "color") {
@@ -454,7 +492,7 @@ package spine {
 							var g : Number = toColor(color, 1);
 							var b : Number = toColor(color, 2);
 							var a : Number = toColor(color, 3);
-							colorTimeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
+							colorTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), r, g, b, a);
 							readCurve(valueMap, colorTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -472,7 +510,7 @@ package spine {
 							var dark : Color = new Color(0, 0, 0, 0);
 							light.setFrom(toColor(color, 0), toColor(color, 1), toColor(color, 2), toColor(color, 3));
 							dark.setFrom(toColor(darkColor, 0), toColor(darkColor, 1), toColor(darkColor, 2), toColor(darkColor, 3));
-							twoColorTimeline.setFrame(frameIndex, valueMap["time"], light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);
+							twoColorTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);
 							readCurve(valueMap, twoColorTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -497,7 +535,7 @@ package spine {
 
 						frameIndex = 0;
 						for each (valueMap in values) {
-							rotateTimeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
+							rotateTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), Number(valueMap["angle"] || 0));
 							readCurve(valueMap, rotateTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -506,9 +544,11 @@ package spine {
 					} else if (timelineName == "translate" || timelineName == "scale" || timelineName == "shear") {
 						var translateTimeline : TranslateTimeline;
 						var timelineScale : Number = 1;
-						if (timelineName == "scale")
+						var defaultValue : Number = 0;
+						if (timelineName == "scale") {
 							translateTimeline = new ScaleTimeline(values.length);
-						else if (timelineName == "shear")
+							defaultValue = 1;
+						} else if (timelineName == "shear")
 							translateTimeline = new ShearTimeline(values.length);
 						else {
 							translateTimeline = new TranslateTimeline(values.length);
@@ -518,9 +558,9 @@ package spine {
 
 						frameIndex = 0;
 						for each (valueMap in values) {
-							var x : Number = Number(valueMap["x"] || 0) * timelineScale;
-							var y : Number = Number(valueMap["y"] || 0) * timelineScale;
-							translateTimeline.setFrame(frameIndex, valueMap["time"], x, y);
+							var x : Number = Number(valueMap["x"] || defaultValue) * timelineScale;
+							var y : Number = Number(valueMap["y"] || defaultValue) * timelineScale;
+							translateTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), x, y);
 							readCurve(valueMap, translateTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -543,7 +583,7 @@ package spine {
 					var bendDirection : int = (!valueMap.hasOwnProperty("bendPositive") || valueMap["bendPositive"]) ? 1 : -1;
 					var compress : Boolean = (valueMap.hasOwnProperty("compress") && valueMap["compress"]);
 					var stretch : Boolean = (valueMap.hasOwnProperty("stretch") && valueMap["stretch"]);
-					ikTimeline.setFrame(frameIndex, valueMap["time"], mix, bendDirection, compress, stretch);
+					ikTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), mix, bendDirection, compress, stretch);
 					readCurve(valueMap, ikTimeline, frameIndex);
 					frameIndex++;
 				}
@@ -563,7 +603,7 @@ package spine {
 					var translateMix : Number = valueMap.hasOwnProperty("translateMix") ? valueMap["translateMix"] : 1;
 					var scaleMix : Number = valueMap.hasOwnProperty("scaleMix") ? valueMap["scaleMix"] : 1;
 					var shearMix : Number = valueMap.hasOwnProperty("shearMix") ? valueMap["shearMix"] : 1;
-					transformTimeline.setFrame(frameIndex, valueMap["time"], rotateMix, translateMix, scaleMix, shearMix);
+					transformTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), rotateMix, translateMix, scaleMix, shearMix);
 					readCurve(valueMap, transformTimeline, frameIndex);
 					frameIndex++;
 				}
@@ -596,7 +636,7 @@ package spine {
 						frameIndex = 0;
 						for each (valueMap in values) {
 							var value : Number = valueMap[timelineName] || 0;
-							pathTimeline.setFrame(frameIndex, valueMap["time"], value * timelineScale);
+							pathTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), value * timelineScale);
 							readCurve(valueMap, pathTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -609,7 +649,7 @@ package spine {
 						for each (valueMap in values) {
 							rotateMix = valueMap.hasOwnProperty("rotateMix") ? valueMap["rotateMix"] : 1;
 							translateMix = valueMap.hasOwnProperty("translateMix") ? valueMap["translateMix"] : 1;
-							pathMixTimeline.setFrame(frameIndex, valueMap["time"], rotateMix, translateMix);
+							pathMixTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), rotateMix, translateMix);
 							readCurve(valueMap, pathMixTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -663,7 +703,7 @@ package spine {
 								}
 							}
 
-							deformTimeline.setFrame(frameIndex, valueMap["time"], deform);
+							deformTimeline.setFrame(frameIndex, Number(valueMap["time"] || 0), deform);
 							readCurve(valueMap, deformTimeline, frameIndex);
 							frameIndex++;
 						}
@@ -704,7 +744,7 @@ package spine {
 						for (i = slotCount - 1; i >= 0; i--)
 							if (drawOrder[i] == -1) drawOrder[i] = unchanged[--unchangedIndex];
 					}
-					drawOrderTimeline.setFrame(frameIndex++, drawOrderMap["time"], drawOrder);
+					drawOrderTimeline.setFrame(frameIndex++, Number(drawOrderMap["time"] || 0), drawOrder);
 				}
 				timelines[timelines.length] = drawOrderTimeline;
 				duration = Math.max(duration, drawOrderTimeline.frames[drawOrderTimeline.frameCount - 1]);
@@ -717,7 +757,7 @@ package spine {
 				for each (var eventMap : Object in eventsMap) {
 					var eventData : EventData = skeletonData.findEvent(eventMap["name"]);
 					if (!eventData) throw new Error("Event not found: " + eventMap["name"]);
-					var event : Event = new Event(eventMap["time"], eventData);
+					var event : Event = new Event(Number(eventMap["time"] || 0), eventData);
 					event.intValue = eventMap.hasOwnProperty("int") ? eventMap["int"] : eventData.intValue;
 					event.floatValue = eventMap.hasOwnProperty("float") ? eventMap["float"] : eventData.floatValue;
 					event.stringValue = eventMap.hasOwnProperty("string") ? eventMap["string"] : eventData.stringValue;
@@ -739,8 +779,8 @@ package spine {
 			if (!curve) return;
 			if (curve == "stepped")
 				timeline.setStepped(frameIndex);
-			else if (curve is Array)
-				timeline.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
+			else
+				timeline.setCurve(frameIndex, parseFloat(curve.toString()), Number(map["c2"] || 0), Number(map["c3"] || 1), Number(map["c4"] || 1));
 		}
 
 		static private function toColor(hexString : String, colorIndex : int) : Number {

+ 4 - 4
spine-as3/spine-as3/src/spine/Skin.as

@@ -38,7 +38,7 @@ package spine {
 		internal var _name : String;
 		private var _attachments : Vector.<Dictionary> = new Vector.<Dictionary>();
 		private var _bones: Vector.<BoneData> = new Vector.<BoneData>();
-		private var _constraints: Vector.<Constraint> = new Vector.<Constraint>();
+		private var _constraints: Vector.<ConstraintData> = new Vector.<ConstraintData>();
 
 		public function Skin(name : String) {
 			if (name == null) throw new ArgumentError("name cannot be null.");
@@ -69,7 +69,7 @@ package spine {
 			}
 
 			for(i = 0; i < skin._constraints.length; i++) {
-				var constraint : Constraint = skin._constraints[i];
+				var constraint : ConstraintData = skin._constraints[i];
 				contained = false;
 				for (j = 0; j < this._constraints.length; j++) {
 					if (_constraints[j] == constraint) {
@@ -105,7 +105,7 @@ package spine {
 			}
 
 			for(i = 0; i < skin._constraints.length; i++) {
-				var constraint : Constraint = skin._constraints[i];
+				var constraint : ConstraintData = skin._constraints[i];
 				contained = false;
 				for (j = 0; j < this._constraints.length; j++) {
 					if (_constraints[j] == constraint) {
@@ -181,7 +181,7 @@ package spine {
 			return _bones;
 		}
 		
-		public function get constraints() : Vector.<Constraint> {
+		public function get constraints() : Vector.<ConstraintData> {
 			return _constraints;
 		}
 

+ 7 - 6
spine-as3/spine-as3/src/spine/TransformConstraint.as

@@ -28,7 +28,7 @@
  *****************************************************************************/
 
 package spine {
-	public class TransformConstraint implements Constraint {
+	public class TransformConstraint implements Updatable {
 		internal var _data : TransformConstraintData;
 		internal var _bones : Vector.<Bone>;
 		public var target : Bone;
@@ -37,6 +37,7 @@ package spine {
 		public var scaleMix : Number;
 		public var shearMix : Number;
 		internal var _temp : Vector.<Number> = new Vector.<Number>(2);
+		public var active : Boolean;
 
 		public function TransformConstraint(data : TransformConstraintData, skeleton : Skeleton) {
 			if (data == null) throw new ArgumentError("data cannot be null.");
@@ -51,6 +52,10 @@ package spine {
 				_bones.push(skeleton.findBone(boneData.name));
 			target = skeleton.findBone(data.target._name);
 		}
+		
+		public function isActive() : Boolean {
+			return active;
+		}
 
 		public function apply() : void {
 			update();
@@ -274,10 +279,6 @@ package spine {
 			}
 		}
 
-		public function getOrder() : Number {
-			return _data.order;
-		}
-
 		public function get data() : TransformConstraintData {
 			return _data;
 		}
@@ -287,7 +288,7 @@ package spine {
 		}
 
 		public function toString() : String {
-			return _data._name;
+			return _data.name;
 		}
 	}
 }

+ 4 - 16
spine-as3/spine-as3/src/spine/TransformConstraintData.as

@@ -28,9 +28,7 @@
  *****************************************************************************/
 
 package spine {
-	public class TransformConstraintData {
-		internal var _name : String;
-		public var order : Number;
+	public class TransformConstraintData extends ConstraintData {			
 		internal var _bones : Vector.<BoneData> = new Vector.<BoneData>();
 		public var target : BoneData;
 		public var rotateMix : Number;
@@ -47,21 +45,11 @@ package spine {
 		public var local : Boolean = false;
 
 		public function TransformConstraintData(name : String) {
-			if (name == null) throw new ArgumentError("name cannot be null.");
-			_name = name;
+			super(name, 0, false);
 		}
 
-		public function get bones() : Vector.<BoneData> {
-			;
+		public function get bones() : Vector.<BoneData> {			
 			return _bones;
-		}
-
-		public function get name() : String {
-			return _name;
-		}
-
-		public function toString() : String {
-			return _name;
-		}
+		}		
 	}
 }

+ 1 - 0
spine-as3/spine-as3/src/spine/Updatable.as

@@ -30,5 +30,6 @@
 package spine {
 	public interface Updatable {
 		function update() : void;
+		function isActive() : Boolean;
 	}
 }

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/AnimationState.as

@@ -304,6 +304,7 @@ package spine.animation {
 			var rotateTimeline : RotateTimeline = RotateTimeline(timeline);
 			var frames : Vector.<Number> = rotateTimeline.frames;
 			var bone : Bone = skeleton.bones[rotateTimeline.boneIndex];
+			if (!bone.active) return;
 			var r1 : Number, r2 : Number;
 			if (time < frames[0]) {
 				switch (blend) {

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as

@@ -59,6 +59,7 @@ package spine.animation {
 		public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var attachmentName : String;
 			var slot : Slot = skeleton.slots[slotIndex];
+			if (!slot.bone.active) return;
 			if (direction == MixDirection.Out && blend == MixBlend.setup) {
 				attachmentName = slot.data.attachmentName;
 				slot.attachment = attachmentName == null ? null : skeleton.getAttachmentForSlotIndex(slotIndex, attachmentName);

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/ColorTimeline.as

@@ -62,6 +62,7 @@ package spine.animation {
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var frames : Vector.<Number> = this.frames;
 			var slot : Slot = skeleton.slots[slotIndex];
+			if (!slot.bone.active) return;
 
 			if (time < frames[0]) {
 				switch (blend) {

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/DeformTimeline.as

@@ -60,6 +60,7 @@ package spine.animation {
 			var vertexAttachment : VertexAttachment;
 			var setupVertices : Vector.<Number>;
 			var slot : Slot = skeleton.slots[slotIndex];
+			if (!slot.bone.active) return;
 			var slotAttachment : Attachment = slot.attachment;
 			if (!(slotAttachment is VertexAttachment) || !(VertexAttachment(slotAttachment).deformAttachment == attachment)) return;
 			

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/IkConstraintTimeline.as

@@ -60,6 +60,7 @@ package spine.animation {
 
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var constraint : IkConstraint = skeleton.ikConstraints[ikConstraintIndex];
+			if (!constraint.active) return;
 			if (time < frames[0]) {
 				switch (blend) {
 				case MixBlend.setup:

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/PathConstraintMixTimeline.as

@@ -58,6 +58,7 @@ package spine.animation {
 
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var constraint : PathConstraint = skeleton.pathConstraints[pathConstraintIndex];
+			if (!constraint.active) return;
 			if (time < frames[0]) {
 				switch (blend) {
 				case MixBlend.setup:

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/PathConstraintPositionTimeline.as

@@ -57,6 +57,7 @@ package spine.animation {
 
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var constraint : PathConstraint = skeleton.pathConstraints[pathConstraintIndex];
+			if (!constraint.active) return;
 			if (time < frames[0]) {
 				switch (blend) {
 				case MixBlend.setup:

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/PathConstraintSpacingTimeline.as

@@ -43,6 +43,7 @@ package spine.animation {
 
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var constraint : PathConstraint = skeleton.pathConstraints[pathConstraintIndex];
+			if (!constraint.active) return;
 			if (time < frames[0]) {
 				switch (blend) {
 				case MixBlend.setup:

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/RotateTimeline.as

@@ -59,6 +59,7 @@ package spine.animation {
 			var frames : Vector.<Number> = this.frames;
 
 			var bone : Bone = skeleton.bones[boneIndex];
+			if (!bone.active) return;
 			var r : Number;
 			if (time < frames[0]) {
 				switch (blend) {

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as

@@ -45,6 +45,7 @@ package spine.animation {
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var frames : Vector.<Number> = this.frames;
 			var bone : Bone = skeleton.bones[boneIndex];
+			if (!bone.active) return;
 
 			if (time < frames[0]) {
 				switch (blend) {

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/ShearTimeline.as

@@ -44,6 +44,7 @@ package spine.animation {
 		override public function apply(skeleton : Skeleton, lastTime : Number, time : Number, firedEvents : Vector.<Event>, alpha : Number, blend : MixBlend, direction : MixDirection) : void {
 			var frames : Vector.<Number> = this.frames;
 			var bone : Bone = skeleton.bones[boneIndex];
+			if (!bone.active) return;
 
 			if (time < frames[0]) {
 				switch (blend) {

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/TransformConstraintTimeline.as

@@ -63,6 +63,7 @@ package spine.animation {
 			var frames : Vector.<Number> = this.frames;
 
 			var constraint : TransformConstraint = skeleton.transformConstraints[transformConstraintIndex];
+			if (!constraint.active) return;
 			var data : TransformConstraintData;
 			if (time < frames[0]) {
 				data = constraint.data;

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as

@@ -60,6 +60,7 @@ package spine.animation {
 			var frames : Vector.<Number> = this.frames;
 
 			var bone : Bone = skeleton.bones[boneIndex];
+			if (!bone.active) return;
 			if (time < frames[0]) {
 				switch (blend) {
 				case MixBlend.setup:

+ 1 - 0
spine-as3/spine-as3/src/spine/animation/TwoColorTimeline.as

@@ -67,6 +67,7 @@ package spine.animation {
 			var frames : Vector.<Number> = this.frames;
 			var slot : Slot = skeleton.slots[slotIndex];
 			var light : Color, dark : Color;
+			if (!slot.bone.active) return;
 
 			if (time < frames[0]) {
 				switch (blend) {

+ 2 - 1
spine-as3/spine-as3/src/spine/attachments/VertexAttachment.as

@@ -39,10 +39,11 @@ package spine.attachments {
 		public var vertices : Vector.<Number>;
 		public var worldVerticesLength : int;
 		public var id : int = (nextID++ & 65535) << 11;
-		public var deformAttachment : VertexAttachment = this;
+		public var deformAttachment : VertexAttachment;
 
 		public function VertexAttachment(name : String) {
 			super(name);
+			deformAttachment = this;
 		}
 
 		/** Transforms local vertices to world coordinates.

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


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


+ 1 - 1
spine-starling/spine-starling-example/src/spine/examples/GoblinsExample.as

@@ -88,7 +88,7 @@ package spine.examples {
 			skeleton.skeleton.setSlotsToSetupPose();
 			skeleton.state.setAnimationByName(0, "walk", true);
 			
-			var skin : Skin = new Skin("test");
+			var skin : Skin = new Skin("test");			
 			skin.copySkin(skeletonData.findSkin("goblingirl"));
 			skeleton.skeleton.skin = skin;
 			skeleton.skeleton.setToSetupPose();

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


+ 1 - 0
spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as

@@ -98,6 +98,7 @@ package spine.starling {
 			for (var i : int = 0, n : int = drawOrder.length; i < n; ++i) {
 				var worldVertices : Vector.<Number> = _tempVertices;
 				var slot : Slot = drawOrder[i];
+				if (!slot.bone.active) continue;
 
 				if (slot.attachment is RegionAttachment) {
 					var region : RegionAttachment = slot.attachment as RegionAttachment;

+ 1 - 1
spine-ts/build/spine-all.js

@@ -3747,7 +3747,7 @@ var spine;
 		Skeleton.prototype.sortReset = function (bones) {
 			for (var i = 0, n = bones.length; i < n; i++) {
 				var bone = bones[i];
-				if (!bone.update)
+				if (!bone.active)
 					continue;
 				if (bone.sorted)
 					this.sortReset(bone.children);

+ 1 - 1
spine-ts/build/spine-canvas.js

@@ -3747,7 +3747,7 @@ var spine;
 		Skeleton.prototype.sortReset = function (bones) {
 			for (var i = 0, n = bones.length; i < n; i++) {
 				var bone = bones[i];
-				if (!bone.update)
+				if (!bone.active)
 					continue;
 				if (bone.sorted)
 					this.sortReset(bone.children);

+ 1 - 1
spine-ts/build/spine-core.js

@@ -3747,7 +3747,7 @@ var spine;
 		Skeleton.prototype.sortReset = function (bones) {
 			for (var i = 0, n = bones.length; i < n; i++) {
 				var bone = bones[i];
-				if (!bone.update)
+				if (!bone.active)
 					continue;
 				if (bone.sorted)
 					this.sortReset(bone.children);

+ 1 - 1
spine-ts/build/spine-player.js

@@ -3747,7 +3747,7 @@ var spine;
 		Skeleton.prototype.sortReset = function (bones) {
 			for (var i = 0, n = bones.length; i < n; i++) {
 				var bone = bones[i];
-				if (!bone.update)
+				if (!bone.active)
 					continue;
 				if (bone.sorted)
 					this.sortReset(bone.children);

+ 1 - 1
spine-ts/build/spine-threejs.js

@@ -3747,7 +3747,7 @@ var spine;
 		Skeleton.prototype.sortReset = function (bones) {
 			for (var i = 0, n = bones.length; i < n; i++) {
 				var bone = bones[i];
-				if (!bone.update)
+				if (!bone.active)
 					continue;
 				if (bone.sorted)
 					this.sortReset(bone.children);

+ 1 - 1
spine-ts/build/spine-webgl.js

@@ -3747,7 +3747,7 @@ var spine;
 		Skeleton.prototype.sortReset = function (bones) {
 			for (var i = 0, n = bones.length; i < n; i++) {
 				var bone = bones[i];
-				if (!bone.update)
+				if (!bone.active)
 					continue;
 				if (bone.sorted)
 					this.sortReset(bone.children);

+ 1 - 1
spine-ts/core/src/Skeleton.ts

@@ -270,7 +270,7 @@ module spine {
 		sortReset (bones: Array<Bone>) {
 			for (let i = 0, n = bones.length; i < n; i++) {
 				let bone = bones[i];
-				if (!bone.update) continue;
+				if (!bone.active) continue;
 				if (bone.sorted) this.sortReset(bone.children);
 				bone.sorted = false;
 			}