From 251b368cbfccfbe71a644e148f54978ad35eca0b Mon Sep 17 00:00:00 2001 From: Nathan Sweet <> Date: Mon, 6 Nov 2023 17:50:00 -0400 Subject: [PATCH] [libgdx] Physics scale fixes. --- .../spine/PhysicsConstraint.java | 113 +++++------------- 1 file changed, 30 insertions(+), 83 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java index ee00a916e..ade16d407 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java @@ -154,12 +154,12 @@ public class PhysicsConstraint implements Updatable { r = rotateOffset * mix + ca; c = cos(r); s = sin(r); - if (scaleX) scaleOffset += (dx * c + dy * s) * i / l; + if (scaleX) scaleOffset += (dx * c + dy * s) * i / l / bone.getWorldScaleX(); } else if (scaleX) { - float r = rotateOffset * mix + atan2(bone.c, bone.a); + float r = atan2(bone.c, bone.a); c = cos(r); s = sin(r); - scaleOffset += ((cx - bone.worldX) * c + (cy - bone.worldY) * s) * i / l; + scaleOffset += ((cx - bone.worldX) * c + (cy - bone.worldY) * s) * i / l / bone.getWorldScaleX(); } } cx = bone.worldX; @@ -202,93 +202,40 @@ public class PhysicsConstraint implements Updatable { if (y) bone.worldY += yOffset * mix; } - // Smoothing. - if (physics != Physics.none && false) { - float a = (Math.min(remaining / data.step, 1) - 1) * mix; - if (rotateOrShearX) { - float rotateOffset = rotateVelocityLast * a; - float r = rotateOffset * mix, ra = bone.a, sin, cos; - if (data.rotate) { - if (data.shearX) { - r *= 0.5f; - sin = sin(r); - cos = cos(r); - bone.a = cos * ra - sin * bone.c; - bone.c = sin * ra + cos * bone.c; - ra = bone.a; - } else { - sin = sin(r); - cos = cos(r); - } - float rb = bone.b; - bone.b = cos * rb - sin * bone.d; - bone.d = sin * rb + cos * bone.d; + if (rotateOrShearX) { + float r = rotateOffset * mix, ra = bone.a, sin, cos; + if (data.rotate) { + if (data.shearX) { + r *= 0.5f; + sin = sin(r); + cos = cos(r); + bone.a = cos * ra - sin * bone.c; + bone.c = sin * ra + cos * bone.c; + ra = bone.a; } else { sin = sin(r); cos = cos(r); } - bone.a = cos * ra - sin * bone.c; - bone.c = sin * ra + cos * bone.c; - } - if (scaleX) { + float rb = bone.b; + bone.b = cos * rb - sin * bone.d; + bone.d = sin * rb + cos * bone.d; + } else { + sin = sin(r); + cos = cos(r); } + bone.a = cos * ra - sin * bone.c; + bone.c = sin * ra + cos * bone.c; } - - if (false) { - // Local. - if (rotateOrShearX) { - float r = bone.worldToLocalRotation((atan2(bone.c, bone.a) + rotateOffset * mix) * radDeg) - bone.arotation; - if (data.rotate) { - if (data.shearX) { - r *= 0.5f; - bone.ashearX += r; - } - bone.arotation += r; - } else - bone.ashearX += r; - } - if (scaleX) bone.ascaleX *= 1 + scaleOffset * mix; - bone.update(null); - if (physics == Physics.update) { - tx = l * bone.a; - ty = l * bone.c; - } - } else { - if (rotateOrShearX) { - float r = rotateOffset * mix, ra = bone.a, sin, cos; - if (data.rotate) { - if (data.shearX) { - r *= 0.5f; - sin = sin(r); - cos = cos(r); - bone.a = cos * ra - sin * bone.c; - bone.c = sin * ra + cos * bone.c; - ra = bone.a; - } else { - sin = sin(r); - cos = cos(r); - } - float rb = bone.b; - bone.b = cos * rb - sin * bone.d; - bone.d = sin * rb + cos * bone.d; - } else { - sin = sin(r); - cos = cos(r); - } - bone.a = cos * ra - sin * bone.c; - bone.c = sin * ra + cos * bone.c; - } - if (scaleX) { - float s = 1 + scaleOffset * mix; - bone.a *= s; - bone.c *= s; - } - if (physics == Physics.update) { - tx = l * bone.a; - ty = l * bone.c; - } - bone.updateAppliedTransform(); + if (scaleX) { + float s = 1 + scaleOffset * mix; + bone.a *= s; + bone.c *= s; } + if (physics == Physics.update) { + tx = l * bone.a; + ty = l * bone.c; + } + bone.updateAppliedTransform(); } /** The bone constrained by this physics constraint. */