mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
Changed bone sorting so transform behavior is consistent when IK and transform constraints are mixed.
This commit is contained in:
parent
d22073b1a3
commit
2945eedad9
@ -82,16 +82,10 @@ public class Skeleton {
|
||||
var updateCache:Vector.<Updatable> = _updateCache;
|
||||
var ikConstraints:Vector.<IkConstraint> = this.ikConstraints;
|
||||
var transformConstraints:Vector.<TransformConstraint> = this.transformConstraints;
|
||||
updateCache.length = bones.length + ikConstraints.length + transformConstraints.length;
|
||||
updateCache.length = bones.length + ikConstraints.length;
|
||||
var i:int = 0;
|
||||
for each (var bone:Bone in bones) {
|
||||
updateCache[i++] = bone;
|
||||
for each (var transformConstraint:TransformConstraint in transformConstraints) {
|
||||
if (bone == transformConstraint.bone) {
|
||||
updateCache[i++] = transformConstraint;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for each (var ikConstraint:IkConstraint in ikConstraints) {
|
||||
if (bone == ikConstraint.bones[ikConstraint.bones.length - 1]) {
|
||||
updateCache[i++] = ikConstraint;
|
||||
@ -99,6 +93,17 @@ public class Skeleton {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for each (var transformConstraint:TransformConstraint in transformConstraints) {
|
||||
var ii:int;
|
||||
for (ii = updateCache.length - 1; ii >= 0; i--) {
|
||||
var updatable:Updatable = updateCache[ii];
|
||||
if (updateable == transformConstraint.bone || updateable == transformConstraint.target) {
|
||||
updateCache.splice(ii + 1, 0, transformConstraint);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Updates the world transform for each bone and applies constraints. */
|
||||
|
||||
@ -115,13 +115,6 @@ namespace Spine {
|
||||
for (int i = 0, n = bones.Count; i < n; i++) {
|
||||
Bone bone = bones.Items[i];
|
||||
updateCache.Add(bone);
|
||||
for (int ii = 0; ii < transformConstraintsCount; ii++) {
|
||||
TransformConstraint transformConstraint = transformConstraints.Items[ii];
|
||||
if (bone == transformConstraint.bone) {
|
||||
updateCache.Add(transformConstraint);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int ii = 0; ii < ikConstraintsCount; ii++) {
|
||||
IkConstraint ikConstraint = ikConstraints.Items[ii];
|
||||
if (bone == ikConstraint.bones.Items[ikConstraint.bones.Count - 1]) {
|
||||
@ -130,6 +123,17 @@ namespace Spine {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < transformConstraintsCount; i++) {
|
||||
TransformConstraint transformConstraint = transformConstraints.Items[i];
|
||||
for (int ii = updateCache.Count - 1; i >= 0; ii--) {
|
||||
IUpdatable updateable = updateCache.Items[ii];
|
||||
if (updateable == transformConstraint.bone || updateable == transformConstraint.target) {
|
||||
updateCache.Insert(ii + 1, transformConstraint);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Updates the world transform for each bone and applies constraints.</summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user