Don't change IK constraint indices.

This commit is contained in:
NathanSweet 2016-06-03 22:38:10 +02:00
parent 99c41f7581
commit b94e04a7a5

View File

@ -43,7 +43,7 @@ public class Skeleton {
final Array<Bone> bones; final Array<Bone> bones;
final Array<Slot> slots; final Array<Slot> slots;
Array<Slot> drawOrder; Array<Slot> drawOrder;
final Array<IkConstraint> ikConstraints; final Array<IkConstraint> ikConstraints, ikConstraintsSorted;
final Array<TransformConstraint> transformConstraints; final Array<TransformConstraint> transformConstraints;
final Array<PathConstraint> pathConstraints; final Array<PathConstraint> pathConstraints;
final Array<Updatable> updateCache = new Array(); final Array<Updatable> updateCache = new Array();
@ -80,6 +80,7 @@ public class Skeleton {
} }
ikConstraints = new Array(data.ikConstraints.size); ikConstraints = new Array(data.ikConstraints.size);
ikConstraintsSorted = new Array(ikConstraints.size);
for (IkConstraintData ikConstraintData : data.ikConstraints) for (IkConstraintData ikConstraintData : data.ikConstraints)
ikConstraints.add(new IkConstraint(ikConstraintData, this)); ikConstraints.add(new IkConstraint(ikConstraintData, this));
@ -118,6 +119,7 @@ public class Skeleton {
drawOrder.add(slots.get(slot.data.index)); drawOrder.add(slots.get(slot.data.index));
ikConstraints = new Array(skeleton.ikConstraints.size); ikConstraints = new Array(skeleton.ikConstraints.size);
ikConstraintsSorted = new Array(ikConstraints.size);
for (IkConstraint ikConstraint : skeleton.ikConstraints) for (IkConstraint ikConstraint : skeleton.ikConstraints)
ikConstraints.add(new IkConstraint(ikConstraint, this)); ikConstraints.add(new IkConstraint(ikConstraint, this));
@ -147,8 +149,10 @@ public class Skeleton {
for (int i = 0, n = bones.size; i < n; i++) for (int i = 0, n = bones.size; i < n; i++)
bones.get(i).sorted = false; bones.get(i).sorted = false;
// IK first, in hierarchy depth order. // IK first, lowest hierarchy depth first.
Array<IkConstraint> ikConstraints = this.ikConstraints; Array<IkConstraint> ikConstraints = this.ikConstraintsSorted;
ikConstraints.clear();
ikConstraints.addAll(this.ikConstraints);
int ikCount = ikConstraints.size; int ikCount = ikConstraints.size;
for (int i = 0, level, n = ikCount; i < n; i++) { for (int i = 0, level, n = ikCount; i < n; i++) {
IkConstraint ik = ikConstraints.get(i); IkConstraint ik = ikConstraints.get(i);