mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-26 11:41:23 +08:00
[c][cpp] fix parsing of default skins without attachment for binary files.
This commit is contained in:
parent
30bcfbe1eb
commit
fada823dcb
@ -825,12 +825,15 @@ spAttachment* spSkeletonBinary_readAttachment(spSkeletonBinary* self, _dataInput
|
|||||||
|
|
||||||
spSkin* spSkeletonBinary_readSkin(spSkeletonBinary* self, _dataInput* input, int/*bool*/ defaultSkin,
|
spSkin* spSkeletonBinary_readSkin(spSkeletonBinary* self, _dataInput* input, int/*bool*/ defaultSkin,
|
||||||
spSkeletonData* skeletonData, int/*bool*/ nonessential) {
|
spSkeletonData* skeletonData, int/*bool*/ nonessential) {
|
||||||
spSkin* skin;
|
spSkin *skin;
|
||||||
int i, n, ii, nn;
|
int i, n, ii, nn, slotCount;
|
||||||
const char* skinName = defaultSkin ? "default" : readStringRef(input, skeletonData);
|
|
||||||
skin = spSkin_create(skinName);
|
|
||||||
|
|
||||||
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++)
|
for (i = 0, n = readVarint(input, 1); i < n; i++)
|
||||||
spBoneDataArray_add(skin->bones, skeletonData->bones[readVarint(input, 1)]);
|
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++)
|
for (i = 0, n = readVarint(input, 1); i < n; i++)
|
||||||
spPathConstraintDataArray_add(skin->pathConstraints, skeletonData->pathConstraints[readVarint(input, 1)]);
|
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);
|
int slotIndex = readVarint(input, 1);
|
||||||
for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) {
|
for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) {
|
||||||
const char* name = readStringRef(input, skeletonData);
|
const char* name = readStringRef(input, skeletonData);
|
||||||
|
|||||||
@ -457,9 +457,14 @@ int SkeletonBinary::readVarint(DataInput *input, bool optimizePositive) {
|
|||||||
|
|
||||||
Skin *
|
Skin *
|
||||||
SkeletonBinary::readSkin(DataInput *input, bool defaultSkin, SkeletonData *skeletonData, bool nonessential) {
|
SkeletonBinary::readSkin(DataInput *input, bool defaultSkin, SkeletonData *skeletonData, bool nonessential) {
|
||||||
Skin *skin = new(__FILE__, __LINE__) Skin(defaultSkin ? "default" : readStringRef(input, skeletonData));
|
Skin *skin;
|
||||||
|
int slotCount = 0;
|
||||||
if (!defaultSkin) {
|
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++)
|
for (int i = 0, n = readVarint(input, true); i < n; i++)
|
||||||
skin->getBones().add(skeletonData->_bones[readVarint(input, true)]);
|
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++)
|
for (int i = 0, n = readVarint(input, true); i < n; i++)
|
||||||
skin->getConstraints().add(skeletonData->_pathConstraints[readVarint(input, true)]);
|
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);
|
int slotIndex = readVarint(input, true);
|
||||||
for (int ii = 0, nn = readVarint(input, true); ii < nn; ++ii) {
|
for (int ii = 0, nn = readVarint(input, true); ii < nn; ++ii) {
|
||||||
String name(readStringRef(input, skeletonData));
|
String name(readStringRef(input, skeletonData));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user