Browse Source

Added loading of transform constraints from JSON and binary.

NathanSweet 9 năm trước cách đây
mục cha
commit
5835337bed

+ 11 - 0
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java

@@ -148,6 +148,17 @@ public class SkeletonBinary {
 				skeletonData.ikConstraints.add(ikConstraintData);
 			}
 
+			// Transform constraints.
+			for (int i = 0, n = input.readInt(true); i < n; i++) {
+				TransformConstraintData transformConstraintData = new TransformConstraintData(input.readString());
+				transformConstraintData.bone = skeletonData.bones.get(input.readInt(true));
+				transformConstraintData.target = skeletonData.bones.get(input.readInt(true));
+				transformConstraintData.translateMix = input.readFloat();
+				transformConstraintData.x = input.readFloat();
+				transformConstraintData.y = input.readFloat();
+				skeletonData.transformConstraints.add(transformConstraintData);
+			}
+
 			// Slots.
 			for (int i = 0, n = input.readInt(true); i < n; i++) {
 				String slotName = input.readString();

+ 19 - 0
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java

@@ -146,6 +146,25 @@ public class SkeletonJson {
 			skeletonData.ikConstraints.add(ikConstraintData);
 		}
 
+		// Transform constraints.
+		for (JsonValue transformMap = root.getChild("transform"); transformMap != null; transformMap = transformMap.next) {
+			TransformConstraintData transformConstraintData = new TransformConstraintData(transformMap.getString("name"));
+
+			String boneName = transformMap.getString("bone");
+			transformConstraintData.bone = skeletonData.findBone(boneName);
+			if (transformConstraintData.bone == null) throw new SerializationException("Bone not found: " + boneName);
+
+			String targetName = transformMap.getString("target");
+			transformConstraintData.target = skeletonData.findBone(targetName);
+			if (transformConstraintData.target == null) throw new SerializationException("Target bone not found: " + targetName);
+
+			transformConstraintData.translateMix = transformMap.getFloat("translateMix", 1);
+			transformConstraintData.x = transformMap.getFloat("x", 0);
+			transformConstraintData.y = transformMap.getFloat("y", 0);
+
+			skeletonData.transformConstraints.add(transformConstraintData);
+		}
+
 		// Slots.
 		for (JsonValue slotMap = root.getChild("slots"); slotMap != null; slotMap = slotMap.next) {
 			String slotName = slotMap.getString("name");

+ 1 - 1
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java

@@ -23,7 +23,7 @@ public class TransformConstraint implements Updatable {
 	public TransformConstraint (TransformConstraint constraint, Skeleton skeleton) {
 		data = constraint.data;
 		translateMix = data.translateMix;
-		bone = skeleton.bones.get(constraint.bone.skeleton.bones.indexOf(constraint.target, true));
+		bone = skeleton.bones.get(constraint.bone.skeleton.bones.indexOf(constraint.bone, true));
 		target = skeleton.bones.get(constraint.target.skeleton.bones.indexOf(constraint.target, true));
 	}