mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-03 22:29:13 +08:00
[csharp] Ported IKConstraint fix.
This commit is contained in:
parent
5f1431c397
commit
73cb6299de
@ -93,7 +93,7 @@ namespace Spine {
|
|||||||
if (rotationIK > 180)
|
if (rotationIK > 180)
|
||||||
rotationIK -= 360;
|
rotationIK -= 360;
|
||||||
else if (rotationIK < -180) rotationIK += 360;
|
else if (rotationIK < -180) rotationIK += 360;
|
||||||
bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, bone.ascaleX, bone.ascaleY, bone.ashearX,
|
bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, bone.ascaleX, bone.ascaleY, bone.ashearX,
|
||||||
bone.ashearY);
|
bone.ashearY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,21 +181,24 @@ namespace Spine {
|
|||||||
}
|
}
|
||||||
float minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;
|
float minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;
|
||||||
float maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;
|
float maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;
|
||||||
float angle = (float)Math.Acos(-a * l1 / (aa - bb));
|
c = -a * l1 / (aa - bb);
|
||||||
x = a * (float)Math.Cos(angle) + l1;
|
if (c >= -1 && c <= 1) {
|
||||||
y = b * (float)Math.Sin(angle);
|
float angle = (float)Math.Acos(c);
|
||||||
d = x * x + y * y;
|
x = a * (float)Math.Cos(c) + l1;
|
||||||
if (d < minDist) {
|
y = b * (float)Math.Sin(c);
|
||||||
minAngle = angle;
|
d = x * x + y * y;
|
||||||
minDist = d;
|
if (d < minDist) {
|
||||||
minX = x;
|
minAngle = c;
|
||||||
minY = y;
|
minDist = d;
|
||||||
}
|
minX = x;
|
||||||
if (d > maxDist) {
|
minY = y;
|
||||||
maxAngle = angle;
|
}
|
||||||
maxDist = d;
|
if (d > maxDist) {
|
||||||
maxX = x;
|
maxAngle = c;
|
||||||
maxY = y;
|
maxDist = d;
|
||||||
|
maxX = x;
|
||||||
|
maxY = y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (dd <= (minDist + maxDist) / 2) {
|
if (dd <= (minDist + maxDist) / 2) {
|
||||||
a1 = ta - (float)Math.Atan2(minY * bendDir, minX);
|
a1 = ta - (float)Math.Atan2(minY * bendDir, minX);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user