|
@@ -487,8 +487,60 @@ void testSkinsApi(SkeletonData* skeletonData, Atlas* atlas) {
|
|
spSkin_dispose(skin);
|
|
spSkin_dispose(skin);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void testMixAndMatch(SkeletonData* skeletonData, Atlas* atlas) {
|
|
|
|
+ SkeletonDrawable* drawable = new SkeletonDrawable(skeletonData);
|
|
|
|
+ drawable->timeScale = 1;
|
|
|
|
+ drawable->setUsePremultipliedAlpha(true);
|
|
|
|
+
|
|
|
|
+ Skeleton* skeleton = drawable->skeleton;
|
|
|
|
+
|
|
|
|
+ // Create a new skin, by mixing and matching other skins
|
|
|
|
+ // that fit together. Items making up the girl are individual
|
|
|
|
+ // skins. Using the skin API, a new skin is created which is
|
|
|
|
+ // a combination of all these individual item skins.
|
|
|
|
+ spSkin* skin = spSkin_create("mix-and-match");
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "skin-base"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "nose/short"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "eyes/eyelids-girly"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "eyes/violet"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "hair/brown"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "clothes/hoodie-orange"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "legs/pants-jeans"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "accessories/bag"));
|
|
|
|
+ spSkin_addSkin(skin, spSkeletonData_findSkin(skeletonData, "accessories/hat-red-yellow"));
|
|
|
|
+ spSkeleton_setSkin(skeleton, skin);
|
|
|
|
+ spSkeleton_setSlotsToSetupPose(skeleton);
|
|
|
|
+
|
|
|
|
+ skeleton->x = 320;
|
|
|
|
+ skeleton->y = 590;
|
|
|
|
+ Skeleton_updateWorldTransform(skeleton);
|
|
|
|
+
|
|
|
|
+ AnimationState_setAnimationByName(drawable->state, 0, "dance", true);
|
|
|
|
+
|
|
|
|
+ sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - mix and match");
|
|
|
|
+ window.setFramerateLimit(60);
|
|
|
|
+ sf::Event event;
|
|
|
|
+ sf::Clock deltaClock;
|
|
|
|
+ while (window.isOpen()) {
|
|
|
|
+ while (window.pollEvent(event))
|
|
|
|
+ if (event.type == sf::Event::Closed) window.close();
|
|
|
|
+
|
|
|
|
+ float delta = deltaClock.getElapsedTime().asSeconds();
|
|
|
|
+ deltaClock.restart();
|
|
|
|
+
|
|
|
|
+ drawable->update(delta);
|
|
|
|
+
|
|
|
|
+ window.clear();
|
|
|
|
+ window.draw(*drawable);
|
|
|
|
+ window.display();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ spSkin_clear(skin);
|
|
|
|
+ spSkin_dispose(skin);
|
|
|
|
+}
|
|
|
|
+
|
|
int main () {
|
|
int main () {
|
|
- testcase(testSkinsApi, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f);
|
|
|
|
|
|
+ testcase(testMixAndMatch, "data/mix-and-match-pro.json", "data/mix-and-match-pro.skel", "data/mix-and-match-pma.atlas", 0.5f);
|
|
testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f);
|
|
testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f);
|
|
testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 1.0f);
|
|
testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 1.0f);
|
|
testcase(spineboy, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f);
|
|
testcase(spineboy, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f);
|
|
@@ -499,5 +551,6 @@ int main () {
|
|
testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 0.2f);
|
|
testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 0.2f);
|
|
testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor-pma.atlas", 0.5f);
|
|
testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor-pma.atlas", 0.5f);
|
|
testcase(stretchyman, "data/stretchyman-pro.json", "data/stretchyman-pro.skel", "data/stretchyman-pma.atlas", 0.6f);
|
|
testcase(stretchyman, "data/stretchyman-pro.json", "data/stretchyman-pro.skel", "data/stretchyman-pma.atlas", 0.6f);
|
|
|
|
+ // testcase(testSkinsApi, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|