[libgdx] Scale physics constraint limits with skeleton scale.

This commit is contained in:
Nathan Sweet 2024-07-11 18:56:27 -10:00
parent d2953d6053
commit be3aa5f70e

View File

@ -141,6 +141,7 @@ public class PhysicsConstraint implements Updatable {
reset(); reset();
// Fall through. // Fall through.
case update: case update:
Skeleton skeleton = this.skeleton;
float delta = Math.max(skeleton.time - lastTime, 0); float delta = Math.max(skeleton.time - lastTime, 0);
remaining += delta; remaining += delta;
lastTime = skeleton.time; lastTime = skeleton.time;
@ -151,16 +152,18 @@ public class PhysicsConstraint implements Updatable {
ux = bx; ux = bx;
uy = by; uy = by;
} else { } else {
float a = remaining, i = inertia, q = data.limit * delta, t = data.step, f = skeleton.data.referenceScale, d = -1; float a = remaining, i = inertia, t = data.step, f = skeleton.data.referenceScale, d = -1;
float qx = data.limit * delta, qy = qx * skeleton.scaleY;
qx *= skeleton.scaleX;
if (x || y) { if (x || y) {
if (x) { if (x) {
float u = (ux - bx) * i; float u = (ux - bx) * i;
xOffset += u > q ? q : u < -q ? -q : u; xOffset += u > qx ? qx : u < -qx ? -qx : u;
ux = bx; ux = bx;
} }
if (y) { if (y) {
float u = (uy - by) * i; float u = (uy - by) * i;
yOffset += u > q ? q : u < -q ? -q : u; yOffset += u > qy ? qy : u < -qy ? -qy : u;
uy = by; uy = by;
} }
if (a >= t) { if (a >= t) {
@ -186,14 +189,14 @@ public class PhysicsConstraint implements Updatable {
if (rotateOrShearX || scaleX) { if (rotateOrShearX || scaleX) {
float ca = atan2(bone.c, bone.a), c, s, mr = 0; float ca = atan2(bone.c, bone.a), c, s, mr = 0;
float dx = cx - bone.worldX, dy = cy - bone.worldY; float dx = cx - bone.worldX, dy = cy - bone.worldY;
if (dx > q) if (dx > qx)
dx = q; dx = qx;
else if (dx < -q) // else if (dx < -qx) //
dx = -q; dx = -qx;
if (dy > q) if (dy > qy)
dy = q; dy = qy;
else if (dy < -q) // else if (dy < -qy) //
dy = -q; dy = -qy;
if (rotateOrShearX) { if (rotateOrShearX) {
mr = (data.rotate + data.shearX) * mix; mr = (data.rotate + data.shearX) * mix;
float r = atan2(dy + ty, dx + tx) - ca - rotateOffset * mr; float r = atan2(dy + ty, dx + tx) - ca - rotateOffset * mr;