mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Better disable inherit rotation.
But not good, flips with negative scale.
This commit is contained in:
parent
3160077207
commit
c5d3d84f71
@ -158,71 +158,63 @@ public class Bone implements Updatable {
|
|||||||
b = cos(r) * s;
|
b = cos(r) * s;
|
||||||
d = sin(r) * s;
|
d = sin(r) * s;
|
||||||
} else if (data.inheritScale) { // No rotation inheritance.
|
} else if (data.inheritScale) { // No rotation inheritance.
|
||||||
// float psx = (float)Math.sqrt(pa * pa + pc * pc), psy, pr;
|
float psx = (float)Math.sqrt(pa * pa + pc * pc), psy, pr;
|
||||||
// if (psx > 0.0001f) {
|
if (psx > 0.0001f) {
|
||||||
// float det = pa * pd - pb * pc;
|
float det = pa * pd - pb * pc;
|
||||||
// psy = det / psx;
|
psy = det / psx;
|
||||||
// rotationY = atan2(pa * pb + pc * pd, det) * radDeg + 90;
|
pr = atan2(pc, pa) * radDeg;
|
||||||
// pr = atan2(pc, pa) * radDeg;
|
} else {
|
||||||
// } else {
|
psx = 0;
|
||||||
// psx = 0;
|
psy = (float)Math.sqrt(pb * pb + pd * pd);
|
||||||
// psy = (float)Math.sqrt(pb * pb + pd * pd);
|
pr = 90 - atan2(pd, pb) * radDeg;
|
||||||
// rotationY = 90;
|
}
|
||||||
// pr = 90 - atan2(pd, pb) * radDeg;
|
float blend;
|
||||||
// }
|
if (pr < -90)
|
||||||
//
|
blend = 1 + (pr + 90) / 90;
|
||||||
// float blend;
|
else if (pr < 0)
|
||||||
// if (pr < -90)
|
blend = -pr / 90;
|
||||||
// blend = 1 + (pr + 90) / 90;
|
else if (pr < 90)
|
||||||
// else if (pr < 0)
|
blend = pr / 90;
|
||||||
// blend = -pr / 90;
|
else
|
||||||
// else if (pr < 90)
|
blend = 1 - (pr - 90) / 90;
|
||||||
// blend = pr / 90;
|
pa = lerp(psx, Math.abs(psy) * Math.signum(psx), blend);
|
||||||
// else
|
pd = lerp(psy, Math.abs(psx) * Math.signum(psy), blend);
|
||||||
// blend = 1f - (pr - 90) / 90;
|
a = pa * la;
|
||||||
//
|
b = pa * lb;
|
||||||
// pa = lerp(psx, Math.abs(psy) * Math.signum(psx), blend);
|
c = pd * lc;
|
||||||
// psy = lerp(psy, Math.abs(psx) * Math.signum(psy), blend);
|
d = pd * ld;
|
||||||
// pb = cosDeg(rotationY) * psy;
|
|
||||||
// pc = 0;
|
|
||||||
// pd = sinDeg(rotationY) * psy;
|
|
||||||
//
|
|
||||||
// a = pa * la + pb * lc;
|
|
||||||
// b = pa * lb + pb * ld;
|
|
||||||
// c = pc * la + pd * lc;
|
|
||||||
// d = pc * lb + pd * ld;
|
|
||||||
|
|
||||||
pa = 1;
|
// pa = 1;
|
||||||
pb = 0;
|
// pb = 0;
|
||||||
pc = 0;
|
// pc = 0;
|
||||||
pd = 1;
|
// pd = 1;
|
||||||
do {
|
// do {
|
||||||
float cos = cosDeg(parent.arotation), sin = sinDeg(parent.arotation);
|
// if (!parent.appliedValid) parent.updateAppliedTransform();
|
||||||
float psx = parent.ascaleX, psy = parent.ascaleY;
|
// float cos = cosDeg(parent.arotation), sin = sinDeg(parent.arotation);
|
||||||
float za = cos * psx, zb = sin * psy, zc = sin * psx, zd = cos * psy;
|
// float psx = parent.ascaleX, psy = parent.ascaleY;
|
||||||
float temp = pa * za + pb * zc;
|
// float za = cos * psx, zb = sin * psy, zc = sin * psx, zd = cos * psy;
|
||||||
pb = pb * zd - pa * zb;
|
// float temp = pa * za + pb * zc;
|
||||||
pa = temp;
|
// pb = pb * zd - pa * zb;
|
||||||
temp = pc * za + pd * zc;
|
// pa = temp;
|
||||||
pd = pd * zd - pc * zb;
|
// temp = pc * za + pd * zc;
|
||||||
pc = temp;
|
// pd = pd * zd - pc * zb;
|
||||||
|
// pc = temp;
|
||||||
if (psx >= 0) // BOZO! - Why? Should always do this? Fix in new code?
|
//
|
||||||
sin = -sin;
|
// if (psx >= 0) sin = -sin;
|
||||||
temp = pa * cos + pb * sin;
|
// temp = pa * cos + pb * sin;
|
||||||
pb = pb * cos - pa * sin;
|
// pb = pb * cos - pa * sin;
|
||||||
pa = temp;
|
// pa = temp;
|
||||||
temp = pc * cos + pd * sin;
|
// temp = pc * cos + pd * sin;
|
||||||
pd = pd * cos - pc * sin;
|
// pd = pd * cos - pc * sin;
|
||||||
pc = temp;
|
// pc = temp;
|
||||||
|
//
|
||||||
if (!parent.data.inheritScale) break;
|
// if (!parent.data.inheritScale) break;
|
||||||
parent = parent.parent;
|
// parent = parent.parent;
|
||||||
} while (parent != null);
|
// } while (parent != null);
|
||||||
a = pa * la + pb * lc;
|
// a = pa * la + pb * lc;
|
||||||
b = pa * lb + pb * ld;
|
// b = pa * lb + pb * ld;
|
||||||
c = pc * la + pd * lc;
|
// c = pc * la + pd * lc;
|
||||||
d = pc * lb + pd * ld;
|
// d = pc * lb + pd * ld;
|
||||||
} else {
|
} else {
|
||||||
a = la;
|
a = la;
|
||||||
b = lb;
|
b = lb;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user