|
@@ -65,6 +65,8 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota
|
|
|
float cosine, sine;
|
|
|
float pa, pb, pc, pd;
|
|
|
spBone* parent = self->parent;
|
|
|
+ float sx = self->skeleton->scaleX;
|
|
|
+ float sy = self->skeleton->scaleY * (spBone_isYDown() ? -1 : 1);
|
|
|
|
|
|
self->ax = x;
|
|
|
self->ay = y;
|
|
@@ -77,26 +79,12 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota
|
|
|
|
|
|
if (!parent) { /* Root bone. */
|
|
|
float rotationY = rotation + 90 + shearY;
|
|
|
- float la = COS_DEG(rotation + shearX) * scaleX;
|
|
|
- float lb = COS_DEG(rotationY) * scaleY;
|
|
|
- float lc = SIN_DEG(rotation + shearX) * scaleX;
|
|
|
- float ld = SIN_DEG(rotationY) * scaleY;
|
|
|
- if (self->skeleton->flipX) {
|
|
|
- x = -x;
|
|
|
- la = -la;
|
|
|
- lb = -lb;
|
|
|
- }
|
|
|
- if (self->skeleton->flipY != yDown) {
|
|
|
- y = -y;
|
|
|
- lc = -lc;
|
|
|
- ld = -ld;
|
|
|
- }
|
|
|
- CONST_CAST(float, self->a) = la;
|
|
|
- CONST_CAST(float, self->b) = lb;
|
|
|
- CONST_CAST(float, self->c) = lc;
|
|
|
- CONST_CAST(float, self->d) = ld;
|
|
|
- CONST_CAST(float, self->worldX) = x + self->skeleton->x;
|
|
|
- CONST_CAST(float, self->worldY) = y + self->skeleton->y;
|
|
|
+ CONST_CAST(float, self->a) = COS_DEG(rotation + shearX) * scaleX * sx;
|
|
|
+ CONST_CAST(float, self->b) = COS_DEG(rotationY) * scaleY * sy;
|
|
|
+ CONST_CAST(float, self->c) = SIN_DEG(rotation + shearX) * scaleX * sx;
|
|
|
+ CONST_CAST(float, self->d) = SIN_DEG(rotationY) * scaleY * sy;
|
|
|
+ CONST_CAST(float, self->worldX) = x * sx + self->skeleton->x;
|
|
|
+ CONST_CAST(float, self->worldY) = y * sy + self->skeleton->y;
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -159,8 +147,8 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota
|
|
|
float za, zc, s;
|
|
|
float r, zb, zd, la, lb, lc, ld;
|
|
|
cosine = COS_DEG(rotation); sine = SIN_DEG(rotation);
|
|
|
- za = pa * cosine + pb * sine;
|
|
|
- zc = pc * cosine + pd * sine;
|
|
|
+ za = (pa * cosine + pb * sine) / sx;
|
|
|
+ zc = (pc * cosine + pd * sine) / sy;
|
|
|
s = SQRT(za * za + zc * zc);
|
|
|
if (s > 0.00001f) s = 1 / s;
|
|
|
za *= s;
|
|
@@ -173,25 +161,18 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota
|
|
|
lb = COS_DEG(90 + shearY) * scaleY;
|
|
|
lc = SIN_DEG(shearX) * scaleX;
|
|
|
ld = SIN_DEG(90 + shearY) * scaleY;
|
|
|
- if (self->data->transformMode != SP_TRANSFORMMODE_NOSCALEORREFLECTION ? pa * pd - pb * pc < 0 : self->skeleton->flipX != self->skeleton->flipY) {
|
|
|
- zb = -zb;
|
|
|
- zd = -zd;
|
|
|
- }
|
|
|
CONST_CAST(float, self->a) = za * la + zb * lc;
|
|
|
CONST_CAST(float, self->b) = za * lb + zb * ld;
|
|
|
CONST_CAST(float, self->c) = zc * la + zd * lc;
|
|
|
CONST_CAST(float, self->d) = zc * lb + zd * ld;
|
|
|
- return;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
- if (self->skeleton->flipX) {
|
|
|
- CONST_CAST(float, self->a) = -self->a;
|
|
|
- CONST_CAST(float, self->b) = -self->b;
|
|
|
- }
|
|
|
- if (self->skeleton->flipY != yDown) {
|
|
|
- CONST_CAST(float, self->c) = -self->c;
|
|
|
- CONST_CAST(float, self->d) = -self->d;
|
|
|
- }
|
|
|
+
|
|
|
+ CONST_CAST(float, self->a) *= sx;
|
|
|
+ CONST_CAST(float, self->b) *= sx;
|
|
|
+ CONST_CAST(float, self->c) *= sy;
|
|
|
+ CONST_CAST(float, self->d) *= sy;
|
|
|
}
|
|
|
|
|
|
void spBone_setToSetupPose (spBone* self) {
|