Merge branch '3.7-beta' into 3.7-beta-cpp

This commit is contained in:
badlogic 2018-08-14 15:09:15 +02:00
commit e724231c5f
263 changed files with 307 additions and 179829 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 KiB

After

Width:  |  Height:  |  Size: 480 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 467 KiB

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 KiB

After

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 KiB

After

Width:  |  Height:  |  Size: 614 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

After

Width:  |  Height:  |  Size: 190 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

After

Width:  |  Height:  |  Size: 160 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 208 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 129 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 423 KiB

After

Width:  |  Height:  |  Size: 430 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 423 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 73 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 518 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 517 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 121 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 567 KiB

After

Width:  |  Height:  |  Size: 583 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 KiB

After

Width:  |  Height:  |  Size: 590 KiB

View File

@ -1,277 +1 @@
{
"skeleton": { "hash": "B2ZPp7lIxBrN+g+ALWuTw4IWKYE", "spine": "3.7.19-beta", "width": 1680, "height": 1782.28, "images": "./images/", "audio": "" },
"bones": [
{ "name": "root", "y": -526.32 },
{ "name": "leaves", "parent": "root", "x": -0.17, "y": 1310.1 },
{ "name": "logo", "parent": "root", "y": 1332.03 },
{ "name": "play", "parent": "root", "x": 3.02, "y": -83.61 },
{ "name": "quit", "parent": "root", "x": -2.86, "y": -201.21 },
{ "name": "settings", "parent": "root", "x": 3.02, "y": -144.37 }
],
"slots": [
{ "name": "background", "bone": "root" },
{ "name": "leaves", "bone": "leaves", "attachment": "leaves" },
{ "name": "logo", "bone": "logo", "attachment": "logo" },
{ "name": "play", "bone": "play", "color": "fff99dff", "attachment": "play" },
{ "name": "quit", "bone": "quit", "color": "fff99dff", "attachment": "quit" },
{ "name": "settings", "bone": "settings", "color": "fff99dff", "attachment": "settings" }
],
"skins": {
"default": {
"leaves": {
"leaves": { "y": -28.54, "width": 1042, "height": 522 }
},
"logo": {
"logo": { "y": -20.4, "width": 917, "height": 323 }
},
"play": {
"play": { "width": 218, "height": 77 }
},
"quit": {
"quit": { "width": 216, "height": 77 }
},
"settings": {
"settings": { "width": 446, "height": 76 }
}
}
},
"animations": {
"animation": {
"slots": {
"leaves": {
"color": [
{ "time": 0, "color": "ffffff00" },
{ "time": 0.3333, "color": "ffffffff" }
]
},
"logo": {
"color": [
{ "time": 0, "color": "ffffff00" },
{ "time": 0.3333, "color": "ffffffff" }
]
},
"play": {
"color": [
{ "time": 1.3333, "color": "fff99dff" },
{ "time": 1.5667, "color": "ffffffff", "curve": "stepped" },
{ "time": 1.8333, "color": "ffffffff" },
{ "time": 2.0667, "color": "fff99dff" }
]
},
"quit": {
"color": [
{ "time": 2.4, "color": "fff99dff" },
{ "time": 2.6333, "color": "ffffffff" }
]
},
"settings": {
"color": [
{ "time": 1.8667, "color": "fff99dff" },
{ "time": 2.1, "color": "ffffffff", "curve": "stepped" },
{ "time": 2.3667, "color": "ffffffff" },
{ "time": 2.6, "color": "fff99dff" }
]
}
},
"bones": {
"logo": {
"translate": [
{
"time": 0,
"x": 0,
"y": 40.8,
"curve": [ 0.043, 0.15, 0.345, 1.27 ]
},
{
"time": 0.3333,
"x": 0,
"y": -597.72,
"curve": [ 0.425, 0.17, 0.592, 1 ]
},
{
"time": 1,
"x": 0,
"y": -583.72,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{
"time": 1.6667,
"x": 0,
"y": -592.12,
"curve": [ 0.408, 0.01, 0.655, 0.99 ]
},
{
"time": 2.3333,
"x": 0,
"y": -583.72,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{
"time": 3,
"x": 0,
"y": -592.12,
"curve": [ 0.408, 0.01, 0.655, 0.99 ]
},
{ "time": 3.6667, "x": 0, "y": -583.72 }
],
"scale": [
{
"time": 0,
"x": 0.342,
"y": 0.342,
"curve": [ 0, 0, 0.744, 0.4 ]
},
{
"time": 0.3333,
"x": 1,
"y": 1,
"curve": [ 0.19, 0.38, 0.658, 0.99 ]
},
{
"time": 1,
"x": 1.02,
"y": 1.03,
"curve": [ 0.371, 0, 0.661, 1 ]
},
{
"time": 1.6667,
"x": 1,
"y": 1,
"curve": [ 0.388, 0.01, 0.687, 1 ]
},
{
"time": 2.3333,
"x": 1.02,
"y": 1.03,
"curve": [ 0.371, 0, 0.661, 1 ]
},
{
"time": 3,
"x": 1,
"y": 1,
"curve": [ 0.388, 0.01, 0.687, 1 ]
},
{ "time": 3.6667, "x": 1.02, "y": 1.03 }
]
},
"play": {
"translate": [
{
"time": 0.6667,
"x": 0,
"y": 0,
"curve": [ 0, 0, 0.448, 1.63 ]
},
{ "time": 0.8667, "x": 0, "y": 480.2 }
],
"scale": [
{
"time": 1.3333,
"x": 1,
"y": 1,
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 1.5667, "x": 1.231, "y": 1.231, "curve": "stepped" },
{
"time": 1.8333,
"x": 1.231,
"y": 1.231,
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.0667, "x": 1, "y": 1 }
]
},
"settings": {
"translate": [
{
"time": 0.8,
"x": 0,
"y": 0,
"curve": [ 0, 0, 0.448, 1.63 ]
},
{ "time": 1, "x": 0, "y": 431.2 }
],
"scale": [
{
"time": 1.8667,
"x": 1,
"y": 1,
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.1, "x": 1.23, "y": 1.23, "curve": "stepped" },
{
"time": 2.3667,
"x": 1.23,
"y": 1.23,
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.6, "x": 1, "y": 1 }
]
},
"quit": {
"translate": [
{
"time": 0.9333,
"x": 0,
"y": 0,
"curve": [ 0, 0, 0.448, 1.63 ]
},
{ "time": 1.1333, "x": 0, "y": 376.32 }
],
"scale": [
{
"time": 2.4,
"x": 1,
"y": 1,
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.6333, "x": 1.23, "y": 1.23 }
]
},
"leaves": {
"translate": [
{
"time": 0,
"x": 0,
"y": 0,
"curve": [ 0.043, 0.15, 0.345, 1.27 ]
},
{
"time": 0.3333,
"x": 0.17,
"y": -601.24,
"curve": [ 0.425, 0.17, 0.592, 1 ]
},
{
"time": 1.3333,
"x": 0.17,
"y": -580.84,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{ "time": 2, "x": 0.17, "y": -595.12 },
{
"time": 2.6667,
"x": 0.17,
"y": -580.84,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{ "time": 3.3333, "x": 0.17, "y": -595.12 }
],
"scale": [
{
"time": 0,
"x": 0.34,
"y": 0.34,
"curve": [ 0, 0, 0.744, 0.4 ]
},
{ "time": 0.3333, "x": 1, "y": 1 },
{ "time": 1.3333, "x": 1.03, "y": 1.02 },
{ "time": 2, "x": 1, "y": 1 },
{ "time": 2.6667, "x": 1.03, "y": 1.02 },
{ "time": 3.3333, "x": 1, "y": 1 }
]
}
}
}
}
}
{"skeleton":{"hash":"B2ZPp7lIxBrN+g+ALWuTw4IWKYE","spine":"3.7.23-beta","width":1680,"height":1782.28,"images":"./images/","audio":""},"bones":[{"name":"root","y":-526.32},{"name":"leaves","parent":"root","x":-0.17,"y":1310.1},{"name":"logo","parent":"root","y":1332.03},{"name":"play","parent":"root","x":3.02,"y":-83.61},{"name":"quit","parent":"root","x":-2.86,"y":-201.21},{"name":"settings","parent":"root","x":3.02,"y":-144.37}],"slots":[{"name":"background","bone":"root"},{"name":"leaves","bone":"leaves","attachment":"leaves"},{"name":"logo","bone":"logo","attachment":"logo"},{"name":"play","bone":"play","color":"fff99dff","attachment":"play"},{"name":"quit","bone":"quit","color":"fff99dff","attachment":"quit"},{"name":"settings","bone":"settings","color":"fff99dff","attachment":"settings"}],"skins":{"default":{"leaves":{"leaves":{"y":-28.54,"width":1042,"height":522}},"logo":{"logo":{"y":-20.4,"width":917,"height":323}},"play":{"play":{"width":218,"height":77}},"quit":{"quit":{"width":216,"height":77}},"settings":{"settings":{"width":446,"height":76}}}},"animations":{"animation":{"slots":{"leaves":{"color":[{"time":0,"color":"ffffff00"},{"time":0.3333,"color":"ffffffff"}]},"logo":{"color":[{"time":0,"color":"ffffff00"},{"time":0.3333,"color":"ffffffff"}]},"play":{"color":[{"time":1.3333,"color":"fff99dff"},{"time":1.5667,"color":"ffffffff","curve":"stepped"},{"time":1.8333,"color":"ffffffff"},{"time":2.0667,"color":"fff99dff"}]},"quit":{"color":[{"time":2.4,"color":"fff99dff"},{"time":2.6333,"color":"ffffffff"}]},"settings":{"color":[{"time":1.8667,"color":"fff99dff"},{"time":2.1,"color":"ffffffff","curve":"stepped"},{"time":2.3667,"color":"ffffffff"},{"time":2.6,"color":"fff99dff"}]}},"bones":{"logo":{"translate":[{"time":0,"x":0,"y":40.8,"curve":[0.043,0.15,0.345,1.27]},{"time":0.3333,"x":0,"y":-597.72,"curve":[0.425,0.17,0.592,1]},{"time":1,"x":0,"y":-583.72,"curve":[0.402,0,0.603,1]},{"time":1.6667,"x":0,"y":-592.12,"curve":[0.408,0.01,0.655,0.99]},{"time":2.3333,"x":0,"y":-583.72,"curve":[0.402,0,0.603,1]},{"time":3,"x":0,"y":-592.12,"curve":[0.408,0.01,0.655,0.99]},{"time":3.6667,"x":0,"y":-583.72}],"scale":[{"time":0,"x":0.342,"y":0.342,"curve":[0,0,0.744,0.4]},{"time":0.3333,"x":1,"y":1,"curve":[0.19,0.38,0.658,0.99]},{"time":1,"x":1.02,"y":1.03,"curve":[0.371,0,0.661,1]},{"time":1.6667,"x":1,"y":1,"curve":[0.388,0.01,0.687,1]},{"time":2.3333,"x":1.02,"y":1.03,"curve":[0.371,0,0.661,1]},{"time":3,"x":1,"y":1,"curve":[0.388,0.01,0.687,1]},{"time":3.6667,"x":1.02,"y":1.03}]},"play":{"translate":[{"time":0.6667,"x":0,"y":0,"curve":[0,0,0.448,1.63]},{"time":0.8667,"x":0,"y":480.2}],"scale":[{"time":1.3333,"x":1,"y":1,"curve":[0,0,0.526,2.46]},{"time":1.5667,"x":1.231,"y":1.231,"curve":"stepped"},{"time":1.8333,"x":1.231,"y":1.231,"curve":[0,0,0.526,2.46]},{"time":2.0667,"x":1,"y":1}]},"settings":{"translate":[{"time":0.8,"x":0,"y":0,"curve":[0,0,0.448,1.63]},{"time":1,"x":0,"y":431.2}],"scale":[{"time":1.8667,"x":1,"y":1,"curve":[0,0,0.526,2.46]},{"time":2.1,"x":1.23,"y":1.23,"curve":"stepped"},{"time":2.3667,"x":1.23,"y":1.23,"curve":[0,0,0.526,2.46]},{"time":2.6,"x":1,"y":1}]},"quit":{"translate":[{"time":0.9333,"x":0,"y":0,"curve":[0,0,0.448,1.63]},{"time":1.1333,"x":0,"y":376.32}],"scale":[{"time":2.4,"x":1,"y":1,"curve":[0,0,0.526,2.46]},{"time":2.6333,"x":1.23,"y":1.23}]},"leaves":{"translate":[{"time":0,"x":0,"y":0,"curve":[0.043,0.15,0.345,1.27]},{"time":0.3333,"x":0.17,"y":-601.24,"curve":[0.425,0.17,0.592,1]},{"time":1.3333,"x":0.17,"y":-580.84,"curve":[0.402,0,0.603,1]},{"time":2,"x":0.17,"y":-595.12},{"time":2.6667,"x":0.17,"y":-580.84,"curve":[0.402,0,0.603,1]},{"time":3.3333,"x":0.17,"y":-595.12}],"scale":[{"time":0,"x":0.34,"y":0.34,"curve":[0,0,0.744,0.4]},{"time":0.3333,"x":1,"y":1},{"time":1.3333,"x":1.03,"y":1.02},{"time":2,"x":1,"y":1},{"time":2.6667,"x":1.03,"y":1.02},{"time":3.3333,"x":1,"y":1}]}}}}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

After

Width:  |  Height:  |  Size: 112 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 KiB

After

Width:  |  Height:  |  Size: 596 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 KiB

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 135 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 159 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 KiB

After

Width:  |  Height:  |  Size: 590 KiB

View File

@ -432,7 +432,7 @@ typedef spDeformTimeline DeformTimeline;
/**/
static const int IKCONSTRAINT_ENTRIES = 3;
static const int IKCONSTRAINT_ENTRIES = 4;
typedef struct spIkConstraintTimeline {
spCurveTimeline super;
@ -452,7 +452,7 @@ typedef struct spIkConstraintTimeline {
SP_API spIkConstraintTimeline* spIkConstraintTimeline_create (int framesCount);
SP_API void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameIndex, float time, float mix, int bendDirection);
SP_API void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameIndex, float time, float mix, int bendDirection, int /**boolean**/ stretch);
#ifdef SPINE_SHORT_NAMES
typedef spIkConstraintTimeline IkConstraintTimeline;

View File

@ -49,6 +49,7 @@ typedef struct spIkConstraint {
spBone* target;
int bendDirection;
int /*boolean*/ stretch;
float mix;
#ifdef __cplusplus
@ -58,6 +59,7 @@ typedef struct spIkConstraint {
bones(0),
target(0),
bendDirection(0),
stretch(0),
mix(0) {
}
#endif
@ -68,8 +70,8 @@ SP_API void spIkConstraint_dispose (spIkConstraint* self);
SP_API void spIkConstraint_apply (spIkConstraint* self);
SP_API void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, float alpha);
SP_API void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float targetY, int bendDirection, float alpha);
SP_API void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, int /*boolean*/ stretch, float alpha);
SP_API void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float targetY, int bendDirection, int /*boolean*/ stretch, float alpha);
#ifdef SPINE_SHORT_NAMES
typedef spIkConstraint IkConstraint;

View File

@ -46,6 +46,7 @@ typedef struct spIkConstraintData {
spBoneData* target;
int bendDirection;
int /*boolean*/ stretch;
float mix;
#ifdef __cplusplus
@ -55,6 +56,7 @@ typedef struct spIkConstraintData {
bones(0),
target(0),
bendDirection(0),
stretch(0),
mix(0) {
}
#endif

View File

@ -63,7 +63,7 @@
#include <spine/dll.h>
// Required for sprintf and consorts on MSVC
/* Required for sprintf and consorts on MSVC */
#ifdef _MSC_VER
#pragma warning(disable:4996)
#endif

View File

@ -243,7 +243,6 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton,
spBone *bone;
int frame;
float prevRotation, frameTime, percent, r;
spRotateTimeline* self = SUB_CAST(spRotateTimeline, timeline);
bone = skeleton->bones[self->boneIndex];
@ -301,6 +300,7 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton,
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spRotateTimeline_getPropertyId (const spTimeline* timeline) {
@ -385,6 +385,7 @@ void _spTranslateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleto
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spTranslateTimeline_getPropertyId (const spTimeline* self) {
@ -584,6 +585,7 @@ void _spShearTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spShearTimeline_getPropertyId (const spTimeline* timeline) {
@ -667,6 +669,7 @@ void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spColorTimeline_getPropertyId (const spTimeline* timeline) {
@ -776,6 +779,7 @@ void _spTwoColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spTwoColorTimeline_getPropertyId (const spTimeline* timeline) {
@ -1083,6 +1087,7 @@ void _spDeformTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton,
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spDeformTimeline_getPropertyId (const spTimeline* timeline) {
@ -1156,10 +1161,12 @@ void _spEventTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f
firedEvents[*eventsCount] = self->events[frame];
(*eventsCount)++;
}
UNUSED(direction);
}
int _spEventTimeline_getPropertyId (const spTimeline* timeline) {
return SP_TIMELINE_EVENT << 24;
UNUSED(timeline);
}
void _spEventTimeline_dispose (spTimeline* timeline) {
@ -1233,6 +1240,7 @@ void _spDrawOrderTimeline_apply (const spTimeline* timeline, spSkeleton* skeleto
int _spDrawOrderTimeline_getPropertyId (const spTimeline* timeline) {
return SP_TIMELINE_DRAWORDER << 24;
UNUSED(timeline);
}
void _spDrawOrderTimeline_dispose (spTimeline* timeline) {
@ -1274,8 +1282,8 @@ void spDrawOrderTimeline_setFrame (spDrawOrderTimeline* self, int frameIndex, fl
/**/
static const int IKCONSTRAINT_PREV_TIME = -3, IKCONSTRAINT_PREV_MIX = -2, IKCONSTRAINT_PREV_BEND_DIRECTION = -1;
static const int IKCONSTRAINT_MIX = 1, IKCONSTRAINT_BEND_DIRECTION = 2;
static const int IKCONSTRAINT_PREV_TIME = -4, IKCONSTRAINT_PREV_MIX = -3, IKCONSTRAINT_PREV_BEND_DIRECTION = -2, IKCONSTRAINT_PREV_STRETCH = -1;
static const int IKCONSTRAINT_MIX = 1, IKCONSTRAINT_BEND_DIRECTION = 2, IKCONSTRAINT_STRETCH = 3;
void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time,
spEvent** firedEvents, int* eventsCount, float alpha, spMixBlend blend, spMixDirection direction) {
@ -1293,10 +1301,12 @@ void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skel
case SP_MIX_BLEND_SETUP:
constraint->mix = constraint->data->mix;
constraint->bendDirection = constraint->data->bendDirection;
constraint->stretch = constraint->data->stretch;
return;
case SP_MIX_BLEND_FIRST:
constraint->mix += (constraint->data->mix - constraint->mix) * alpha;
constraint->bendDirection = constraint->data->bendDirection;
constraint->stretch = constraint->data->stretch;
case SP_MIX_BLEND_REPLACE:
case SP_MIX_BLEND_ADD:
; /* to appease compiler */
@ -1309,11 +1319,19 @@ void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skel
if (time >= frames[framesCount - IKCONSTRAINT_ENTRIES]) { /* Time is after last frame. */
if (blend == SP_MIX_BLEND_SETUP) {
constraint->mix = constraint->data->mix + (frames[framesCount + IKCONSTRAINT_PREV_MIX] - constraint->data->mix) * alpha;
constraint->bendDirection = direction == SP_MIX_DIRECTION_OUT ? constraint->data->bendDirection
: (int)frames[framesCount + IKCONSTRAINT_PREV_BEND_DIRECTION];
if (direction == SP_MIX_DIRECTION_OUT) {
constraint->bendDirection = constraint->data->bendDirection;
constraint->stretch = constraint->data->stretch;
} else {
constraint->bendDirection = (int)frames[framesCount + IKCONSTRAINT_PREV_BEND_DIRECTION];
constraint->stretch = frames[framesCount + IKCONSTRAINT_PREV_STRETCH] ? 1 : 0;
}
} else {
constraint->mix += (frames[framesCount + IKCONSTRAINT_PREV_MIX] - constraint->mix) * alpha;
if (direction == SP_MIX_DIRECTION_IN) constraint->bendDirection = (int)frames[framesCount + IKCONSTRAINT_PREV_BEND_DIRECTION];
if (direction == SP_MIX_DIRECTION_IN) {
constraint->bendDirection = (int)frames[framesCount + IKCONSTRAINT_PREV_BEND_DIRECTION];
constraint->stretch = frames[framesCount + IKCONSTRAINT_PREV_STRETCH] ? 1 : 0;
}
}
return;
}
@ -1326,10 +1344,19 @@ void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skel
if (blend == SP_MIX_BLEND_SETUP) {
constraint->mix = constraint->data->mix + (mix + (frames[frame + IKCONSTRAINT_MIX] - mix) * percent - constraint->data->mix) * alpha;
constraint->bendDirection = direction == SP_MIX_DIRECTION_OUT ? constraint->data->bendDirection : (int)frames[frame + IKCONSTRAINT_PREV_BEND_DIRECTION];
if (direction == SP_MIX_DIRECTION_OUT) {
constraint->bendDirection = constraint->data->bendDirection;
constraint->stretch = constraint->data->stretch;
} else {
constraint->bendDirection = (int)frames[frame + IKCONSTRAINT_PREV_BEND_DIRECTION];
constraint->stretch = frames[frame + IKCONSTRAINT_PREV_STRETCH] ? 1 : 0;
}
} else {
constraint->mix += (mix + (frames[frame + IKCONSTRAINT_MIX] - mix) * percent - constraint->mix) * alpha;
if (direction == SP_MIX_DIRECTION_IN) constraint->bendDirection = (int)frames[frame + IKCONSTRAINT_PREV_BEND_DIRECTION];
if (direction == SP_MIX_DIRECTION_IN) {
constraint->bendDirection = (int)frames[frame + IKCONSTRAINT_PREV_BEND_DIRECTION];
constraint->stretch = frames[frame + IKCONSTRAINT_PREV_STRETCH] ? 1 : 0;
}
}
UNUSED(lastTime);
@ -1345,11 +1372,12 @@ spIkConstraintTimeline* spIkConstraintTimeline_create (int framesCount) {
return (spIkConstraintTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_IKCONSTRAINT, IKCONSTRAINT_ENTRIES, _spIkConstraintTimeline_apply, _spIkConstraintTimeline_getPropertyId);
}
void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameIndex, float time, float mix, int bendDirection) {
void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameIndex, float time, float mix, int bendDirection, int /*boolean*/ stretch) {
frameIndex *= IKCONSTRAINT_ENTRIES;
self->frames[frameIndex] = time;
self->frames[frameIndex + IKCONSTRAINT_MIX] = mix;
self->frames[frameIndex + IKCONSTRAINT_BEND_DIRECTION] = (float)bendDirection;
self->frames[frameIndex + IKCONSTRAINT_STRETCH] = stretch ? 1 : 0;
}
/**/
@ -1435,6 +1463,7 @@ void _spTransformConstraintTimeline_apply (const spTimeline* timeline, spSkeleto
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spTransformConstraintTimeline_getPropertyId (const spTimeline* timeline) {
@ -1506,6 +1535,7 @@ void _spPathConstraintPositionTimeline_apply(const spTimeline* timeline, spSkele
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spPathConstraintPositionTimeline_getPropertyId (const spTimeline* timeline) {
@ -1574,6 +1604,7 @@ void _spPathConstraintSpacingTimeline_apply(const spTimeline* timeline, spSkelet
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spPathConstraintSpacingTimeline_getPropertyId (const spTimeline* timeline) {
@ -1653,6 +1684,7 @@ void _spPathConstraintMixTimeline_apply(const spTimeline* timeline, spSkeleton*
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
UNUSED(direction);
}
int _spPathConstraintMixTimeline_getPropertyId (const spTimeline* timeline) {

View File

@ -516,6 +516,7 @@ void _spAnimationState_applyRotateTimeline (spAnimationState* self, spTimeline*
float percent;
float total, diff;
int /*boolean*/ current, dir;
UNUSED(self);
if (firstFrame) timelinesRotation[i] = 0;

View File

@ -39,6 +39,7 @@ spIkConstraint *spIkConstraint_create(spIkConstraintData *data, const spSkeleton
spIkConstraint *self = NEW(spIkConstraint);
CONST_CAST(spIkConstraintData*, self->data) = data;
self->bendDirection = data->bendDirection;
self->stretch = data->stretch;
self->mix = data->mix;
self->bonesCount = self->data->bonesCount;
@ -58,17 +59,17 @@ void spIkConstraint_dispose(spIkConstraint *self) {
void spIkConstraint_apply(spIkConstraint *self) {
switch (self->bonesCount) {
case 1:
spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->mix);
spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->stretch, self->mix);
break;
case 2:
spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, self->bendDirection, self->mix);
spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, self->bendDirection, self->stretch, self->mix);
break;
}
}
void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, float alpha) {
void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, int /*boolean*/ stretch, float alpha) {
spBone* p = bone->parent;
float id, x, y, tx, ty, rotationIK;
float id, x, y, tx, ty, rotationIK, sx;
if (!bone->appliedValid) spBone_updateAppliedTransform(bone);
id = 1 / (p->a * p->d - p->b * p->c);
x = targetX - p->worldX, y = targetY - p->worldY;
@ -77,16 +78,21 @@ void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, float al
if (bone->ascaleX < 0) rotationIK += 180;
if (rotationIK > 180) rotationIK -= 360;
else if (rotationIK < -180) rotationIK += 360;
spBone_updateWorldTransformWith(bone, bone->ax, bone->ay, bone->arotation + rotationIK * alpha, bone->ascaleX,
sx = bone->ascaleX;
if (stretch) {
float b = bone->data->length * sx, dd = SQRT(tx * tx + ty * ty);
if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha - 1;
}
spBone_updateWorldTransformWith(bone, bone->ax, bone->ay, bone->arotation + rotationIK * alpha, sx,
bone->ascaleY, bone->ashearX, bone->ashearY);
}
void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float targetY, int bendDir, float alpha) {
float px, py, psx, psy;
void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float targetY, int bendDir, int /*boolean*/ stretch, float alpha) {
float px, py, psx, sx, psy;
float cx, cy, csx, cwx, cwy;
int o1, o2, s2, u;
spBone* pp = parent->parent;
float tx, ty, dx, dy, l1, l2, a1, a2, r;
float tx, ty, dd, dx, dy, l1, l2, a1, a2, r;
float id, x, y;
if (alpha == 0) {
spBone_updateWorldTransform(child);
@ -94,7 +100,7 @@ void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float
}
if (!parent->appliedValid) spBone_updateAppliedTransform(parent);
if (!child->appliedValid) spBone_updateAppliedTransform(child);
px = parent->ax; py = parent->ay; psx = parent->ascaleX; psy = parent->ascaleY; csx = child->ascaleX;
px = parent->ax; py = parent->ay; psx = parent->ascaleX; sx = psx; psy = parent->ascaleY; csx = child->ascaleX;
if (psx < 0) {
psx = -psx;
o1 = 180;
@ -129,6 +135,7 @@ void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float
y = targetY - pp->worldY;
tx = (x * pp->d - y * pp->b) * id - px;
ty = (y * pp->a - x * pp->c) * id - py;
dd = tx * tx + ty * ty;
x = cwx - pp->worldX;
y = cwy - pp->worldY;
dx = (x * pp->d - y * pp->b) * id - px;
@ -138,16 +145,19 @@ void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float
if (u) {
float cosine, a, b;
l2 *= psx;
cosine = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2);
cosine = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);
if (cosine < -1) cosine = -1;
else if (cosine > 1) cosine = 1;
else if (cosine > 1) {
cosine = 1;
if (stretch && l1 + l2 > 0.0001f) sx *= (SQRT(dd) / (l1 + l2) - 1) * alpha + 1;
}
a2 = ACOS(cosine) * bendDir;
a = l1 + l2 * cosine;
b = l2 * SIN(a2);
a1 = ATAN2(ty * a - tx * b, tx * a + ty * b);
} else {
float a = psx * l2, b = psy * l2;
float aa = a * a, bb = b * b, ll = l1 * l1, dd = tx * tx + ty * ty, ta = ATAN2(ty, tx);
float aa = a * a, bb = b * b, ll = l1 * l1, ta = ATAN2(ty, tx);
float c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa;
float d = c1 * c1 - 4 * c2 * c0;
if (d >= 0) {
@ -199,7 +209,7 @@ void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float
a1 = (a1 - os) * RAD_DEG + o1 - parent->arotation;
if (a1 > 180) a1 -= 360;
else if (a1 < -180) a1 += 360;
spBone_updateWorldTransformWith(parent, px, py, parent->rotation + a1 * alpha, parent->ascaleX, parent->ascaleY, 0, 0);
spBone_updateWorldTransformWith(parent, px, py, parent->rotation + a1 * alpha, sx, parent->ascaleY, 0, 0);
a2 = ((a2 + os) * RAD_DEG - child->ashearX) * s2 + o2 - child->arotation;
if (a2 > 180) a2 -= 360;
else if (a2 < -180) a2 += 360;

View File

@ -35,6 +35,7 @@ spIkConstraintData* spIkConstraintData_create (const char* name) {
spIkConstraintData* self = NEW(spIkConstraintData);
MALLOC_STR(self->name, name);
self->bendDirection = 1;
self->stretch = 0;
self->mix = 1;
return self;
}

View File

@ -82,6 +82,7 @@ void spPathConstraint_apply (spPathConstraint* self) {
int/*bool*/tip;
float rotateMix = self->rotateMix, translateMix = self->translateMix;
int/*bool*/ translate = translateMix > 0, rotate = rotateMix > 0;
int lengthSpacing;
spPathAttachment* attachment = (spPathAttachment*)self->target->attachment;
spPathConstraintData* data = self->data;
int percentSpacing = data->spacingMode == SP_SPACING_MODE_PERCENT;
@ -112,7 +113,7 @@ void spPathConstraint_apply (spPathConstraint* self) {
}
lengths = self->lengths;
}
int lengthSpacing = data->spacingMode == SP_SPACING_MODE_LENGTH;
lengthSpacing = data->spacingMode == SP_SPACING_MODE_LENGTH;
for (i = 0, n = spacesCount - 1; i < n;) {
spBone *bone = bones[i];
setupLength = bone->data->length;

View File

@ -436,6 +436,7 @@ void spSkeleton_setBonesToSetupPose (const spSkeleton* self) {
for (i = 0; i < self->ikConstraintsCount; ++i) {
spIkConstraint* ikConstraint = self->ikConstraints[i];
ikConstraint->bendDirection = ikConstraint->data->bendDirection;
ikConstraint->stretch = ikConstraint->data->stretch;
ikConstraint->mix = ikConstraint->data->mix;
}

View File

@ -392,7 +392,8 @@ static spAnimation* _spSkeletonBinary_readAnimation (spSkeletonBinary* self, con
float time = readFloat(input);
float mix = readFloat(input);
signed char bendDirection = readSByte(input);
spIkConstraintTimeline_setFrame(timeline, frameIndex, time, mix, bendDirection);
int stretch = readBoolean(input);
spIkConstraintTimeline_setFrame(timeline, frameIndex, time, mix, bendDirection, stretch);
if (frameIndex < frameCount - 1) readCurve(input, SUPER(timeline), frameIndex);
}
spTimelineArray_add(timelines, (spTimeline*)timeline);
@ -957,6 +958,7 @@ spSkeletonData* spSkeletonBinary_readSkeletonData (spSkeletonBinary* self, const
data->target = skeletonData->bones[readVarint(input, 1)];
data->mix = readFloat(input);
data->bendDirection = readSByte(input);
data->stretch = readBoolean(input);
skeletonData->ikConstraints[i] = data;
}

View File

@ -310,4 +310,5 @@ void spSkeletonClipping_clipTriangles(spSkeletonClipping* self, float* vertices,
}
}
}
UNUSED(verticesLength);
}

View File

@ -299,7 +299,7 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r
}
for (valueMap = constraintMap->child, frameIndex = 0; valueMap; valueMap = valueMap->next, ++frameIndex) {
spIkConstraintTimeline_setFrame(timeline, frameIndex, Json_getFloat(valueMap, "time", 0), Json_getFloat(valueMap, "mix", 1),
Json_getInt(valueMap, "bendPositive", 1) ? 1 : -1);
Json_getInt(valueMap, "bendPositive", 1) ? 1 : -1, Json_getInt(valueMap, "stretch", 0) ? 1 : 0);
readCurve(valueMap, SUPER(timeline), frameIndex);
}
animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline);
@ -737,6 +737,7 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha
}
data->bendDirection = Json_getInt(constraintMap, "bendPositive", 1) ? 1 : -1;
data->stretch = Json_getInt(constraintMap, "stretch", 0) ? 1 : 0;
data->mix = Json_getFloat(constraintMap, "mix", 1);
skeletonData->ikConstraints[i] = data;

View File

@ -32,6 +32,8 @@
#include <spine/extension.h>
void _spJitterVertexEffect_begin(spVertexEffect* self, spSkeleton* skeleton) {
UNUSED(self);
UNUSED(skeleton);
}
void _spJitterVertexEffect_transform(spVertexEffect* self, float* x, float* y, float* u, float* v, spColor* light, spColor* dark) {
@ -40,9 +42,14 @@ void _spJitterVertexEffect_transform(spVertexEffect* self, float* x, float* y, f
float jitterY = internal->jitterY;
(*x) += _spMath_randomTriangular(-jitterX, jitterY);
(*y) += _spMath_randomTriangular(-jitterX, jitterY);
UNUSED(u);
UNUSED(v);
UNUSED(light);
UNUSED(dark);
}
void _spJitterVertexEffect_end(spVertexEffect* self) {
UNUSED(self);
}
spJitterVertexEffect* spJitterVertexEffect_create(float jitterX, float jitterY) {
@ -78,6 +85,11 @@ void _spSwirlVertexEffect_transform(spVertexEffect* self, float* positionX, floa
(*positionX) = cosine * x - sine * y + internal->worldX;
(*positionY) = sine * x + cosine * y + internal->worldY;
}
UNUSED(self);
UNUSED(u);
UNUSED(v);
UNUSED(light);
UNUSED(dark);
}
void _spSwirlVertexEffect_end(spVertexEffect* self) {

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 208 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 517 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 KiB

After

Width:  |  Height:  |  Size: 590 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 KiB

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 208 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 517 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 KiB

After

Width:  |  Height:  |  Size: 590 KiB

Some files were not shown because too many files have changed in this diff Show More