|
@@ -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 (strncmp(skeletonFile.buffer(), ".skel", skeletonFile.length()) > 0) {
|
|
|
- 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 {
|
|
|
+ binary = new SkeletonBinary(&nullLoader);
|
|
|
+ }
|
|
|
+ binary->setScale(scale);
|
|
|
+ skeletonData = binary->readSkeletonDataFile(skeletonFile);
|
|
|
+ delete binary;
|
|
|
} else {
|
|
|
- SkeletonJson json(atlas);
|
|
|
- json.setScale(scale);
|
|
|
- skeletonData = json.readSkeletonDataFile(skeletonFile);
|
|
|
+ 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);
|