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

This commit is contained in:
NathanSweet 2016-02-25 07:47:20 +01:00
parent d93e1507fc
commit b0eec6f411

View File

@ -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. */