@@ -80,11 +80,11 @@ export class SkeletonBinary {
80
80
skeletonData . y = input . readFloat ( ) ;
81
81
skeletonData . width = input . readFloat ( ) ;
82
82
skeletonData . height = input . readFloat ( ) ;
83
+ skeletonData . referenceScale = input . readFloat ( ) * scale ;
83
84
84
85
let nonessential = input . readBoolean ( ) ;
85
86
if ( nonessential ) {
86
87
skeletonData . fps = input . readFloat ( ) ;
87
-
88
88
skeletonData . imagesPath = input . readString ( ) ;
89
89
skeletonData . audioPath = input . readString ( ) ;
90
90
}
@@ -128,6 +128,14 @@ export class SkeletonBinary {
128
128
for ( let i = 0 ; i < n ; i ++ ) {
129
129
let slotName = input . readString ( ) ;
130
130
if ( ! slotName ) throw new Error ( "Slot name must not be null." ) ;
131
+ let path : string | null = null ;
132
+ if ( nonessential ) {
133
+ const slash = slotName ! . lastIndexOf ( '/' ) ;
134
+ if ( slash != - 1 ) {
135
+ path = slotName . substring ( 0 , slash ) ;
136
+ slotName = slotName . substring ( slash + 1 ) ;
137
+ }
138
+ }
131
139
let boneData = skeletonData . bones [ input . readInt ( true ) ] ;
132
140
let data = new SlotData ( i , slotName , boneData ) ;
133
141
Color . rgba8888ToColor ( data . color , input . readInt32 ( ) ) ;
@@ -137,7 +145,10 @@ export class SkeletonBinary {
137
145
138
146
data . attachmentName = input . readStringRef ( ) ;
139
147
data . blendMode = input . readInt ( true ) ;
140
- if ( nonessential ) data . visible = input . readBoolean ( ) ;
148
+ if ( nonessential ) {
149
+ data . visible = input . readBoolean ( ) ;
150
+ data . path = path ;
151
+ }
141
152
skeletonData . slots . push ( data ) ;
142
153
}
143
154
@@ -152,14 +163,14 @@ export class SkeletonBinary {
152
163
for ( let ii = 0 ; ii < nn ; ii ++ )
153
164
data . bones . push ( skeletonData . bones [ input . readInt ( true ) ] ) ;
154
165
data . target = skeletonData . bones [ input . readInt ( true ) ] ;
155
- data . mix = input . readFloat ( ) ;
156
- data . softness = input . readFloat ( ) * scale ;
157
166
let flags = input . readByte ( ) ;
158
167
data . skinRequired = ( flags & 1 ) != 0 ;
159
168
data . bendDirection = ( flags & 2 ) != 0 ? 1 : - 1 ;
160
169
data . compress = ( flags & 4 ) != 0 ;
161
170
data . stretch = ( flags & 8 ) != 0 ;
162
171
data . uniform = ( flags & 16 ) != 0 ;
172
+ if ( ( flags & 32 ) != 0 ) data . mix = ( flags & 64 ) != 0 ? input . readFloat ( ) : 1 ;
173
+ if ( ( flags & 128 ) != 0 ) data . softness = input . readFloat ( ) * scale ;
163
174
skeletonData . ikConstraints . push ( data ) ;
164
175
}
165
176
@@ -174,22 +185,23 @@ export class SkeletonBinary {
174
185
for ( let ii = 0 ; ii < nn ; ii ++ )
175
186
data . bones . push ( skeletonData . bones [ input . readInt ( true ) ] ) ;
176
187
data . target = skeletonData . bones [ input . readInt ( true ) ] ;
177
- const flags = input . readByte ( ) ;
188
+ let flags = input . readByte ( ) ;
178
189
data . skinRequired = ( flags & 1 ) != 0 ;
179
190
data . local = ( flags & 2 ) != 0 ;
180
191
data . relative = ( flags & 4 ) != 0 ;
181
- data . offsetRotation = input . readFloat ( ) ;
182
- data . offsetX = input . readFloat ( ) * scale ;
183
- data . offsetY = input . readFloat ( ) * scale ;
184
- data . offsetScaleX = input . readFloat ( ) ;
185
- data . offsetScaleY = input . readFloat ( ) ;
186
- data . offsetShearY = input . readFloat ( ) ;
187
- data . mixRotate = input . readFloat ( ) ;
188
- data . mixX = input . readFloat ( ) ;
189
- data . mixY = input . readFloat ( ) ;
190
- data . mixScaleX = input . readFloat ( ) ;
191
- data . mixScaleY = input . readFloat ( ) ;
192
- data . mixShearY = input . readFloat ( ) ;
192
+ if ( ( flags & 8 ) != 0 ) data . offsetRotation = input . readFloat ( ) ;
193
+ if ( ( flags & 16 ) != 0 ) data . offsetX = input . readFloat ( ) * scale ;
194
+ if ( ( flags & 32 ) != 0 ) data . offsetY = input . readFloat ( ) * scale ;
195
+ if ( ( flags & 64 ) != 0 ) data . offsetScaleX = input . readFloat ( ) ;
196
+ if ( ( flags & 128 ) != 0 ) data . offsetScaleY = input . readFloat ( ) ;
197
+ flags = input . readByte ( ) ;
198
+ if ( ( flags & 1 ) != 0 ) data . offsetShearY = input . readFloat ( ) ;
199
+ if ( ( flags & 2 ) != 0 ) data . mixRotate = input . readFloat ( ) ;
200
+ if ( ( flags & 4 ) != 0 ) data . mixX = input . readFloat ( ) ;
201
+ if ( ( flags & 8 ) != 0 ) data . mixY = input . readFloat ( ) ;
202
+ if ( ( flags & 16 ) != 0 ) data . mixScaleX = input . readFloat ( ) ;
203
+ if ( ( flags & 32 ) != 0 ) data . mixScaleY = input . readFloat ( ) ;
204
+ if ( ( flags & 64 ) != 0 ) data . mixShearY = input . readFloat ( ) ;
193
205
skeletonData . transformConstraints . push ( data ) ;
194
206
}
195
207
@@ -205,10 +217,11 @@ export class SkeletonBinary {
205
217
for ( let ii = 0 ; ii < nn ; ii ++ )
206
218
data . bones . push ( skeletonData . bones [ input . readInt ( true ) ] ) ;
207
219
data . target = skeletonData . slots [ input . readInt ( true ) ] ;
208
- data . positionMode = input . readInt ( true ) ;
209
- data . spacingMode = input . readInt ( true ) ;
210
- data . rotateMode = input . readInt ( true ) ;
211
- data . offsetRotation = input . readFloat ( ) ;
220
+ const flags = input . readByte ( ) ;
221
+ data . positionMode = flags & 1 ;
222
+ data . spacingMode = ( flags >> 1 ) & 3 ;
223
+ data . rotateMode = ( flags >> 3 ) & 3 ;
224
+ if ( ( flags & 128 ) != 0 ) data . offsetRotation = input . readFloat ( ) ;
212
225
data . position = input . readFloat ( ) ;
213
226
if ( data . positionMode == PositionMode . Fixed ) data . position *= scale ;
214
227
data . spacing = input . readFloat ( ) ;
@@ -234,14 +247,14 @@ export class SkeletonBinary {
234
247
if ( ( flags & 8 ) != 0 ) data . rotate = input . readFloat ( ) ;
235
248
if ( ( flags & 16 ) != 0 ) data . scaleX = input . readFloat ( ) ;
236
249
if ( ( flags & 32 ) != 0 ) data . shearX = input . readFloat ( ) ;
250
+ data . limit = ( ( flags & 64 ) != 0 ? input . readFloat ( ) : 5000 ) * scale ;
237
251
data . step = 1 / input . readByte ( ) ;
238
252
data . inertia = input . readFloat ( ) ;
239
253
data . strength = input . readFloat ( ) ;
240
254
data . damping = input . readFloat ( ) ;
241
- data . massInverse = input . readFloat ( ) ;
242
- data . wind = input . readFloat ( ) * scale ;
243
- data . gravity = input . readFloat ( ) * scale ;
244
- data . mix = input . readFloat ( ) ;
255
+ data . massInverse = ( flags & 128 ) != 0 ? input . readFloat ( ) : 1 ;
256
+ data . wind = input . readFloat ( ) ;
257
+ data . gravity = input . readFloat ( ) ;
245
258
flags = input . readByte ( ) ;
246
259
if ( ( flags & 1 ) != 0 ) data . inertiaGlobal = true ;
247
260
if ( ( flags & 2 ) != 0 ) data . strengthGlobal = true ;
@@ -250,6 +263,7 @@ export class SkeletonBinary {
250
263
if ( ( flags & 16 ) != 0 ) data . windGlobal = true ;
251
264
if ( ( flags & 32 ) != 0 ) data . gravityGlobal = true ;
252
265
if ( ( flags & 64 ) != 0 ) data . mixGlobal = true ;
266
+ data . mix = ( flags & 128 ) != 0 ? input . readFloat ( ) : 1 ;
253
267
skeletonData . physicsConstraints . push ( data ) ;
254
268
}
255
269
@@ -365,7 +379,7 @@ export class SkeletonBinary {
365
379
let path = ( flags & 16 ) != 0 ? input . readStringRef ( ) : null ;
366
380
const color = ( flags & 32 ) != 0 ? input . readInt32 ( ) : 0xffffffff ;
367
381
const sequence = ( flags & 64 ) != 0 ? this . readSequence ( input ) : null ;
368
- let rotation = input . readFloat ( ) ;
382
+ let rotation = ( flags & 128 ) != 0 ? input . readFloat ( ) : 0 ;
369
383
let x = input . readFloat ( ) ;
370
384
let y = input . readFloat ( ) ;
371
385
let scaleX = input . readFloat ( ) ;
@@ -827,19 +841,20 @@ export class SkeletonBinary {
827
841
for ( let i = 0 , n = input . readInt ( true ) ; i < n ; i ++ ) {
828
842
let index = input . readInt ( true ) , frameCount = input . readInt ( true ) , frameLast = frameCount - 1 ;
829
843
let timeline = new IkConstraintTimeline ( frameCount , input . readInt ( true ) , index ) ;
830
- let time = input . readFloat ( ) , mix = input . readFloat ( ) , softness = input . readFloat ( ) * scale ;
844
+ let flags = input . readByte ( ) ;
845
+ let time = input . readFloat ( ) , mix = ( flags & 1 ) != 0 ? ( ( flags & 2 ) != 0 ? input . readFloat ( ) : 1 ) : 0 ;
846
+ let softness = ( flags & 4 ) != 0 ? input . readFloat ( ) * scale : 0 ;
831
847
for ( let frame = 0 , bezier = 0 ; ; frame ++ ) {
832
- const flags = input . readByte ( ) ;
833
- timeline . setFrame ( frame , time , mix , softness , input . readByte ( ) , ( flags & 1 ) != 0 , ( flags & 2 ) != 0 ) ;
848
+ timeline . setFrame ( frame , time , mix , softness , ( flags & 8 ) != 0 ? 1 : - 1 , ( flags & 16 ) != 0 , ( flags & 32 ) != 0 ) ;
834
849
if ( frame == frameLast ) break ;
835
- let time2 = input . readFloat ( ) , mix2 = input . readFloat ( ) , softness2 = input . readFloat ( ) * scale ;
836
- switch ( input . readByte ( ) ) {
837
- case CURVE_STEPPED :
838
- timeline . setStepped ( frame ) ;
839
- break ;
840
- case CURVE_BEZIER :
841
- setBezier ( input , timeline , bezier ++ , frame , 0 , time , time2 , mix , mix2 , 1 ) ;
842
- setBezier ( input , timeline , bezier ++ , frame , 1 , time , time2 , softness , softness2 , scale ) ;
850
+ flags = input . readByte ( ) ;
851
+ const time2 = input . readFloat ( ) , mix2 = ( flags & 1 ) != 0 ? ( ( flags & 2 ) != 0 ? input . readFloat ( ) : 1 ) : 0 ;
852
+ const softness2 = ( flags & 4 ) != 0 ? input . readFloat ( ) * scale : 0 ;
853
+ if ( ( flags & 64 ) != 0 ) {
854
+ timeline . setStepped ( frame ) ;
855
+ } else if ( ( flags & 128 ) != 0 ) {
856
+ setBezier ( input , timeline , bezier ++ , frame , 0 , time , time2 , mix , mix2 , 1 ) ;
857
+ setBezier ( input , timeline , bezier ++ , frame , 1 , time , time2 , softness , softness2 , scale ) ;
843
858
}
844
859
time = time2 ;
845
860
mix = mix2 ;
@@ -953,10 +968,10 @@ export class SkeletonBinary {
953
968
timelines . push ( readTimeline1 ( input , new PhysicsConstraintMassTimeline ( frameCount , bezierCount , index ) , 1 ) ) ;
954
969
break ;
955
970
case PHYSICS_WIND :
956
- timelines . push ( readTimeline1 ( input , new PhysicsConstraintWindTimeline ( frameCount , bezierCount , index ) , scale ) ) ;
971
+ timelines . push ( readTimeline1 ( input , new PhysicsConstraintWindTimeline ( frameCount , bezierCount , index ) , 1 ) ) ;
957
972
break ;
958
973
case PHYSICS_GRAVITY :
959
- timelines . push ( readTimeline1 ( input , new PhysicsConstraintGravityTimeline ( frameCount , bezierCount , index ) , scale ) ) ;
974
+ timelines . push ( readTimeline1 ( input , new PhysicsConstraintGravityTimeline ( frameCount , bezierCount , index ) , 1 ) ) ;
960
975
break ;
961
976
case PHYSICS_MIX :
962
977
timelines . push ( readTimeline1 ( input , new PhysicsConstraintMixTimeline ( frameCount , bezierCount , index ) , 1 ) ) ;
0 commit comments