From 85dd60bf579145606c249596e3649afd4a7a8448 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 3 Jun 2020 16:35:26 +0200 Subject: [PATCH] [csharp] port of bugfix commit 5cab7e9: Fixed 1-bone IK for transform mode noRotationOrReflection when skeleton scale is applied. --- spine-csharp/src/IkConstraint.cs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index baaae712a..1d88c4a63 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -170,18 +170,16 @@ namespace Spine { ty = targetY - bone.worldY; break; case TransformMode.NoRotationOrReflection: { - rotationIK += (float)Math.Atan2(pc, pa) * MathUtils.RadDeg; - float ps = Math.Abs(pa * pd - pb * pc) / (pa * pa + pc * pc); - pb = -pc * ps; - pd = pa * ps; - float x = targetX - p.worldX, y = targetY - p.worldY; - float d = pa * pd - pb * pc; - tx = (x * pd - y * pb) / d - bone.ax; - ty = (y * pa - x * pc) / d - bone.ay; - break; - } + float s = Math.Abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + float sa = pa / bone.skeleton.ScaleX; + float sc = pc / bone.skeleton.ScaleY; + pb = -sc * s * bone.skeleton.ScaleX; + pd = sa * s * bone.skeleton.ScaleY; + rotationIK += (float)Math.Atan2(pc, pa) * MathUtils.RadDeg; + goto default; // Fall through. + } default: { - float x = targetX - p.worldX, y = targetY - p.worldY; + float x = targetX - p.worldX, y = targetY - p.worldY; float d = pa * pd - pb * pc; tx = (x * pd - y * pb) / d - bone.ax; ty = (y * pa - x * pc) / d - bone.ay;