@@ -48,8 +48,8 @@ spBone *spBone_create(spBoneData *data, spSkeleton *skeleton, spBone *parent) {
48
48
self -> parent = parent ;
49
49
self -> a = 1.0f ;
50
50
self -> d = 1.0f ;
51
- self -> active = -1 ;
52
- self -> inherit = SP_INHERIT_NORMAL ;
51
+ self -> active = -1 ;
52
+ self -> inherit = SP_INHERIT_NORMAL ;
53
53
spBone_setToSetupPose (self );
54
54
return self ;
55
55
}
@@ -70,10 +70,10 @@ void spBone_updateWorldTransform(spBone *self) {
70
70
71
71
void spBone_updateWorldTransformWith (spBone * self , float x , float y , float rotation , float scaleX , float scaleY ,
72
72
float shearX , float shearY ) {
73
- float pa , pb , pc , pd ;
74
- float sx = self -> skeleton -> scaleX ;
75
- float sy = self -> skeleton -> scaleY * (spBone_isYDown () ? -1 : 1 );
76
- spBone * parent = self -> parent ;
73
+ float pa , pb , pc , pd ;
74
+ float sx = self -> skeleton -> scaleX ;
75
+ float sy = self -> skeleton -> scaleY * (spBone_isYDown () ? -1 : 1 );
76
+ spBone * parent = self -> parent ;
77
77
78
78
self -> ax = x ;
79
79
self -> ay = y ;
@@ -84,14 +84,14 @@ void spBone_updateWorldTransformWith(spBone *self, float x, float y, float rotat
84
84
self -> ashearY = shearY ;
85
85
86
86
if (!parent ) { /* Root bone. */
87
- float rx = (rotation + shearX ) * DEG_RAD ;
88
- float ry = (rotation + 90 + shearY ) * DEG_RAD ;
89
- self -> a = COS (rx ) * scaleX * sx ;
90
- self -> b = COS (ry ) * scaleY * sx ;
91
- self -> c = SIN (rx ) * scaleX * sy ;
92
- self -> d = SIN (ry ) * scaleY * sy ;
93
- self -> worldX = x * sx + self -> skeleton -> x ;
94
- self -> worldY = y * sy + self -> skeleton -> y ;
87
+ float rx = (rotation + shearX ) * DEG_RAD ;
88
+ float ry = (rotation + 90 + shearY ) * DEG_RAD ;
89
+ self -> a = COS (rx ) * scaleX * sx ;
90
+ self -> b = COS (ry ) * scaleY * sx ;
91
+ self -> c = SIN (rx ) * scaleX * sy ;
92
+ self -> d = SIN (ry ) * scaleY * sy ;
93
+ self -> worldX = x * sx + self -> skeleton -> x ;
94
+ self -> worldY = y * sy + self -> skeleton -> y ;
95
95
return ;
96
96
}
97
97
@@ -105,25 +105,25 @@ void spBone_updateWorldTransformWith(spBone *self, float x, float y, float rotat
105
105
106
106
switch (self -> inherit ) {
107
107
case SP_INHERIT_NORMAL : {
108
- float rx = (rotation + shearX ) * DEG_RAD ;
109
- float ry = (rotation + 90 + shearY ) * DEG_RAD ;
110
- float la = COS (rx ) * scaleX ;
111
- float lb = COS (ry ) * scaleY ;
112
- float lc = SIN (rx ) * scaleX ;
113
- float ld = SIN (ry ) * scaleY ;
108
+ float rx = (rotation + shearX ) * DEG_RAD ;
109
+ float ry = (rotation + 90 + shearY ) * DEG_RAD ;
110
+ float la = COS (rx ) * scaleX ;
111
+ float lb = COS (ry ) * scaleY ;
112
+ float lc = SIN (rx ) * scaleX ;
113
+ float ld = SIN (ry ) * scaleY ;
114
114
self -> a = pa * la + pb * lc ;
115
115
self -> b = pa * lb + pb * ld ;
116
116
self -> c = pc * la + pd * lc ;
117
117
self -> d = pc * lb + pd * ld ;
118
118
return ;
119
119
}
120
120
case SP_INHERIT_ONLYTRANSLATION : {
121
- float rx = (rotation + shearX ) * DEG_RAD ;
122
- float ry = (rotation + 90 + shearY ) * DEG_RAD ;
123
- self -> a = COS (rx ) * scaleX ;
124
- self -> b = COS (ry ) * scaleY ;
125
- self -> c = SIN (rx ) * scaleX ;
126
- self -> d = SIN (ry ) * scaleY ;
121
+ float rx = (rotation + shearX ) * DEG_RAD ;
122
+ float ry = (rotation + 90 + shearY ) * DEG_RAD ;
123
+ self -> a = COS (rx ) * scaleX ;
124
+ self -> b = COS (ry ) * scaleY ;
125
+ self -> c = SIN (rx ) * scaleX ;
126
+ self -> d = SIN (ry ) * scaleY ;
127
127
break ;
128
128
}
129
129
case SP_INHERIT_NOROTATIONORREFLECTION : {
@@ -141,12 +141,12 @@ void spBone_updateWorldTransformWith(spBone *self, float x, float y, float rotat
141
141
pc = 0 ;
142
142
prx = 90 - ATAN2DEG (pd , pb );
143
143
}
144
- float rx = (rotation + shearX - prx ) * DEG_RAD ;
145
- float ry = (rotation + shearY - prx + 90 ) * DEG_RAD ;
146
- float la = COS (rx ) * scaleX ;
147
- float lb = COS (ry ) * scaleY ;
148
- float lc = SIN (rx ) * scaleX ;
149
- float ld = SIN (ry ) * scaleY ;
144
+ float rx = (rotation + shearX - prx ) * DEG_RAD ;
145
+ float ry = (rotation + shearY - prx + 90 ) * DEG_RAD ;
146
+ float la = COS (rx ) * scaleX ;
147
+ float lb = COS (ry ) * scaleY ;
148
+ float lc = SIN (rx ) * scaleX ;
149
+ float ld = SIN (ry ) * scaleY ;
150
150
self -> a = pa * la - pb * lc ;
151
151
self -> b = pa * lb - pb * ld ;
152
152
self -> c = pc * la + pd * lc ;
@@ -155,23 +155,23 @@ void spBone_updateWorldTransformWith(spBone *self, float x, float y, float rotat
155
155
}
156
156
case SP_INHERIT_NOSCALE :
157
157
case SP_INHERIT_NOSCALEORREFLECTION : {
158
- rotation *= DEG_RAD ;
159
- float cosine = COS (rotation );
160
- float sine = SIN (rotation );
161
- float za = (pa * cosine + pb * sine ) / sx ;
162
- float zc = (pc * cosine + pd * sine ) / sy ;
163
- float s = SQRT (za * za + zc * zc );
158
+ rotation *= DEG_RAD ;
159
+ float cosine = COS (rotation );
160
+ float sine = SIN (rotation );
161
+ float za = (pa * cosine + pb * sine ) / sx ;
162
+ float zc = (pc * cosine + pd * sine ) / sy ;
163
+ float s = SQRT (za * za + zc * zc );
164
164
if (self -> data -> inherit == SP_INHERIT_NOSCALE && (pa * pd - pb * pc < 0 ) != (sx < 0 != sy < 0 ))
165
165
s = - s ;
166
- rotation = PI / 2 + ATAN2 (zc , za );
167
- float zb = COS (rotation ) * s ;
168
- float zd = SIN (rotation ) * s ;
169
- shearX *= DEG_RAD ;
170
- shearY = (90 + shearY ) * DEG_RAD ;
171
- float la = COS (shearX ) * scaleX ;
172
- float lb = COS (shearY ) * scaleY ;
173
- float lc = SIN (shearX ) * scaleX ;
174
- float ld = SIN (shearY ) * scaleY ;
166
+ rotation = PI / 2 + ATAN2 (zc , za );
167
+ float zb = COS (rotation ) * s ;
168
+ float zd = SIN (rotation ) * s ;
169
+ shearX *= DEG_RAD ;
170
+ shearY = (90 + shearY ) * DEG_RAD ;
171
+ float la = COS (shearX ) * scaleX ;
172
+ float lb = COS (shearY ) * scaleY ;
173
+ float lc = SIN (shearX ) * scaleX ;
174
+ float ld = SIN (shearY ) * scaleY ;
175
175
self -> a = za * la + zb * lc ;
176
176
self -> b = za * lb + zb * ld ;
177
177
self -> c = zc * la + zd * lc ;
@@ -193,7 +193,7 @@ void spBone_setToSetupPose(spBone *self) {
193
193
self -> scaleY = self -> data -> scaleY ;
194
194
self -> shearX = self -> data -> shearX ;
195
195
self -> shearY = self -> data -> shearY ;
196
- self -> inherit = self -> data -> inherit ;
196
+ self -> inherit = self -> data -> inherit ;
197
197
}
198
198
199
199
float spBone_getWorldRotationX (spBone * self ) {
@@ -225,7 +225,7 @@ void spBone_updateAppliedTransform(spBone *self) {
225
225
float s , sa , sc ;
226
226
float cosine , sine ;
227
227
228
- float yDownScale = spBone_isYDown () ? -1 : 1 ;
228
+ float yDownScale = spBone_isYDown () ? -1 : 1 ;
229
229
230
230
spBone * parent = self -> parent ;
231
231
if (!parent ) {
@@ -266,7 +266,7 @@ void spBone_updateAppliedTransform(spBone *self) {
266
266
}
267
267
case SP_INHERIT_NOSCALE :
268
268
case SP_INHERIT_NOSCALEORREFLECTION : {
269
- float r = self -> rotation * DEG_RAD ;
269
+ float r = self -> rotation * DEG_RAD ;
270
270
cosine = COS (r ), sine = SIN (r );
271
271
pa = (pa * cosine + pb * sine ) / self -> skeleton -> scaleX ;
272
272
pc = (pc * cosine + pd * sine ) / self -> skeleton -> scaleY * yDownScale ;
@@ -321,12 +321,12 @@ void spBone_worldToLocal(spBone *self, float worldX, float worldY, float *localX
321
321
}
322
322
323
323
void spBone_worldToParent (spBone * self , float worldX , float worldY , float * localX , float * localY ) {
324
- if (self -> parent == NULL ) {
325
- * localX = worldX ;
326
- * localY = worldY ;
327
- } else {
328
- spBone_worldToLocal (self -> parent , worldX , worldY , localX , localY );
329
- }
324
+ if (self -> parent == NULL ) {
325
+ * localX = worldX ;
326
+ * localY = worldY ;
327
+ } else {
328
+ spBone_worldToLocal (self -> parent , worldX , worldY , localX , localY );
329
+ }
330
330
}
331
331
332
332
void spBone_localToWorld (spBone * self , float localX , float localY , float * worldX , float * worldY ) {
@@ -336,33 +336,32 @@ void spBone_localToWorld(spBone *self, float localX, float localY, float *worldX
336
336
}
337
337
338
338
void spBone_parentToWorld (spBone * self , float localX , float localY , float * worldX , float * worldY ) {
339
- if (self -> parent != NULL ) {
340
- * worldX = localX ;
341
- * worldY = localY ;
342
- } else {
343
- spBone_localToWorld (self -> parent , localX , localY , worldX , worldY );
344
- }
339
+ if (self -> parent != NULL ) {
340
+ * worldX = localX ;
341
+ * worldY = localY ;
342
+ } else {
343
+ spBone_localToWorld (self -> parent , localX , localY , worldX , worldY );
344
+ }
345
345
}
346
346
347
347
float spBone_worldToLocalRotation (spBone * self , float worldRotation ) {
348
- worldRotation *= DEG_RAD ;
349
- float sine = SIN (worldRotation ), cosine = COS (worldRotation );
350
- return ATAN2DEG (self -> a * sine - self -> c * cosine , self -> d * cosine - self -> b * sine ) + self -> rotation - self -> shearX ;
348
+ worldRotation *= DEG_RAD ;
349
+ float sine = SIN (worldRotation ), cosine = COS (worldRotation );
350
+ return ATAN2DEG (self -> a * sine - self -> c * cosine , self -> d * cosine - self -> b * sine ) + self -> rotation - self -> shearX ;
351
351
}
352
352
353
353
float spBone_localToWorldRotation (spBone * self , float localRotation ) {
354
- localRotation = (localRotation - self -> rotation - self -> shearX ) * DEG_RAD ;
355
- float sine = SIN (localRotation ), cosine = COS (localRotation );
356
- return ATAN2DEG (cosine * self -> c + sine * self -> d , cosine * self -> a + sine * self -> b );
357
-
354
+ localRotation = (localRotation - self -> rotation - self -> shearX ) * DEG_RAD ;
355
+ float sine = SIN (localRotation ), cosine = COS (localRotation );
356
+ return ATAN2DEG (cosine * self -> c + sine * self -> d , cosine * self -> a + sine * self -> b );
358
357
}
359
358
360
359
void spBone_rotateWorld (spBone * self , float degrees ) {
361
- degrees *= DEG_RAD ;
362
- float sine = SIN (degrees ), cosine = COS (degrees );
363
- float ra = self -> a , rb = self -> b ;
364
- self -> a = cosine * ra - sine * self -> c ;
365
- self -> b = cosine * rb - sine * self -> d ;
366
- self -> c = sine * ra + cosine * self -> c ;
367
- self -> d = sine * rb + cosine * self -> d ;
360
+ degrees *= DEG_RAD ;
361
+ float sine = SIN (degrees ), cosine = COS (degrees );
362
+ float ra = self -> a , rb = self -> b ;
363
+ self -> a = cosine * ra - sine * self -> c ;
364
+ self -> b = cosine * rb - sine * self -> d ;
365
+ self -> c = sine * ra + cosine * self -> c ;
366
+ self -> d = sine * rb + cosine * self -> d ;
368
367
}
0 commit comments