[c][cpp] fix parsing of default skins without attachment for binary files.

This commit is contained in:
badlogic 2019-08-07 11:34:31 +02:00
parent 30bcfbe1eb
commit fada823dcb
2 changed files with 21 additions and 10 deletions

View File

@ -825,12 +825,15 @@ spAttachment* spSkeletonBinary_readAttachment(spSkeletonBinary* self, _dataInput
spSkin* spSkeletonBinary_readSkin(spSkeletonBinary* self, _dataInput* input, int/*bool*/ defaultSkin,
spSkeletonData* skeletonData, int/*bool*/ nonessential) {
spSkin* skin;
int i, n, ii, nn;
const char* skinName = defaultSkin ? "default" : readStringRef(input, skeletonData);
skin = spSkin_create(skinName);
spSkin *skin;
int i, n, ii, nn, slotCount;
if (!defaultSkin) {
if (defaultSkin) {
slotCount = readVarint(input, 1);
if (slotCount == 0) return 0;
skin = spSkin_create("default");
} else {
skin = spSkin_create(readStringRef(input, skeletonData));
for (i = 0, n = readVarint(input, 1); i < n; i++)
spBoneDataArray_add(skin->bones, skeletonData->bones[readVarint(input, 1)]);
@ -842,9 +845,11 @@ spSkin* spSkeletonBinary_readSkin(spSkeletonBinary* self, _dataInput* input, int
for (i = 0, n = readVarint(input, 1); i < n; i++)
spPathConstraintDataArray_add(skin->pathConstraints, skeletonData->pathConstraints[readVarint(input, 1)]);
slotCount = readVarint(input, 1);
}
for (i = 0, n = readVarint(input, 1); i < n; ++i) {
for (i = 0; i < slotCount; ++i) {
int slotIndex = readVarint(input, 1);
for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) {
const char* name = readStringRef(input, skeletonData);

View File

@ -457,9 +457,14 @@ int SkeletonBinary::readVarint(DataInput *input, bool optimizePositive) {
Skin *
SkeletonBinary::readSkin(DataInput *input, bool defaultSkin, SkeletonData *skeletonData, bool nonessential) {
Skin *skin = new(__FILE__, __LINE__) Skin(defaultSkin ? "default" : readStringRef(input, skeletonData));
if (!defaultSkin) {
Skin *skin;
int slotCount = 0;
if (defaultSkin) {
slotCount = readVarint(input, true);
if (slotCount == 0) return NULL;
skin = new(__FILE__, __LINE__) Skin("default");
} else {
skin = new(__FILE__, __LINE__) Skin(readStringRef(input, skeletonData));
for (int i = 0, n = readVarint(input, true); i < n; i++)
skin->getBones().add(skeletonData->_bones[readVarint(input, true)]);
@ -471,9 +476,10 @@ SkeletonBinary::readSkin(DataInput *input, bool defaultSkin, SkeletonData *skele
for (int i = 0, n = readVarint(input, true); i < n; i++)
skin->getConstraints().add(skeletonData->_pathConstraints[readVarint(input, true)]);
slotCount = readVarint(input, true);
}
for (int i = 0, n = readVarint(input, true); i < n; ++i) {
for (int i = 0; i < slotCount; ++i) {
int slotIndex = readVarint(input, true);
for (int ii = 0, nn = readVarint(input, true); ii < nn; ++ii) {
String name(readStringRef(input, skeletonData));