@@ -1177,7 +1177,6 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1177
1177
slots = Json_getItem (root , "slots" );
1178
1178
if (slots ) {
1179
1179
Json * slotMap ;
1180
- skeletonData -> slotsCount = slots -> size ;
1181
1180
skeletonData -> slots = MALLOC (spSlotData * , slots -> size );
1182
1181
for (slotMap = slots -> child , i = 0 ; slotMap ; slotMap = slotMap -> next , ++ i ) {
1183
1182
spSlotData * data ;
@@ -1237,14 +1236,14 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1237
1236
data -> visible = Json_getInt (slotMap , "visible" , -1 );
1238
1237
data -> path = pathName ;
1239
1238
skeletonData -> slots [i ] = data ;
1239
+ skeletonData -> slotsCount ++ ;
1240
1240
}
1241
1241
}
1242
1242
1243
1243
/* IK constraints. */
1244
1244
ik = Json_getItem (root , "ik" );
1245
1245
if (ik ) {
1246
1246
Json * constraintMap ;
1247
- skeletonData -> ikConstraintsCount = ik -> size ;
1248
1247
skeletonData -> ikConstraints = MALLOC (spIkConstraintData * , ik -> size );
1249
1248
for (constraintMap = ik -> child , i = 0 ; constraintMap ; constraintMap = constraintMap -> next , ++ i ) {
1250
1249
const char * targetName ;
@@ -1259,6 +1258,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1259
1258
for (boneMap = boneMap -> child , ii = 0 ; boneMap ; boneMap = boneMap -> next , ++ ii ) {
1260
1259
data -> bones [ii ] = spSkeletonData_findBone (skeletonData , boneMap -> valueString );
1261
1260
if (!data -> bones [ii ]) {
1261
+ spIkConstraintData_dispose (data );
1262
1262
spSkeletonData_dispose (skeletonData );
1263
1263
_spSkeletonJson_setError (self , root , "IK bone not found: " , boneMap -> valueString );
1264
1264
return NULL ;
@@ -1268,6 +1268,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1268
1268
targetName = Json_getString (constraintMap , "target" , 0 );
1269
1269
data -> target = spSkeletonData_findBone (skeletonData , targetName );
1270
1270
if (!data -> target ) {
1271
+ spIkConstraintData_dispose (data );
1271
1272
spSkeletonData_dispose (skeletonData );
1272
1273
_spSkeletonJson_setError (self , root , "Target bone not found: " , targetName );
1273
1274
return NULL ;
@@ -1281,14 +1282,14 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1281
1282
data -> softness = Json_getFloat (constraintMap , "softness" , 0 ) * self -> scale ;
1282
1283
1283
1284
skeletonData -> ikConstraints [i ] = data ;
1285
+ skeletonData -> ikConstraintsCount ++ ;
1284
1286
}
1285
1287
}
1286
1288
1287
1289
/* Transform constraints. */
1288
1290
transform = Json_getItem (root , "transform" );
1289
1291
if (transform ) {
1290
1292
Json * constraintMap ;
1291
- skeletonData -> transformConstraintsCount = transform -> size ;
1292
1293
skeletonData -> transformConstraints = MALLOC (spTransformConstraintData * , transform -> size );
1293
1294
for (constraintMap = transform -> child , i = 0 ; constraintMap ; constraintMap = constraintMap -> next , ++ i ) {
1294
1295
const char * name ;
@@ -1304,6 +1305,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1304
1305
for (boneMap = boneMap -> child , ii = 0 ; boneMap ; boneMap = boneMap -> next , ++ ii ) {
1305
1306
data -> bones [ii ] = spSkeletonData_findBone (skeletonData , boneMap -> valueString );
1306
1307
if (!data -> bones [ii ]) {
1308
+ spTransformConstraintData_dispose (data );
1307
1309
spSkeletonData_dispose (skeletonData );
1308
1310
_spSkeletonJson_setError (self , root , "Transform bone not found: " , boneMap -> valueString );
1309
1311
return NULL ;
@@ -1313,6 +1315,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1313
1315
name = Json_getString (constraintMap , "target" , 0 );
1314
1316
data -> target = spSkeletonData_findBone (skeletonData , name );
1315
1317
if (!data -> target ) {
1318
+ spTransformConstraintData_dispose (data );
1316
1319
spSkeletonData_dispose (skeletonData );
1317
1320
_spSkeletonJson_setError (self , root , "Target bone not found: " , name );
1318
1321
return NULL ;
@@ -1335,14 +1338,14 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1335
1338
data -> mixShearY = Json_getFloat (constraintMap , "mixShearY" , 1 );
1336
1339
1337
1340
skeletonData -> transformConstraints [i ] = data ;
1341
+ skeletonData -> transformConstraintsCount ++ ;
1338
1342
}
1339
1343
}
1340
1344
1341
1345
/* Path constraints */
1342
1346
pathJson = Json_getItem (root , "path" );
1343
1347
if (pathJson ) {
1344
1348
Json * constraintMap ;
1345
- skeletonData -> pathConstraintsCount = pathJson -> size ;
1346
1349
skeletonData -> pathConstraints = MALLOC (spPathConstraintData * , pathJson -> size );
1347
1350
for (constraintMap = pathJson -> child , i = 0 ; constraintMap ; constraintMap = constraintMap -> next , ++ i ) {
1348
1351
const char * name ;
@@ -1358,6 +1361,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1358
1361
for (boneMap = boneMap -> child , ii = 0 ; boneMap ; boneMap = boneMap -> next , ++ ii ) {
1359
1362
data -> bones [ii ] = spSkeletonData_findBone (skeletonData , boneMap -> valueString );
1360
1363
if (!data -> bones [ii ]) {
1364
+ spPathConstraintData_dispose (data );
1361
1365
spSkeletonData_dispose (skeletonData );
1362
1366
_spSkeletonJson_setError (self , root , "Path bone not found: " , boneMap -> valueString );
1363
1367
return NULL ;
@@ -1367,6 +1371,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1367
1371
name = Json_getString (constraintMap , "target" , 0 );
1368
1372
data -> target = spSkeletonData_findSlot (skeletonData , name );
1369
1373
if (!data -> target ) {
1374
+ spPathConstraintData_dispose (data );
1370
1375
spSkeletonData_dispose (skeletonData );
1371
1376
_spSkeletonJson_setError (self , root , "Target slot not found: " , name );
1372
1377
return NULL ;
@@ -1404,6 +1409,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1404
1409
data -> mixY = Json_getFloat (constraintMap , "mixY" , data -> mixX );
1405
1410
1406
1411
skeletonData -> pathConstraints [i ] = data ;
1412
+ skeletonData -> pathConstraintsCount ++ ;
1407
1413
}
1408
1414
}
1409
1415
@@ -1471,6 +1477,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1471
1477
for (skinPart = skinPart -> child ; skinPart ; skinPart = skinPart -> next ) {
1472
1478
spBoneData * bone = spSkeletonData_findBone (skeletonData , skinPart -> valueString );
1473
1479
if (!bone ) {
1480
+ spSkin_dispose (skin );
1474
1481
spSkeletonData_dispose (skeletonData );
1475
1482
_spSkeletonJson_setError (self , root , "Skin bone constraint not found: " , skinPart -> valueString );
1476
1483
return NULL ;
@@ -1485,6 +1492,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1485
1492
spIkConstraintData * constraint = spSkeletonData_findIkConstraint (skeletonData ,
1486
1493
skinPart -> valueString );
1487
1494
if (!constraint ) {
1495
+ spSkin_dispose (skin );
1488
1496
spSkeletonData_dispose (skeletonData );
1489
1497
_spSkeletonJson_setError (self , root , "Skin IK constraint not found: " , skinPart -> valueString );
1490
1498
return NULL ;
@@ -1499,6 +1507,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1499
1507
spPathConstraintData * constraint = spSkeletonData_findPathConstraint (skeletonData ,
1500
1508
skinPart -> valueString );
1501
1509
if (!constraint ) {
1510
+ spSkin_dispose (skin );
1502
1511
spSkeletonData_dispose (skeletonData );
1503
1512
_spSkeletonJson_setError (self , root , "Skin path constraint not found: " , skinPart -> valueString );
1504
1513
return NULL ;
@@ -1513,6 +1522,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1513
1522
spTransformConstraintData * constraint = spSkeletonData_findTransformConstraint (skeletonData ,
1514
1523
skinPart -> valueString );
1515
1524
if (!constraint ) {
1525
+ spSkin_dispose (skin );
1516
1526
spSkeletonData_dispose (skeletonData );
1517
1527
_spSkeletonJson_setError (self , root , "Skin transform constraint not found: " ,
1518
1528
skinPart -> valueString );
@@ -1766,13 +1776,13 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1766
1776
spSkin * skin = !linkedMesh -> skin ? skeletonData -> defaultSkin : spSkeletonData_findSkin (skeletonData , linkedMesh -> skin );
1767
1777
if (!skin ) {
1768
1778
spSkeletonData_dispose (skeletonData );
1769
- _spSkeletonJson_setError (self , 0 , "Skin not found: " , linkedMesh -> skin );
1779
+ _spSkeletonJson_setError (self , root , "Skin not found: " , linkedMesh -> skin );
1770
1780
return NULL ;
1771
1781
}
1772
1782
parent = spSkin_getAttachment (skin , linkedMesh -> slotIndex , linkedMesh -> parent );
1773
1783
if (!parent ) {
1774
1784
spSkeletonData_dispose (skeletonData );
1775
- _spSkeletonJson_setError (self , 0 , "Parent mesh not found: " , linkedMesh -> parent );
1785
+ _spSkeletonJson_setError (self , root , "Parent mesh not found: " , linkedMesh -> parent );
1776
1786
return NULL ;
1777
1787
}
1778
1788
linkedMesh -> mesh -> super .timelineAttachment = linkedMesh -> inheritTimeline ? parent
@@ -1815,6 +1825,7 @@ spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char
1815
1825
spAnimation * animation = _spSkeletonJson_readAnimation (self , animationMap , skeletonData );
1816
1826
if (!animation ) {
1817
1827
spSkeletonData_dispose (skeletonData );
1828
+ _spSkeletonJson_setError (self , root , "Animation broken: " , animationMap -> name );
1818
1829
return NULL ;
1819
1830
}
1820
1831
skeletonData -> animations [skeletonData -> animationsCount ++ ] = animation ;
0 commit comments