From b0eec6f411fbfe88bd413151e0c9cb4f06f86115 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Thu, 25 Feb 2016 07:47:20 +0100 Subject: [PATCH] Changed bone sorting so transform behavior is consistent when IK and transform constraints are mixed. --- .../com/esotericsoftware/spine/Skeleton.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index 83614524e..cedb7b49b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -132,16 +132,10 @@ public class Skeleton { int ikConstraintsCount = ikConstraints.size; int transformConstraintsCount = transformConstraints.size; updateCache.clear(); + for (int i = 0, n = bones.size; i < n; i++) { Bone bone = bones.get(i); updateCache.add(bone); - for (int ii = 0; ii < transformConstraintsCount; ii++) { - TransformConstraint transformConstraint = transformConstraints.get(ii); - if (bone == transformConstraint.bone) { - updateCache.add(transformConstraint); - break; - } - } for (int ii = 0; ii < ikConstraintsCount; ii++) { IkConstraint ikConstraint = ikConstraints.get(ii); if (bone == ikConstraint.bones.peek()) { @@ -150,6 +144,17 @@ public class Skeleton { } } } + + for (int i = 0; i < transformConstraintsCount; i++) { + TransformConstraint transformConstraint = transformConstraints.get(i); + for (int ii = updateCache.size - 1; ii >= 0; ii--) { + Updatable object = updateCache.get(ii); + if (object == transformConstraint.bone || object == transformConstraint.target) { + updateCache.insert(ii + 1, transformConstraint); + break; + } + } + } } /** Updates the world transform for each bone and applies constraints. */