From e9d576185cd04ba83c6ec4c179b19c24a30dca27 Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Tue, 18 Oct 2022 14:34:43 -0400 Subject: [PATCH] [libgdx] Avoid a sqrt for 1 bone IK with stretch/compress. --- .../com/esotericsoftware/spine/IkConstraint.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 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 a07c96de0..ed585199f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -222,11 +222,14 @@ public class IkConstraint implements Updatable { tx = targetX - bone.worldX; ty = targetY - bone.worldY; } - float b = bone.data.length * sx, dd = (float)Math.sqrt(tx * tx + ty * ty); - if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001f) { - float s = (dd / b - 1) * alpha + 1; - sx *= s; - if (uniform) sy *= s; + float b = bone.data.length * sx; + if (b > 0.0001f) { + float dd = tx * tx + ty * ty; + if ((compress && dd < b * b) || (stretch && dd > b * b)) { + float s = ((float)Math.sqrt(dd) / b - 1) * alpha + 1; + sx *= s; + if (uniform) sy *= s; + } } } bone.updateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);