diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 1b32a7cd4..410bb3adc 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/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(); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 5390e0f39..a8f528f17 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/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"); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java index eb9b2d4c8..20ee2c9f3 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java +++ b/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)); }