From dcc6925e90484dcfb23f0ae86e2f21fed0b0a1e5 Mon Sep 17 00:00:00 2001 From: badlogic Date: Wed, 3 Jun 2020 17:33:13 +0200 Subject: [PATCH] [lua] Fix 1-bone IK, see #1692. --- spine-lua/IkConstraint.lua | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/spine-lua/IkConstraint.lua b/spine-lua/IkConstraint.lua index 2732a494e..d32693b9d 100644 --- a/spine-lua/IkConstraint.lua +++ b/spine-lua/IkConstraint.lua @@ -102,10 +102,14 @@ function IkConstraint:apply1 (bone, targetX, targetY, compress, stretch, uniform tx = targetX - bone.worldX ty = targetY - bone.worldY elseif bone.data.transformMode == TransformMode.noRotationOrReflection then - rotationIK = rotationIK + Math.atan2(pc, pa) * MathUtils.radDeg - local ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc) - pb = -pc * ps - pd = pa * ps + local s = math_abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + local sa = pa / bone.skeleton.scaleX; + local sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK = rotationIK + math_deg(math_atan2(sc, sa)); + + local x = targetX - p.worldX local y = targetY - p.worldY local d = pa * pd - pb * pc