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