mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
[as3] Fixed Path/TransformConstraint handling of reflection
This commit is contained in:
parent
231bd26313
commit
3666e7125a
Binary file not shown.
@ -102,7 +102,14 @@ public class PathConstraint implements Constraint {
|
|||||||
var positions:Vector.<Number> = computeWorldPositions(attachment, spacesCount, tangents,
|
var positions:Vector.<Number> = computeWorldPositions(attachment, spacesCount, tangents,
|
||||||
data.positionMode == PositionMode.percent, spacingMode == SpacingMode.percent);
|
data.positionMode == PositionMode.percent, spacingMode == SpacingMode.percent);
|
||||||
var boneX:Number = positions[0], boneY:Number = positions[1], offsetRotation:Number = data.offsetRotation;
|
var boneX:Number = positions[0], boneY:Number = positions[1], offsetRotation:Number = data.offsetRotation;
|
||||||
var tip:Boolean = rotateMode == RotateMode.chain && offsetRotation == 0;
|
var tip:Boolean = false;
|
||||||
|
if (offsetRotation == 0)
|
||||||
|
tip = rotateMode == RotateMode.chain;
|
||||||
|
else {
|
||||||
|
tip = false;
|
||||||
|
var pa:Bone = target.bone;
|
||||||
|
offsetRotation *= pa.a * pa.d - pa.b * pa.c > 0 ? MathUtils.degRad : -MathUtils.degRad;
|
||||||
|
}
|
||||||
var p:Number;
|
var p:Number;
|
||||||
for (i = 0, p = 3; i < boneCount; i++, p += 3) {
|
for (i = 0, p = 3; i < boneCount; i++, p += 3) {
|
||||||
bone = bones[i];
|
bone = bones[i];
|
||||||
@ -127,13 +134,15 @@ public class PathConstraint implements Constraint {
|
|||||||
r = positions[p + 2];
|
r = positions[p + 2];
|
||||||
else
|
else
|
||||||
r = Math.atan2(dy, dx);
|
r = Math.atan2(dy, dx);
|
||||||
r -= Math.atan2(c, a) - offsetRotation * MathUtils.degRad;
|
r -= Math.atan2(c, a);
|
||||||
if (tip) {
|
if (tip) {
|
||||||
cos = Math.cos(r);
|
cos = Math.cos(r);
|
||||||
sin = Math.sin(r);
|
sin = Math.sin(r);
|
||||||
length = bone.data.length;
|
length = bone.data.length;
|
||||||
boneX += (length * (cos * a - sin * c) - dx) * rotateMix;
|
boneX += (length * (cos * a - sin * c) - dx) * rotateMix;
|
||||||
boneY += (length * (sin * a + cos * c) - dy) * rotateMix;
|
boneY += (length * (sin * a + cos * c) - dy) * rotateMix;
|
||||||
|
} else {
|
||||||
|
r += offsetRotation;
|
||||||
}
|
}
|
||||||
if (r > Math.PI)
|
if (r > Math.PI)
|
||||||
r -= (Math.PI * 2);
|
r -= (Math.PI * 2);
|
||||||
|
|||||||
@ -62,6 +62,9 @@ public class TransformConstraint implements Constraint {
|
|||||||
var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
|
var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
|
||||||
var target:Bone = this.target;
|
var target:Bone = this.target;
|
||||||
var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d;
|
var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d;
|
||||||
|
var degRadReflect:Number = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;
|
||||||
|
var offsetRotation:Number = data.offsetRotation * degRadReflect;
|
||||||
|
var offsetShearY:Number = data.offsetShearY * degRadReflect;
|
||||||
var bones:Vector.<Bone> = this._bones;
|
var bones:Vector.<Bone> = this._bones;
|
||||||
for (var i:int = 0, n:int = bones.length; i < n; i++) {
|
for (var i:int = 0, n:int = bones.length; i < n; i++) {
|
||||||
var bone:Bone = bones[i];
|
var bone:Bone = bones[i];
|
||||||
@ -69,7 +72,7 @@ public class TransformConstraint implements Constraint {
|
|||||||
|
|
||||||
if (rotateMix != 0) {
|
if (rotateMix != 0) {
|
||||||
var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d;
|
var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d;
|
||||||
var r:Number = Math.atan2(tc, ta) - Math.atan2(c, a) + data.offsetRotation * MathUtils.degRad;
|
var r:Number = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;
|
||||||
if (r > Math.PI)
|
if (r > Math.PI)
|
||||||
r -= Math.PI * 2;
|
r -= Math.PI * 2;
|
||||||
else if (r < -Math.PI) r += Math.PI * 2;
|
else if (r < -Math.PI) r += Math.PI * 2;
|
||||||
@ -112,7 +115,7 @@ public class TransformConstraint implements Constraint {
|
|||||||
if (r > Math.PI)
|
if (r > Math.PI)
|
||||||
r -= Math.PI * 2;
|
r -= Math.PI * 2;
|
||||||
else if (r < -Math.PI) r += Math.PI * 2;
|
else if (r < -Math.PI) r += Math.PI * 2;
|
||||||
r = by + (r + data.offsetShearY * MathUtils.degRad) * shearMix;
|
r = by + (r + offsetShearY) * shearMix;
|
||||||
s = Math.sqrt(b * b + d * d);
|
s = Math.sqrt(b * b + d * d);
|
||||||
bone._b = Math.cos(r) * s;
|
bone._b = Math.cos(r) * s;
|
||||||
bone._d = Math.sin(r) * s;
|
bone._d = Math.sin(r) * s;
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user