mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 22:34:53 +08:00
[libgdx] Improved constraint sorting.
This commit is contained in:
parent
6a5d054726
commit
20683ff9ce
@ -75,10 +75,9 @@ public class IkConstraint extends Constraint<IkConstraint, IkConstraintData, IkC
|
||||
|
||||
void sort (Skeleton skeleton) {
|
||||
skeleton.sortBone(target);
|
||||
|
||||
Bone parent = bones.items[0].bone;
|
||||
skeleton.sortBone(parent);
|
||||
skeleton.resetCache(parent);
|
||||
skeleton.sortBone(parent);
|
||||
if (bones.size == 1) {
|
||||
skeleton.updateCache.add(this);
|
||||
skeleton.sortReset(parent.children);
|
||||
@ -86,9 +85,7 @@ public class IkConstraint extends Constraint<IkConstraint, IkConstraintData, IkC
|
||||
Bone child = bones.items[1].bone;
|
||||
skeleton.resetCache(child);
|
||||
skeleton.sortBone(child);
|
||||
|
||||
skeleton.updateCache.add(this);
|
||||
|
||||
skeleton.sortReset(parent.children);
|
||||
child.sorted = true;
|
||||
}
|
||||
|
||||
@ -464,9 +464,7 @@ public class PathConstraint extends Constraint<PathConstraint, PathConstraintDat
|
||||
if (skeleton.skin != null) sortPathConstraintAttachment(skeleton, skeleton.skin, slotIndex, slotBone);
|
||||
if (skeleton.data.defaultSkin != null && skeleton.data.defaultSkin != skeleton.skin)
|
||||
sortPathConstraintAttachment(skeleton, skeleton.data.defaultSkin, slotIndex, slotBone);
|
||||
|
||||
sortPathConstraintAttachment(skeleton, slot.pose.attachment, slotBone);
|
||||
|
||||
BonePose[] bones = this.bones.items;
|
||||
int boneCount = this.bones.size;
|
||||
for (int i = 0; i < boneCount; i++) {
|
||||
@ -474,9 +472,7 @@ public class PathConstraint extends Constraint<PathConstraint, PathConstraintDat
|
||||
skeleton.resetCache(bone);
|
||||
skeleton.sortBone(bone);
|
||||
}
|
||||
|
||||
skeleton.updateCache.add(this);
|
||||
|
||||
for (int i = 0; i < boneCount; i++)
|
||||
skeleton.sortReset(bones[i].bone.children);
|
||||
for (int i = 0; i < boneCount; i++)
|
||||
|
||||
@ -269,12 +269,9 @@ public class PhysicsConstraint extends Constraint<PhysicsConstraint, PhysicsCons
|
||||
void sort (Skeleton skeleton) {
|
||||
Bone bone = this.bone.bone;
|
||||
skeleton.sortBone(bone);
|
||||
|
||||
skeleton.resetCache(bone);
|
||||
skeleton.updateCache.add(this);
|
||||
|
||||
skeleton.sortReset(bone.children);
|
||||
bone.sorted = true;
|
||||
}
|
||||
|
||||
boolean isSourceActive () {
|
||||
|
||||
@ -201,7 +201,7 @@ public class Skeleton {
|
||||
}
|
||||
|
||||
void sortBone (Bone bone) {
|
||||
if (bone.sorted) return;
|
||||
if (bone.sorted || !bone.active) return;
|
||||
Bone parent = bone.parent;
|
||||
if (parent != null) sortBone(parent);
|
||||
bone.sorted = true;
|
||||
@ -212,9 +212,10 @@ public class Skeleton {
|
||||
Bone[] items = bones.items;
|
||||
for (int i = 0, n = bones.size; i < n; i++) {
|
||||
Bone bone = items[i];
|
||||
if (!bone.active) continue;
|
||||
if (bone.sorted) sortReset(bone.children);
|
||||
bone.sorted = false;
|
||||
if (bone.active) {
|
||||
if (bone.sorted) sortReset(bone.children);
|
||||
bone.sorted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -52,6 +52,7 @@ public class Slider extends Constraint<Slider, SliderData, SliderPose> {
|
||||
}
|
||||
|
||||
public void update (Skeleton skeleton, Physics physics) {
|
||||
if (pose.mix == 0) return;
|
||||
SliderPose pose = applied;
|
||||
data.animation.apply(skeleton, pose.time, pose.time, false, null, pose.mix, MixBlend.replace, MixDirection.in, true);
|
||||
}
|
||||
@ -71,7 +72,6 @@ public class Slider extends Constraint<Slider, SliderData, SliderPose> {
|
||||
Timeline t = timelines[i];
|
||||
if (t instanceof BoneTimeline timeline) {
|
||||
Bone bone = bones[timeline.getBoneIndex()];
|
||||
skeleton.sortBone(bone);
|
||||
skeleton.sortReset(bone.children);
|
||||
bone.sorted = false;
|
||||
} else if (t instanceof SlotTimeline timeline)
|
||||
@ -86,7 +86,5 @@ public class Slider extends Constraint<Slider, SliderData, SliderPose> {
|
||||
} else if (t instanceof ConstraintTimeline timeline) //
|
||||
skeleton.resetCache(skeleton.constraints.items[timeline.getConstraintIndex()]);
|
||||
}
|
||||
for (int i = 0; i < timelineCount; i++)
|
||||
if (timelines[i] instanceof BoneTimeline boneTimeline) skeleton.sortBone(bones[boneTimeline.getBoneIndex()]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -102,26 +102,14 @@ public class TransformConstraint extends Constraint<TransformConstraint, Transfo
|
||||
|
||||
void sort (Skeleton skeleton) {
|
||||
skeleton.sortBone(source);
|
||||
|
||||
BonePose[] bones = this.bones.items;
|
||||
int boneCount = this.bones.size;
|
||||
if (data.localSource) {
|
||||
for (int i = 0; i < boneCount; i++) {
|
||||
Bone child = bones[i].bone;
|
||||
skeleton.resetCache(child);
|
||||
skeleton.sortBone(child.parent);
|
||||
skeleton.sortBone(child);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < boneCount; i++) {
|
||||
Bone bone = bones[i].bone;
|
||||
skeleton.resetCache(bone);
|
||||
skeleton.sortBone(bone);
|
||||
}
|
||||
for (int i = 0; i < boneCount; i++) {
|
||||
Bone bone = bones[i].bone;
|
||||
skeleton.resetCache(bone);
|
||||
skeleton.sortBone(bone);
|
||||
}
|
||||
|
||||
skeleton.updateCache.add(this);
|
||||
|
||||
for (int i = 0; i < boneCount; i++)
|
||||
skeleton.sortReset(bones[i].bone.children);
|
||||
for (int i = 0; i < boneCount; i++)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user