[csharp] Ported IKConstraint fix.

This commit is contained in:
badlogic 2017-05-24 17:37:00 +02:00
parent 5f1431c397
commit 73cb6299de

View File

@ -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);