From ae2f77112024dea53f3e5c2d9f28afed5f0fc252 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Wed, 11 Jul 2018 04:56:26 +0200 Subject: [PATCH] Be nicer about zero length bones for stretchy IK. --- .../src/com/esotericsoftware/spine/IkConstraint.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 0a7f8aa36..77623cbad 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -161,8 +161,8 @@ public class IkConstraint implements Constraint { else if (rotationIK < -180) rotationIK += 360; float sx = bone.ascaleX; if (stretch) { - float dd = (float)Math.sqrt(tx * tx + ty * ty); - if (dd > bone.data.length * sx) sx *= (dd / (bone.data.length * sx) - 1) * alpha + 1; + float b = bone.data.length * sx, dd = (float)Math.sqrt(tx * tx + ty * ty); + if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha + 1; } bone.updateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, bone.ascaleY, bone.ashearX, bone.ashearY); @@ -226,7 +226,7 @@ public class IkConstraint implements Constraint { cos = -1; else if (cos > 1) { cos = 1; - if (stretch) sx *= ((float)Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + if (stretch && l1 + l2 > 0.0001f) sx *= ((float)Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; } a2 = (float)Math.acos(cos) * bendDir; a = l1 + l2 * cos;