[libgdx] Fixed bone disable inherit scale/reflection.

This commit is contained in:
Nathan Sweet 2025-07-15 00:23:55 -04:00
parent 50bc71f642
commit 9272327990

View File

@ -99,8 +99,7 @@ public class BonePose extends BoneLocal implements Update {
d = pc * lb + pd * ld;
}
case noScale, noScaleOrReflection -> {
rotation *= degRad;
float cos = cos(rotation), sin = sin(rotation);
float r = rotation * degRad, cos = cos(r), sin = sin(r);
float za = (pa * cos + pb * sin) / skeleton.scaleX;
float zc = (pc * cos + pd * sin) / skeleton.scaleY;
float s = (float)Math.sqrt(za * za + zc * zc);
@ -109,15 +108,15 @@ public class BonePose extends BoneLocal implements Update {
zc *= s;
s = (float)Math.sqrt(za * za + zc * zc);
if (inherit == Inherit.noScale && (pa * pd - pb * pc < 0) != (skeleton.scaleX < 0 != skeleton.scaleY < 0)) s = -s;
rotation = PI / 2 + atan2(zc, za);
float zb = cos(rotation) * s;
float zd = sin(rotation) * s;
shearX *= degRad;
shearY = (90 + shearY) * degRad;
float la = cos(shearX) * scaleX;
float lb = cos(shearY) * scaleY;
float lc = sin(shearX) * scaleX;
float ld = sin(shearY) * scaleY;
r = PI / 2 + atan2(zc, za);
float zb = cos(r) * s;
float zd = sin(r) * s;
float rx = shearX * degRad;
float ry = (90 + shearY) * degRad;
float la = cos(rx) * scaleX;
float lb = cos(ry) * scaleY;
float lc = sin(rx) * scaleX;
float ld = sin(ry) * scaleY;
a = za * la + zb * lc;
b = za * lb + zb * ld;
c = zc * la + zd * lc;