Jelajahi Sumber

Changed bone sorting so transform behavior is consistent when IK and transform constraints are mixed.

NathanSweet 9 tahun lalu
induk
melakukan
b0eec6f411

+ 12 - 7
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java

@@ -132,16 +132,10 @@ public class Skeleton {
 		int ikConstraintsCount = ikConstraints.size;
 		int ikConstraintsCount = ikConstraints.size;
 		int transformConstraintsCount = transformConstraints.size;
 		int transformConstraintsCount = transformConstraints.size;
 		updateCache.clear();
 		updateCache.clear();
+
 		for (int i = 0, n = bones.size; i < n; i++) {
 		for (int i = 0, n = bones.size; i < n; i++) {
 			Bone bone = bones.get(i);
 			Bone bone = bones.get(i);
 			updateCache.add(bone);
 			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++) {
 			for (int ii = 0; ii < ikConstraintsCount; ii++) {
 				IkConstraint ikConstraint = ikConstraints.get(ii);
 				IkConstraint ikConstraint = ikConstraints.get(ii);
 				if (bone == ikConstraint.bones.peek()) {
 				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. */
 	/** Updates the world transform for each bone and applies constraints. */