From 5cab7e946071f447bf2626339d6be3dcf28dddcc Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Wed, 3 Jun 2020 15:47:46 +0200 Subject: [PATCH] Fixed 1-bone IK for transform mode noRotationOrReflection when skeleton scale is applied. --- .../src/com/esotericsoftware/spine/IkConstraint.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index f3402a0f0..82fb4e5b1 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -185,10 +185,12 @@ public class IkConstraint implements Updatable { ty = targetY - bone.worldY; break; case noRotationOrReflection: - rotationIK += atan2(pc, pa) * radDeg; - float ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); - pb = -pc * ps; - pd = pa * ps; + 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 += atan2(sc, sa) * radDeg; // Fall through. default: float x = targetX - p.worldX, y = targetY - p.worldY;