mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 17:26:01 +08:00
Merge branch '4.1' into 4.2-beta
# Conflicts: # spine-sfml/cpp/example/testbed.cpp
This commit is contained in:
commit
aeef4495de
@ -33,7 +33,7 @@
|
||||
|
||||
static int /*bool*/ loadSequence(spAtlas *atlas, const char *basePath, spSequence *sequence) {
|
||||
spTextureRegionArray *regions = sequence->regions;
|
||||
char *path = CALLOC(char, strlen(basePath) + sequence->digits + 1);
|
||||
char *path = CALLOC(char, strlen(basePath) + sequence->digits + 2);
|
||||
int i;
|
||||
for (i = 0; i < regions->size; i++) {
|
||||
spSequence_getPath(sequence, basePath, i, path);
|
||||
|
||||
@ -1144,7 +1144,7 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) {
|
||||
TransformConstraintData *constraint = skeletonData->findTransformConstraint(constraintMap->_name);
|
||||
int constraintIndex = skeletonData->_transformConstraints.indexOf(constraint);
|
||||
TransformConstraintTimeline *timeline = new (__FILE__, __LINE__) TransformConstraintTimeline(
|
||||
constraintMap->_size, constraintMap->_size << 2, constraintIndex);
|
||||
constraintMap->_size, constraintMap->_size * 6, constraintIndex);
|
||||
|
||||
float time = Json::getFloat(keyMap, "time", 0);
|
||||
float mixRotate = Json::getFloat(keyMap, "mixRotate", 1);
|
||||
|
||||
@ -103,6 +103,7 @@ class MeshAttachment extends VertexAttachment implements HasTextureRegion {
|
||||
while (i < n) {
|
||||
uvs[i] = u + (1 - regionUVs[i + 1]) * width;
|
||||
uvs[i + 1] = v + regionUVs[i] * height;
|
||||
i += 2;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -33,27 +33,78 @@
|
||||
|
||||
using namespace spine;
|
||||
|
||||
class NullTextureLoader : public TextureLoader {
|
||||
public:
|
||||
virtual void load(AtlasPage &page, const String &path) {}
|
||||
|
||||
virtual void unload(void *texture) {}
|
||||
};
|
||||
|
||||
class NullAttachmentLoader : public AttachmentLoader {
|
||||
virtual RegionAttachment *newRegionAttachment(Skin &skin, const String &name, const String &path, Sequence *sequence) {
|
||||
return new (__FILE__, __LINE__) RegionAttachment(name);
|
||||
}
|
||||
|
||||
virtual MeshAttachment *newMeshAttachment(Skin &skin, const String &name, const String &path, Sequence *sequence) {
|
||||
return new (__FILE__, __LINE__) MeshAttachment(name);
|
||||
}
|
||||
|
||||
virtual BoundingBoxAttachment *newBoundingBoxAttachment(Skin &skin, const String &name) {
|
||||
return new (__FILE__, __LINE__) BoundingBoxAttachment(name);
|
||||
}
|
||||
|
||||
virtual PathAttachment *newPathAttachment(Skin &skin, const String &name) {
|
||||
return new (__FILE__, __LINE__) PathAttachment(name);
|
||||
}
|
||||
|
||||
virtual PointAttachment *newPointAttachment(Skin &skin, const String &name) {
|
||||
return new (__FILE__, __LINE__) PointAttachment(name);
|
||||
}
|
||||
|
||||
virtual ClippingAttachment *newClippingAttachment(Skin &skin, const String &name) {
|
||||
return new (__FILE__, __LINE__) ClippingAttachment(name);
|
||||
}
|
||||
|
||||
virtual void configureAttachment(Attachment *attachment) {
|
||||
}
|
||||
};
|
||||
|
||||
int main(void) {
|
||||
String atlasFile("data/spineboy-pma.atlas");
|
||||
String skeletonFile("data/spineboy-pro.skel");
|
||||
String atlasFile("");
|
||||
String skeletonFile("/Users/badlogic/Downloads/catsanddogs2.json");
|
||||
String animation = "";
|
||||
|
||||
float scale = 0.6f;
|
||||
SFMLTextureLoader textureLoader;
|
||||
Atlas *atlas = new Atlas(atlasFile, &textureLoader);
|
||||
NullAttachmentLoader nullLoader;
|
||||
Atlas *atlas = atlasFile.length() == 0 ? nullptr : new Atlas(atlasFile, &textureLoader);
|
||||
SkeletonData *skeletonData = nullptr;
|
||||
if (strnstr(skeletonFile.buffer(), ".skel", skeletonFile.length())) {
|
||||
SkeletonBinary binary(atlas);
|
||||
binary.setScale(scale);
|
||||
skeletonData = binary.readSkeletonDataFile(skeletonFile);
|
||||
if (strnstr(skeletonFile.buffer(), ".skel", skeletonFile.length()) != nullptr) {
|
||||
SkeletonBinary *binary = nullptr;
|
||||
if (atlas) {
|
||||
binary = new SkeletonBinary(atlas);
|
||||
} else {
|
||||
SkeletonJson json(atlas);
|
||||
json.setScale(scale);
|
||||
skeletonData = json.readSkeletonDataFile(skeletonFile);
|
||||
binary = new SkeletonBinary(&nullLoader);
|
||||
}
|
||||
binary->setScale(scale);
|
||||
skeletonData = binary->readSkeletonDataFile(skeletonFile);
|
||||
delete binary;
|
||||
} else {
|
||||
SkeletonJson *json = nullptr;
|
||||
if (atlas) {
|
||||
json = new SkeletonJson(atlas);
|
||||
} else {
|
||||
json = new SkeletonJson(&nullLoader);
|
||||
}
|
||||
json->setScale(scale);
|
||||
skeletonData = json->readSkeletonDataFile(skeletonFile);
|
||||
delete json;
|
||||
}
|
||||
|
||||
AnimationStateData stateData(skeletonData);
|
||||
SkeletonDrawable drawable(skeletonData, &stateData);
|
||||
drawable.skeleton->setPosition(320, 590);
|
||||
drawable.state->setAnimation(0, "walk", true);
|
||||
if (animation.length() > 0) drawable.state->setAnimation(0, animation, true);
|
||||
|
||||
sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - testbed");
|
||||
window.setFramerateLimit(60);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user