Merge remote-tracking branch 'origin/3.6-beta' into 3.6-beta

This commit is contained in:
NathanSweet 2017-01-31 03:10:52 +01:00
commit 694214d729
373 changed files with 50880 additions and 32338 deletions

9
.gitignore vendored
View File

@ -104,3 +104,12 @@ spine-turbulenz/spine-js/spine.js
spine-threejs/spine-js/spine.js
spine-ts/.vscode/*
spine-ue4/Binaries
spine-ue4/Intermediate
spine-ue4/Saved
spine-ue4/SpineUE4.xcworkspace
spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/spine-c
spine-ue4/Plugins/SpinePlugin/Binaries
spine-ue4/SpineUE4.VC.opendb
spine-ue4/SpineUE4.sln

3
CHANGELOG.md Normal file
View File

@ -0,0 +1,3 @@
# 3.6.x
* [c] Modified kvec.h used by SkeletonBinary.c to use Spine's MALLOC/FREE macros. That way there's only one place
to inject custom allocators ([extension.h](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-c/spine-c/include/spine/extension.h)) [commit](https://github.com/EsotericSoftware/spine-runtimes/commit/c2cfbc6cb8709daa082726222d558188d75a004f)

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,39 +1,39 @@
{
"skeleton": { "hash": "Mc0suer5LoUZv7DvFA3mLFATKFU", "spine": "3.5.03-beta", "width": 897, "height": 716.36, "fps": 30, "images": "./images/" },
"skeleton": { "hash": "wKRjA+djIs9K05d/19sZhwmP3Ow", "spine": "3.6.05-beta", "width": 897, "height": 716.36, "images": "./images/" },
"bones": [
{ "name": "root", "y": -176.12 },
{ "name": "COG", "parent": "root", "y": 176.12 },
{ "name": "chest", "parent": "COG", "length": 31.24, "rotation": 161.7, "x": 52.52, "y": 15.34 },
{ "name": "L_front_thigh", "parent": "chest", "length": 67.42, "rotation": 138.94, "x": -45.58, "y": 7.92 },
{ "name": "L_front_leg", "parent": "L_front_thigh", "length": 51.57, "rotation": 43.36, "x": 67.42, "y": 0.02 },
{ "name": "L_front_toe1", "parent": "L_front_leg", "length": 51.44, "rotation": -98, "x": 45.53, "y": 2.43 },
{ "name": "L_front_toe2", "parent": "L_front_leg", "length": 61.97, "rotation": -55.26, "x": 51.57, "y": -0.12 },
{ "name": "L_front_toe3", "parent": "L_front_leg", "length": 45.65, "rotation": -11.13, "x": 54.19, "y": 0.6, "scaleX": 1.134 },
{ "name": "L_front_toe4", "parent": "L_front_leg", "length": 53.47, "rotation": 19.42, "x": 50.6, "y": 7.08, "scaleX": 1.134 },
{ "name": "back", "parent": "COG", "length": 115.37, "rotation": 151.83, "x": 16.03, "y": 27.94 },
{ "name": "R_rear_thigh", "parent": "back", "length": 123.46, "rotation": 104.87, "x": 65.31, "y": 59.89 },
{ "name": "L_rear_thigh", "parent": "R_rear_thigh", "length": 88.05, "rotation": 28.35, "x": -8.59, "y": 30.18 },
{ "name": "chest", "parent": "COG", "length": 31.24, "rotation": 161.7, "x": 52.53, "y": 15.35 },
{ "name": "L_front_thigh", "parent": "chest", "length": 67.42, "rotation": 138.94, "x": -45.59, "y": 7.93 },
{ "name": "L_front_leg", "parent": "L_front_thigh", "length": 51.58, "rotation": 43.36, "x": 67.42, "y": 0.03 },
{ "name": "L_front_toe1", "parent": "L_front_leg", "length": 51.45, "rotation": -98.01, "x": 45.54, "y": 2.43 },
{ "name": "L_front_toe2", "parent": "L_front_leg", "length": 61.98, "rotation": -55.26, "x": 51.58, "y": -0.13 },
{ "name": "L_front_toe3", "parent": "L_front_leg", "length": 45.65, "rotation": -11.14, "x": 54.19, "y": 0.6, "scaleX": 1.135 },
{ "name": "L_front_toe4", "parent": "L_front_leg", "length": 53.47, "rotation": 19.43, "x": 50.61, "y": 7.09, "scaleX": 1.135 },
{ "name": "back", "parent": "COG", "length": 115.38, "rotation": 151.83, "x": 16.04, "y": 27.94 },
{ "name": "R_rear_thigh", "parent": "back", "length": 123.47, "rotation": 104.88, "x": 65.31, "y": 59.89 },
{ "name": "L_rear_thigh", "parent": "R_rear_thigh", "length": 88.06, "rotation": 28.35, "x": -8.59, "y": 30.19 },
{ "name": "L_rear_leg", "parent": "L_rear_thigh", "length": 103.74, "rotation": -122.41, "x": 96.04, "y": -0.97 },
{ "name": "L_wing", "parent": "chest", "length": 301.12, "rotation": -75.51, "x": -7.24, "y": -24.65 },
{ "name": "R_front_thigh", "parent": "chest", "length": 81.63, "rotation": 67.96, "x": -10.89, "y": 28.25 },
{ "name": "R_front_leg", "parent": "R_front_thigh", "length": 66.52, "rotation": 92.7, "x": 83.04, "y": -0.3 },
{ "name": "R_front_toe1", "parent": "R_front_leg", "length": 46.65, "rotation": 8.59, "x": 70.03, "y": 5.31 },
{ "name": "R_front_toe2", "parent": "R_front_leg", "length": 53.66, "rotation": -35.02, "x": 66.52, "y": 0.33 },
{ "name": "R_front_toe3", "parent": "R_front_leg", "length": 58.38, "rotation": -74.67, "x": 62.1, "y": -0.79 },
{ "name": "R_rear_leg", "parent": "R_rear_thigh", "length": 91.06, "rotation": -129.04, "x": 123.46, "y": -0.26 },
{ "name": "R_rear_toe1", "parent": "R_rear_leg", "length": 94.99, "rotation": 141.98, "x": 90.06, "y": 2.12 },
{ "name": "L_wing", "parent": "chest", "length": 301.12, "rotation": -75.51, "x": -7.25, "y": -24.66 },
{ "name": "R_front_thigh", "parent": "chest", "length": 81.64, "rotation": 67.97, "x": -10.89, "y": 28.25 },
{ "name": "R_front_leg", "parent": "R_front_thigh", "length": 66.53, "rotation": 92.7, "x": 83.05, "y": -0.31 },
{ "name": "R_front_toe1", "parent": "R_front_leg", "length": 46.66, "rotation": 8.59, "x": 70.03, "y": 5.31 },
{ "name": "R_front_toe2", "parent": "R_front_leg", "length": 53.67, "rotation": -35.02, "x": 66.53, "y": 0.34 },
{ "name": "R_front_toe3", "parent": "R_front_leg", "length": 58.39, "rotation": -74.67, "x": 62.1, "y": -0.79 },
{ "name": "R_rear_leg", "parent": "R_rear_thigh", "length": 91.06, "rotation": -129.04, "x": 123.47, "y": -0.27 },
{ "name": "R_rear_toe1", "parent": "R_rear_leg", "length": 95, "rotation": 141.98, "x": 90.07, "y": 2.12 },
{ "name": "R_rear_toe2", "parent": "R_rear_leg", "length": 99.29, "rotation": 125.32, "x": 89.6, "y": 1.52 },
{ "name": "R_rear_toe3", "parent": "R_rear_leg", "length": 103.45, "rotation": 112.26, "x": 91.06, "y": -0.35 },
{ "name": "neck", "parent": "COG", "length": 41.36, "rotation": 39.05, "x": 64.75, "y": 11.98 },
{ "name": "head", "parent": "neck", "length": 188.83, "rotation": 8.06, "x": 69.96, "y": 2.49 },
{ "name": "R_wing", "parent": "head", "length": 359.5, "rotation": 83.21, "x": -74.68, "y": 20.9 },
{ "name": "chin", "parent": "neck", "length": 153.15, "rotation": -69.07, "x": 64.62, "y": -6.99 },
{ "name": "tail1", "parent": "back", "length": 65.65, "rotation": 44.31, "x": 115.37, "y": -0.19 },
{ "name": "tail2", "parent": "tail1", "length": 54.5, "rotation": 12, "x": 65.65, "y": 0.22 },
{ "name": "R_rear_toe3", "parent": "R_rear_leg", "length": 103.46, "rotation": 112.27, "x": 91.06, "y": -0.35 },
{ "name": "neck", "parent": "COG", "length": 41.37, "rotation": 39.06, "x": 64.76, "y": 11.98 },
{ "name": "head", "parent": "neck", "length": 188.84, "rotation": 8.07, "x": 69.96, "y": 2.5 },
{ "name": "R_wing", "parent": "head", "length": 359.5, "rotation": 83.21, "x": -74.68, "y": 20.91 },
{ "name": "chin", "parent": "neck", "length": 153.16, "rotation": -69.07, "x": 64.63, "y": -6.99 },
{ "name": "tail1", "parent": "back", "length": 65.65, "rotation": 44.32, "x": 115.38, "y": -0.2 },
{ "name": "tail2", "parent": "tail1", "length": 54.5, "rotation": 12, "x": 65.65, "y": 0.23 },
{ "name": "tail3", "parent": "tail2", "length": 41.78, "rotation": 1.8, "x": 54.5, "y": 0.37 },
{ "name": "tail4", "parent": "tail3", "length": 34.19, "rotation": -1.8, "x": 41.78, "y": 0.16 },
{ "name": "tail5", "parent": "tail4", "length": 32.32, "rotation": -3.15, "x": 34.19, "y": -0.19 },
{ "name": "tail6", "parent": "tail5", "length": 80.08, "rotation": -29.55, "x": 32.32, "y": -0.23 }
{ "name": "tail5", "parent": "tail4", "length": 32.33, "rotation": -3.15, "x": 34.19, "y": -0.19 },
{ "name": "tail6", "parent": "tail5", "length": 80.08, "rotation": -29.55, "x": 32.33, "y": -0.23 }
],
"slots": [
{ "name": "L_rear_leg", "bone": "L_rear_leg", "attachment": "L_rear_leg" },
@ -71,113 +71,113 @@
"skins": {
"default": {
"L_front_leg": {
"L_front_leg": { "x": 14.68, "y": 0.48, "rotation": 15.99, "width": 84, "height": 57 }
"L_front_leg": { "x": 14.69, "y": 0.49, "rotation": 16, "width": 84, "height": 57 }
},
"L_front_thigh": {
"L_front_thigh": { "x": 27.66, "y": -11.58, "rotation": 58.66, "width": 84, "height": 72 }
"L_front_thigh": { "x": 27.66, "y": -11.59, "rotation": 58.66, "width": 84, "height": 72 }
},
"L_front_toe1": {
"front_toeA": { "x": 31.92, "y": 0.61, "rotation": 109.55, "width": 29, "height": 50 }
"front_toeA": { "x": 31.93, "y": 0.61, "rotation": 109.56, "width": 29, "height": 50 }
},
"L_front_toe2": {
"front_toeB": { "x": 26.83, "y": -4.94, "rotation": 109.51, "width": 56, "height": 57 }
"front_toeB": { "x": 26.84, "y": -4.95, "rotation": 109.51, "width": 56, "height": 57 }
},
"L_front_toe3": {
"front_toeB": { "x": 18.21, "y": -7.21, "scaleX": 0.881, "scaleY": 0.94, "rotation": 99.71, "width": 56, "height": 57 }
"front_toeB": { "x": 18.22, "y": -7.22, "scaleX": 0.881, "scaleY": 0.941, "rotation": 99.71, "width": 56, "height": 57 }
},
"L_front_toe4": {
"front_toeB": { "x": 23.21, "y": -11.68, "scaleX": 0.881, "rotation": 79.89, "width": 56, "height": 57 }
"front_toeB": { "x": 23.21, "y": -11.69, "scaleX": 0.881, "rotation": 79.89, "width": 56, "height": 57 }
},
"L_rear_leg": {
"L_rear_leg": { "x": 67.29, "y": 12.62, "rotation": -162.65, "width": 206, "height": 177 }
"L_rear_leg": { "x": 67.29, "y": 12.63, "rotation": -162.65, "width": 206, "height": 177 }
},
"L_rear_thigh": {
"L_rear_thigh": { "x": 56.03, "y": 27.38, "rotation": 74.93, "width": 91, "height": 149 }
"L_rear_thigh": { "x": 56.03, "y": 27.39, "rotation": 74.94, "width": 91, "height": 149 }
},
"L_wing": {
"L_wing01": { "x": 129.21, "y": -45.49, "rotation": -83.7, "width": 191, "height": 256 },
"L_wing02": { "x": 126.37, "y": -31.69, "rotation": -86.18, "width": 179, "height": 269 },
"L_wing03": { "x": 110.26, "y": -90.89, "rotation": -86.18, "width": 186, "height": 207 },
"L_wing04": { "x": -61.61, "y": -83.26, "rotation": -86.18, "width": 188, "height": 135 },
"L_wing05": { "x": -90.01, "y": -78.14, "rotation": -86.18, "width": 218, "height": 213 },
"L_wing06": { "x": -143.76, "y": -83.71, "rotation": -86.18, "width": 192, "height": 331 },
"L_wing07": { "x": -133.04, "y": -33.89, "rotation": -86.18, "width": 159, "height": 255 },
"L_wing08": { "x": 50.15, "y": -15.71, "rotation": -86.18, "width": 164, "height": 181 },
"L_wing09": { "x": 85.94, "y": -11.32, "rotation": -86.18, "width": 204, "height": 167 }
"L_wing02": { "x": 126.38, "y": -31.69, "rotation": -86.19, "width": 179, "height": 269 },
"L_wing03": { "x": 110.27, "y": -90.89, "rotation": -86.19, "width": 186, "height": 207 },
"L_wing04": { "x": -61.62, "y": -83.27, "rotation": -86.19, "width": 188, "height": 135 },
"L_wing05": { "x": -90.02, "y": -78.14, "rotation": -86.19, "width": 218, "height": 213 },
"L_wing06": { "x": -143.77, "y": -83.72, "rotation": -86.19, "width": 192, "height": 331 },
"L_wing07": { "x": -133.05, "y": -33.9, "rotation": -86.19, "width": 159, "height": 255 },
"L_wing08": { "x": 50.15, "y": -15.71, "rotation": -86.19, "width": 164, "height": 181 },
"L_wing09": { "x": 85.94, "y": -11.33, "rotation": -86.19, "width": 204, "height": 167 }
},
"R_front_leg": {
"R_front_leg": { "x": 17.79, "y": 4.22, "rotation": 37.62, "width": 101, "height": 89 }
"R_front_leg": { "x": 17.8, "y": 4.23, "rotation": 37.63, "width": 101, "height": 89 }
},
"R_front_thigh": {
"R_front_thigh": { "x": 35.28, "y": 2.11, "rotation": 130.33, "width": 108, "height": 108 }
"R_front_thigh": { "x": 35.29, "y": 2.11, "rotation": 130.33, "width": 108, "height": 108 }
},
"R_front_toe1": {
"front_toeB": { "x": 24.49, "y": -2.61, "rotation": 104.18, "width": 56, "height": 57 }
"front_toeB": { "x": 24.5, "y": -2.61, "rotation": 104.18, "width": 56, "height": 57 }
},
"R_front_toe2": {
"front_toeB": { "x": 26.39, "y": 1.16, "rotation": 104.57, "width": 56, "height": 57 }
"front_toeB": { "x": 26.39, "y": 1.17, "rotation": 104.58, "width": 56, "height": 57 }
},
"R_front_toe3": {
"front_toeB": { "x": 30.66, "y": -0.06, "rotation": 112.29, "width": 56, "height": 57 }
"front_toeB": { "x": 30.67, "y": -0.07, "rotation": 112.3, "width": 56, "height": 57 }
},
"R_rear_leg": {
"R_rear_leg": { "x": 60.87, "y": -5.72, "rotation": -127.66, "width": 116, "height": 100 }
"R_rear_leg": { "x": 60.88, "y": -5.73, "rotation": -127.67, "width": 116, "height": 100 }
},
"R_rear_thigh": {
"R_rear_thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 }
},
"R_rear_toe1": {
"rear-toe": { "x": 54.75, "y": -5.72, "rotation": 134.79, "width": 109, "height": 77 }
"rear-toe": { "x": 54.76, "y": -5.72, "rotation": 134.79, "width": 109, "height": 77 }
},
"R_rear_toe2": {
"rear-toe": { "x": 57.02, "y": -7.22, "rotation": 134.42, "width": 109, "height": 77 }
"rear-toe": { "x": 57.03, "y": -7.23, "rotation": 134.43, "width": 109, "height": 77 }
},
"R_rear_toe3": {
"rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 }
},
"R_wing": {
"R_wing01": { "x": 170.08, "y": -23.67, "rotation": -130.33, "width": 219, "height": 310 },
"R_wing02": { "x": 171.14, "y": -19.33, "rotation": -130.33, "width": 203, "height": 305 },
"R_wing03": { "x": 166.46, "y": 29.23, "rotation": -130.33, "width": 272, "height": 247 },
"R_wing04": { "x": 42.94, "y": 134.05, "rotation": -130.33, "width": 279, "height": 144 },
"R_wing05": { "x": -8.83, "y": 142.59, "rotation": -130.33, "width": 251, "height": 229 },
"R_wing06": { "x": -123.33, "y": 111.22, "rotation": -130.33, "width": 200, "height": 366 },
"R_wing07": { "x": -40.17, "y": 118.03, "rotation": -130.33, "width": 200, "height": 263 },
"R_wing08": { "x": 48.01, "y": 28.76, "rotation": -130.33, "width": 234, "height": 254 },
"R_wing09": { "x": 128.1, "y": 21.12, "rotation": -130.33, "width": 248, "height": 204 }
"R_wing01": { "x": 170.08, "y": -23.68, "rotation": -130.34, "width": 219, "height": 310 },
"R_wing02": { "x": 171.15, "y": -19.33, "rotation": -130.34, "width": 203, "height": 305 },
"R_wing03": { "x": 166.46, "y": 29.24, "rotation": -130.34, "width": 272, "height": 247 },
"R_wing04": { "x": 42.94, "y": 134.06, "rotation": -130.34, "width": 279, "height": 144 },
"R_wing05": { "x": -8.84, "y": 142.59, "rotation": -130.34, "width": 251, "height": 229 },
"R_wing06": { "x": -123.33, "y": 111.22, "rotation": -130.34, "width": 200, "height": 366 },
"R_wing07": { "x": -40.17, "y": 118.03, "rotation": -130.34, "width": 200, "height": 263 },
"R_wing08": { "x": 48.02, "y": 28.76, "rotation": -130.34, "width": 234, "height": 254 },
"R_wing09": { "x": 128.1, "y": 21.13, "rotation": -130.34, "width": 248, "height": 204 }
},
"back": {
"back": { "x": 35.84, "y": 19.99, "rotation": -151.83, "width": 190, "height": 185 }
"back": { "x": 35.85, "y": 19.99, "rotation": -151.83, "width": 190, "height": 185 }
},
"chest": {
"chest": { "x": -14.6, "y": 24.78, "rotation": -161.7, "width": 136, "height": 122 }
"chest": { "x": -14.6, "y": 24.79, "rotation": -161.7, "width": 136, "height": 122 }
},
"chin": {
"chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 }
},
"head": {
"head": { "x": 76.68, "y": 32.21, "rotation": -47.12, "width": 296, "height": 260 }
"head": { "x": 76.69, "y": 32.21, "rotation": -47.13, "width": 296, "height": 260 }
},
"logo": {
"logo": { "y": -176.72, "width": 897, "height": 92 }
},
"tail1": {
"tail01": { "x": 22.59, "y": -4.5, "rotation": 163.85, "width": 120, "height": 153 }
"tail01": { "x": 22.6, "y": -4.5, "rotation": 163.85, "width": 120, "height": 153 }
},
"tail2": {
"tail02": { "x": 18.11, "y": -1.75, "rotation": 151.84, "width": 95, "height": 120 }
"tail02": { "x": 18.12, "y": -1.75, "rotation": 151.85, "width": 95, "height": 120 }
},
"tail3": {
"tail03": { "x": 16.94, "y": -2, "rotation": 150.04, "width": 73, "height": 92 }
"tail03": { "x": 16.94, "y": -2.01, "rotation": 150.04, "width": 73, "height": 92 }
},
"tail4": {
"tail04": { "x": 15.34, "y": -2.17, "rotation": 151.84, "width": 56, "height": 71 }
"tail04": { "x": 15.35, "y": -2.18, "rotation": 151.85, "width": 56, "height": 71 }
},
"tail5": {
"tail05": { "x": 15.05, "y": -3.57, "rotation": 155, "width": 52, "height": 59 }
"tail05": { "x": 15.06, "y": -3.57, "rotation": 155, "width": 52, "height": 59 }
},
"tail6": {
"tail06": { "x": 28.02, "y": -16.83, "rotation": -175.44, "width": 95, "height": 68 }
"tail06": { "x": 28.02, "y": -16.83, "rotation": -175.45, "width": 95, "height": 68 }
}
}
},
@ -187,45 +187,45 @@
"L_wing": {
"attachment": [
{ "time": 0, "name": "L_wing01" },
{ "time": 0.0666, "name": "L_wing02" },
{ "time": 0.0667, "name": "L_wing02" },
{ "time": 0.1333, "name": "L_wing03" },
{ "time": 0.2, "name": "L_wing04" },
{ "time": 0.2666, "name": "L_wing05" },
{ "time": 0.2667, "name": "L_wing05" },
{ "time": 0.3333, "name": "L_wing06" },
{ "time": 0.4, "name": "L_wing07" },
{ "time": 0.4666, "name": "L_wing08" },
{ "time": 0.4667, "name": "L_wing08" },
{ "time": 0.5333, "name": "L_wing09" },
{ "time": 0.6, "name": "L_wing01" },
{ "time": 0.7333, "name": "L_wing02" },
{ "time": 0.8, "name": "L_wing03" },
{ "time": 0.8333, "name": "L_wing04" },
{ "time": 0.8666, "name": "L_wing05" },
{ "time": 0.8999, "name": "L_wing06" },
{ "time": 0.8667, "name": "L_wing05" },
{ "time": 0.9, "name": "L_wing06" },
{ "time": 0.9333, "name": "L_wing07" },
{ "time": 0.9666, "name": "L_wing08" },
{ "time": 0.9667, "name": "L_wing08" },
{ "time": 1, "name": "L_wing01" }
]
},
"R_wing": {
"attachment": [
{ "time": 0, "name": "R_wing01" },
{ "time": 0.0666, "name": "R_wing02" },
{ "time": 0.0667, "name": "R_wing02" },
{ "time": 0.1333, "name": "R_wing03" },
{ "time": 0.2, "name": "R_wing04" },
{ "time": 0.2666, "name": "R_wing05" },
{ "time": 0.2667, "name": "R_wing05" },
{ "time": 0.3333, "name": "R_wing06" },
{ "time": 0.4, "name": "R_wing07" },
{ "time": 0.4666, "name": "R_wing08" },
{ "time": 0.4667, "name": "R_wing08" },
{ "time": 0.5333, "name": "R_wing09" },
{ "time": 0.6, "name": "R_wing01" },
{ "time": 0.7333, "name": "R_wing02" },
{ "time": 0.7666, "name": "R_wing02" },
{ "time": 0.7667, "name": "R_wing02" },
{ "time": 0.8, "name": "R_wing03" },
{ "time": 0.8333, "name": "R_wing04" },
{ "time": 0.8666, "name": "R_wing05" },
{ "time": 0.8999, "name": "R_wing06" },
{ "time": 0.8667, "name": "R_wing05" },
{ "time": 0.9, "name": "R_wing06" },
{ "time": 0.9333, "name": "R_wing07" },
{ "time": 0.9666, "name": "R_wing08" },
{ "time": 0.9667, "name": "R_wing08" },
{ "time": 1, "name": "R_wing01" }
]
}
@ -234,9 +234,9 @@
"back": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 17.39 },
{ "time": 0.1667, "angle": 17.39 },
{ "time": 0.5, "angle": 0 },
{ "time": 0.8333, "angle": 7 },
{ "time": 0.8333, "angle": 7.01 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -253,9 +253,9 @@
"neck": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -8.18 },
{ "time": 0.1667, "angle": -8.18 },
{ "time": 0.3333, "angle": -23.16 },
{ "time": 0.5, "angle": -18.01 },
{ "time": 0.5, "angle": -18.02 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -289,10 +289,10 @@
"tail1": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -2.42 },
{ "time": 0.3333, "angle": -26.2 },
{ "time": 0.5, "angle": -29.65 },
{ "time": 0.6666, "angle": -23.15 },
{ "time": 0.1667, "angle": -2.42 },
{ "time": 0.3333, "angle": -26.21 },
{ "time": 0.5, "angle": -29.66 },
{ "time": 0.6667, "angle": -23.15 },
{ "time": 0.8333, "angle": -55.46 },
{ "time": 1, "angle": 0 }
],
@ -327,10 +327,10 @@
"tail2": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -1.12 },
{ "time": 0.1667, "angle": -1.13 },
{ "time": 0.3333, "angle": 10.48 },
{ "time": 0.5, "angle": 7.89 },
{ "time": 0.8333, "angle": -10.38 },
{ "time": 0.8333, "angle": -10.39 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -347,10 +347,10 @@
"tail3": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 8.24 },
{ "time": 0.1667, "angle": 8.25 },
{ "time": 0.3333, "angle": 15.21 },
{ "time": 0.5, "angle": 14.84 },
{ "time": 0.8333, "angle": -18.9 },
{ "time": 0.5, "angle": 14.85 },
{ "time": 0.8333, "angle": -18.91 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -367,7 +367,7 @@
"tail4": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 17.46 },
{ "time": 0.1667, "angle": 17.47 },
{ "time": 0.3333, "angle": 22.15 },
{ "time": 0.5, "angle": 22.76 },
{ "time": 0.8333, "angle": -4.37 },
@ -387,10 +387,10 @@
"tail5": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 7.4 },
{ "time": 0.3333, "angle": 28.5 },
{ "time": 0.1667, "angle": 7.4 },
{ "time": 0.3333, "angle": 28.51 },
{ "time": 0.5, "angle": 21.33 },
{ "time": 0.8333, "angle": -1.27 },
{ "time": 0.8333, "angle": -1.28 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -407,7 +407,7 @@
"tail6": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 45.99 },
{ "time": 0.1667, "angle": 46 },
{ "time": 0.4, "angle": 43.53 },
{ "time": 0.5, "angle": 61.79 },
{ "time": 0.8333, "angle": 13.28 },
@ -427,8 +427,8 @@
"R_rear_leg": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -14.21 },
{ "time": 0.5, "angle": 47.17 },
{ "time": 0.1667, "angle": -14.22 },
{ "time": 0.5, "angle": 47.18 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -498,9 +498,9 @@
{
"time": 0,
"angle": 0,
"curve": [ 0.408, 1.36, 0.675, 1.43 ]
"curve": [ 0.408, 1.37, 0.675, 1.43 ]
},
{ "time": 0.5, "angle": 1.03 },
{ "time": 0.5, "angle": 1.04 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -519,11 +519,11 @@
{
"time": 0,
"angle": 0,
"curve": [ 0.416, 1.15, 0.494, 1.27 ]
"curve": [ 0.417, 1.15, 0.494, 1.28 ]
},
{ "time": 0.3333, "angle": -5.15 },
{ "time": 0.5, "angle": 9.79 },
{ "time": 0.6666, "angle": 18.94 },
{ "time": 0.5, "angle": 9.8 },
{ "time": 0.6667, "angle": 18.95 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -540,7 +540,7 @@
"L_front_thigh": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -19.18 },
{ "time": 0.1667, "angle": -19.19 },
{ "time": 0.3333, "angle": -32.02 },
{ "time": 0.5, "angle": -19.62 },
{ "time": 1, "angle": 0 }
@ -559,7 +559,7 @@
"R_front_thigh": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -12.96 },
{ "time": 0.1667, "angle": -12.96 },
{ "time": 0.5, "angle": 16.2 },
{ "time": 1, "angle": 0 }
],
@ -577,7 +577,7 @@
"L_front_leg": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 37.77 },
{ "time": 0.1667, "angle": 37.77 },
{ "time": 0.5, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 }
],
@ -595,7 +595,7 @@
"L_front_toe1": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -16.08 },
{ "time": 0.1667, "angle": -16.09 },
{ "time": 0.5, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 }
],
@ -623,14 +623,14 @@
],
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1.33, "y": 1.029 },
{ "time": 0.5, "x": 1.331, "y": 1.029 },
{ "time": 1, "x": 1, "y": 1 }
]
},
"L_front_toe4": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.5, "angle": 26.51 },
{ "time": 0.5, "angle": 26.52 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -640,7 +640,7 @@
],
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1.21, "y": 0.993 },
{ "time": 0.5, "x": 1.211, "y": 0.993 },
{ "time": 1, "x": 1, "y": 1 }
]
},
@ -657,14 +657,14 @@
],
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1.354, "y": 1.007 },
{ "time": 0.5, "x": 1.355, "y": 1.008 },
{ "time": 1, "x": 1, "y": 1 }
]
},
"R_front_leg": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 26.07 },
{ "time": 0.1667, "angle": 26.07 },
{ "time": 0.5, "angle": -21.6 },
{ "time": 1, "angle": 0 }
],
@ -682,8 +682,8 @@
"R_front_toe1": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 29.23 },
{ "time": 0.5, "angle": 34.83 },
{ "time": 0.1667, "angle": 29.24 },
{ "time": 0.5, "angle": 34.84 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -700,7 +700,7 @@
"R_front_toe2": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 24.89 },
{ "time": 0.1667, "angle": 24.9 },
{ "time": 0.5, "angle": 23.16 },
{ "time": 1, "angle": 0 }
],
@ -711,14 +711,14 @@
],
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1.407, "y": 1.057 },
{ "time": 0.5, "x": 1.407, "y": 1.058 },
{ "time": 1, "x": 1, "y": 1 }
]
},
"R_front_toe3": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 11.01 },
{ "time": 0.1667, "angle": 11.01 },
{ "time": 0.5, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 }
],
@ -729,15 +729,15 @@
],
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1.329, "y": 1.181 },
{ "time": 0.5, "x": 1.33, "y": 1.182 },
{ "time": 1, "x": 1, "y": 1 }
]
},
"L_rear_leg": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.3666, "angle": 25.19 },
{ "time": 0.6666, "angle": -15.65 },
{ "time": 0.3667, "angle": 25.19 },
{ "time": 0.6667, "angle": -15.65 },
{ "time": 1, "angle": 0 }
],
"translate": [
@ -752,13 +752,13 @@
{
"time": 0,
"angle": 0,
"curve": [ 0.456, 0.2, 0.422, 1.06 ]
"curve": [ 0.457, 0.2, 0.422, 1.07 ]
},
{ "time": 0.3333, "angle": 23.93 },
{
"time": 0.6666,
"angle": 337.79,
"curve": [ 0.41, 0, 0.887, 0.75 ]
"time": 0.6667,
"angle": 337.8,
"curve": [ 0.411, 0, 0.888, 0.75 ]
},
{ "time": 1, "angle": 0 }
],
@ -767,13 +767,13 @@
"time": 0,
"x": 0,
"y": 0,
"curve": [ 0.33, 1, 0.816, 1.33 ]
"curve": [ 0.33, 1, 0.816, 1.34 ]
},
{
"time": 0.5,
"x": 0,
"x": -0.01,
"y": 113.01,
"curve": [ 0.396, 0, 0.709, 2.03 ]
"curve": [ 0.397, 0, 0.71, 2.03 ]
},
{ "time": 1, "x": 0, "y": 0 }
]

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,24 @@
{
"skeleton": {
"hash": "9Twfw0ImCCb/C3Vx15ucH1FZP6U",
"spine": "3.5.03-beta",
"width": 234.01,
"height": 354.84,
"fps": 30,
"images": "./images/"
},
"skeleton": { "hash": "r5YD0f6538Hmy0yaaam0Wp73fd8", "spine": "3.6.05-beta", "width": 234.01, "height": 354.84, "images": "./images/" },
"bones": [
{ "name": "root" },
{ "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 },
{ "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 },
{ "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.51, "x": 81.67, "y": -6.34 },
{ "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 },
{ "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.04, "y": -20.38 },
{ "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.16, "x": 37.85, "y": -2.34 },
{ "name": "left upper leg", "parent": "hip", "length": 50.39, "rotation": -89.09, "x": 14.45, "y": 2.81 },
{ "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "rotation": -16.65, "x": 56.34, "y": 0.98 },
{ "name": "hip", "parent": "root", "x": 0.65, "y": 114.41 },
{ "name": "torso", "parent": "hip", "length": 85.83, "rotation": 93.93, "x": -6.42, "y": 1.98 },
{ "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.52, "x": 81.68, "y": -6.35 },
{ "name": "head", "parent": "neck", "length": 68.29, "rotation": -13.92, "x": 20.94, "y": 11.59 },
{ "name": "left shoulder", "parent": "torso", "length": 35.43, "rotation": -156.96, "x": 74.05, "y": -20.39 },
{ "name": "left arm", "parent": "left shoulder", "length": 35.62, "rotation": 28.17, "x": 37.86, "y": -2.35 },
{ "name": "left upper leg", "parent": "hip", "length": 50.4, "rotation": -89.1, "x": 14.45, "y": 2.81 },
{ "name": "left lower leg", "parent": "left upper leg", "length": 49.9, "rotation": -16.66, "x": 56.34, "y": 0.99 },
{ "name": "left foot", "parent": "left lower leg", "length": 46.5, "rotation": 102.43, "x": 58.94, "y": -7.61 },
{ "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.07 },
{ "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 },
{ "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 },
{ "name": "right arm", "parent": "right shoulder", "length": 36.74, "rotation": 36.32, "x": 37.6, "y": 0.31 },
{ "name": "right upper leg", "parent": "hip", "length": 42.45, "rotation": -97.49, "x": -20.07, "y": -6.83 },
{ "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "rotation": -14.34, "x": 42.99, "y": -0.61 },
{ "name": "right foot", "parent": "right lower leg", "length": 45.45, "rotation": 110.3, "x": 64.88, "y": 0.04 },
{ "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.35, "x": 36.9, "y": 0.34 }
{ "name": "left hand", "parent": "left arm", "length": 11.52, "rotation": 2.7, "x": 35.62, "y": 0.08 },
{ "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.58 },
{ "name": "right shoulder", "parent": "torso", "length": 37.25, "rotation": 133.89, "x": 76.02, "y": 18.15 },
{ "name": "right arm", "parent": "right shoulder", "length": 36.75, "rotation": 36.33, "x": 37.61, "y": 0.31 },
{ "name": "right upper leg", "parent": "hip", "length": 42.46, "rotation": -97.5, "x": -20.08, "y": -6.84 },
{ "name": "right lower leg", "parent": "right upper leg", "length": 58.53, "rotation": -14.34, "x": 43, "y": -0.62 },
{ "name": "right foot", "parent": "right lower leg", "length": 45.46, "rotation": 110.31, "x": 64.89, "y": 0.04 },
{ "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.36, "x": 36.9, "y": 0.35 }
],
"slots": [
{ "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" },
@ -54,22 +47,22 @@
"skins": {
"default": {
"left hand item": {
"dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 },
"spear": { "x": -4.55, "y": 39.2, "rotation": 13.04, "width": 22, "height": 368 }
"dagger": { "x": 7.88, "y": -23.46, "rotation": 10.48, "width": 26, "height": 108 },
"spear": { "x": -4.56, "y": 39.2, "rotation": 13.05, "width": 22, "height": 368 }
},
"right hand item": {
"dagger": { "x": 6.51, "y": -24.15, "rotation": -8.06, "width": 26, "height": 108 }
"dagger": { "x": 6.52, "y": -24.16, "rotation": -8.06, "width": 26, "height": 108 }
},
"right hand item top": {
"shield": { "rotation": 93.49, "width": 70, "height": 72 }
"shield": { "rotation": 93.5, "width": 70, "height": 72 }
}
},
"goblin": {
"eyes": {
"eyes closed": { "name": "goblin/eyes-closed", "x": 32.21, "y": -21.27, "rotation": -88.92, "width": 34, "height": 12 }
"eyes closed": { "name": "goblin/eyes-closed", "x": 32.22, "y": -21.27, "rotation": -88.93, "width": 34, "height": 12 }
},
"head": {
"head": { "name": "goblin/head", "x": 25.73, "y": 2.33, "rotation": -92.29, "width": 103, "height": 66 }
"head": { "name": "goblin/head", "x": 25.74, "y": 2.33, "rotation": -92.29, "width": 103, "height": 66 }
},
"left arm": {
"left arm": {
@ -78,13 +71,13 @@
"y": -1.69,
"scaleX": 1.057,
"scaleY": 1.057,
"rotation": 33.84,
"rotation": 33.85,
"width": 37,
"height": 35
}
},
"left foot": {
"left foot": { "name": "goblin/left-foot", "x": 24.85, "y": 8.74, "rotation": 3.32, "width": 65, "height": 31 }
"left foot": { "name": "goblin/left-foot", "x": 24.85, "y": 8.75, "rotation": 3.32, "width": 65, "height": 31 }
},
"left hand": {
"left hand": {
@ -99,60 +92,60 @@
}
},
"left lower leg": {
"left lower leg": { "name": "goblin/left-lower-leg", "x": 23.58, "y": -2.06, "rotation": 105.75, "width": 33, "height": 70 }
"left lower leg": { "name": "goblin/left-lower-leg", "x": 23.59, "y": -2.07, "rotation": 105.76, "width": 33, "height": 70 }
},
"left shoulder": {
"left shoulder": { "name": "goblin/left-shoulder", "x": 15.56, "y": -2.26, "rotation": 62.01, "width": 29, "height": 44 }
"left shoulder": { "name": "goblin/left-shoulder", "x": 15.56, "y": -2.27, "rotation": 62.01, "width": 29, "height": 44 }
},
"left upper leg": {
"left upper leg": { "name": "goblin/left-upper-leg", "x": 29.68, "y": -3.87, "rotation": 89.09, "width": 33, "height": 73 }
"left upper leg": { "name": "goblin/left-upper-leg", "x": 29.69, "y": -3.87, "rotation": 89.1, "width": 33, "height": 73 }
},
"neck": {
"neck": { "name": "goblin/neck", "x": 10.1, "y": 0.42, "rotation": -93.69, "width": 36, "height": 41 }
"neck": { "name": "goblin/neck", "x": 10.1, "y": 0.42, "rotation": -93.7, "width": 36, "height": 41 }
},
"pelvis": {
"pelvis": { "name": "goblin/pelvis", "x": -5.61, "y": 0.76, "width": 62, "height": 43 }
"pelvis": { "name": "goblin/pelvis", "x": -5.62, "y": 0.77, "width": 62, "height": 43 }
},
"right arm": {
"right arm": { "name": "goblin/right-arm", "x": 16.44, "y": -1.04, "rotation": 94.32, "width": 23, "height": 50 }
},
"right foot": {
"right foot": { "name": "goblin/right-foot", "x": 23.56, "y": 9.8, "rotation": 1.52, "width": 63, "height": 33 }
"right foot": { "name": "goblin/right-foot", "x": 23.57, "y": 9.8, "rotation": 1.53, "width": 63, "height": 33 }
},
"right hand": {
"right hand": { "name": "goblin/right-hand", "x": 7.88, "y": 2.78, "rotation": 91.96, "width": 36, "height": 37 }
"right hand": { "name": "goblin/right-hand", "x": 7.89, "y": 2.78, "rotation": 91.96, "width": 36, "height": 37 }
},
"right lower leg": {
"right lower leg": { "name": "goblin/right-lower-leg", "x": 25.68, "y": -3.15, "rotation": 111.83, "width": 36, "height": 76 }
"right lower leg": { "name": "goblin/right-lower-leg", "x": 25.68, "y": -3.16, "rotation": 111.84, "width": 36, "height": 76 }
},
"right shoulder": {
"right shoulder": { "name": "goblin/right-shoulder", "x": 15.68, "y": -1.03, "rotation": 130.65, "width": 39, "height": 45 }
},
"right upper leg": {
"right upper leg": { "name": "goblin/right-upper-leg", "x": 20.35, "y": 1.47, "rotation": 97.49, "width": 34, "height": 63 }
"right upper leg": { "name": "goblin/right-upper-leg", "x": 20.35, "y": 1.48, "rotation": 97.5, "width": 34, "height": 63 }
},
"torso": {
"torso": { "name": "goblin/torso", "x": 38.09, "y": -3.87, "rotation": -94.95, "width": 68, "height": 96 }
"torso": { "name": "goblin/torso", "x": 38.1, "y": -3.87, "rotation": -94.95, "width": 68, "height": 96 }
},
"undie straps": {
"undie straps": { "name": "goblin/undie-straps", "x": -3.87, "y": 13.1, "scaleX": 1.089, "width": 55, "height": 19 }
"undie straps": { "name": "goblin/undie-straps", "x": -3.88, "y": 13.11, "scaleX": 1.09, "width": 55, "height": 19 }
},
"undies": {
"undies": { "name": "goblin/undies", "x": 6.3, "y": 0.12, "rotation": 0.91, "width": 36, "height": 29 }
"undies": { "name": "goblin/undies", "x": 6.3, "y": 0.13, "rotation": 0.92, "width": 36, "height": 29 }
}
},
"goblingirl": {
"eyes": {
"eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 }
"eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.55, "rotation": -87.05, "width": 37, "height": 21 }
},
"head": {
"head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 }
"head": { "name": "goblingirl/head", "x": 27.72, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 }
},
"left arm": {
"left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 }
"left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.43, "rotation": 33.05, "width": 37, "height": 35 }
},
"left foot": {
"left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 }
"left foot": { "name": "goblingirl/left-foot", "x": 25.18, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 }
},
"left hand": {
"left hand": {
@ -161,52 +154,52 @@
"y": 2.39,
"scaleX": 0.896,
"scaleY": 0.896,
"rotation": 30.34,
"rotation": 30.35,
"width": 35,
"height": 40
}
},
"left lower leg": {
"left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 }
"left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.61, "rotation": 105.76, "width": 33, "height": 70 }
},
"left shoulder": {
"left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 }
"left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.81, "y": -0.43, "rotation": 61.22, "width": 28, "height": 46 }
},
"left upper leg": {
"left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 }
"left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.22, "y": -2.95, "rotation": 89.1, "width": 33, "height": 70 }
},
"neck": {
"neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 }
"neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.15, "rotation": -98.86, "width": 35, "height": 41 }
},
"pelvis": {
"pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 }
"pelvis": { "name": "goblingirl/pelvis", "x": -3.88, "y": 3.19, "width": 62, "height": 43 }
},
"right arm": {
"right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 }
"right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.53, "width": 28, "height": 50 }
},
"right foot": {
"right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 }
"right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.53, "width": 63, "height": 33 }
},
"right hand": {
"right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 }
"right hand": { "name": "goblingirl/right-hand", "x": 7.22, "y": 3.44, "rotation": 91.17, "width": 36, "height": 37 }
},
"right lower leg": {
"right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 }
"right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.28, "rotation": 111.84, "width": 36, "height": 76 }
},
"right shoulder": {
"right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 }
"right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.46, "rotation": 129.85, "width": 39, "height": 45 }
},
"right upper leg": {
"right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 }
"right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.7, "y": 2.13, "rotation": 97.5, "width": 34, "height": 63 }
},
"torso": {
"torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 }
"torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.75, "width": 68, "height": 96 }
},
"undie straps": {
"undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 }
"undie straps": { "name": "goblingirl/undie-straps", "x": -1.52, "y": 14.19, "width": 55, "height": 19 }
},
"undies": {
"undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 }
"undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.71, "width": 36, "height": 29 }
}
}
},
@ -215,7 +208,7 @@
"slots": {
"eyes": {
"attachment": [
{ "time": 0.6999, "name": "eyes closed" },
{ "time": 0.7, "name": "eyes closed" },
{ "time": 0.8, "name": null }
]
}
@ -223,62 +216,62 @@
"bones": {
"left upper leg": {
"rotate": [
{ "time": 0, "angle": -26.55 },
{ "time": 0.1333, "angle": -8.78 },
{ "time": 0, "angle": -26.56 },
{ "time": 0.1333, "angle": -8.79 },
{ "time": 0.2333, "angle": 9.51 },
{ "time": 0.3666, "angle": 30.74 },
{ "time": 0.5, "angle": 25.33 },
{ "time": 0.6333, "angle": 26.11 },
{ "time": 0.7333, "angle": -7.7 },
{ "time": 0.8666, "angle": -21.19 },
{ "time": 1, "angle": -26.55 }
{ "time": 0.3667, "angle": 30.74 },
{ "time": 0.5, "angle": 25.34 },
{ "time": 0.6333, "angle": 26.12 },
{ "time": 0.7333, "angle": -7.71 },
{ "time": 0.8667, "angle": -21.19 },
{ "time": 1, "angle": -26.56 }
],
"translate": [
{ "time": 0, "x": -1.32, "y": 1.7 },
{ "time": 0.3666, "x": -0.06, "y": 2.42 },
{ "time": 1, "x": -1.32, "y": 1.7 }
{ "time": 0, "x": -1.32, "y": 1.71 },
{ "time": 0.3667, "x": -0.06, "y": 2.43 },
{ "time": 1, "x": -1.32, "y": 1.71 }
]
},
"right upper leg": {
"rotate": [
{ "time": 0, "angle": 42.45 },
{ "time": 0.1333, "angle": 52.1 },
{ "time": 0.2333, "angle": 8.53 },
{ "time": 0.5, "angle": -16.93 },
{ "time": 0.6333, "angle": 1.89 },
{ "time": 0.1333, "angle": 52.11 },
{ "time": 0.2333, "angle": 8.54 },
{ "time": 0.5, "angle": -16.94 },
{ "time": 0.6333, "angle": 1.9 },
{
"time": 0.7333,
"angle": 28.06,
"curve": [ 0.462, 0.11, 1, 1 ]
"curve": [ 0.463, 0.12, 1, 1 ]
},
{
"time": 0.8666,
"angle": 58.68,
"time": 0.8667,
"angle": 58.69,
"curve": [ 0.5, 0.02, 1, 1 ]
},
{ "time": 1, "angle": 42.45 }
],
"translate": [
{ "time": 0, "x": 6.23, "y": 0 },
{ "time": 0, "x": 6.24, "y": 0 },
{ "time": 0.2333, "x": 2.14, "y": 2.4 },
{ "time": 0.5, "x": 2.44, "y": 4.8 },
{ "time": 1, "x": 6.23, "y": 0 }
{ "time": 1, "x": 6.24, "y": 0 }
]
},
"left lower leg": {
"rotate": [
{ "time": 0, "angle": -22.98 },
{ "time": 0.1333, "angle": -63.5 },
{ "time": 0.1333, "angle": -63.51 },
{ "time": 0.2333, "angle": -73.76 },
{ "time": 0.5, "angle": 5.11 },
{ "time": 0.6333, "angle": -28.29 },
{ "time": 0.5, "angle": 5.12 },
{ "time": 0.6333, "angle": -28.3 },
{ "time": 0.7333, "angle": 4.08 },
{ "time": 0.8666, "angle": 3.53 },
{ "time": 0.8667, "angle": 3.53 },
{ "time": 1, "angle": -22.98 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0 },
{ "time": 0.2333, "x": 2.55, "y": -0.47 },
{ "time": 0.2333, "x": 2.56, "y": -0.47 },
{ "time": 0.5, "x": 0, "y": 0, "curve": "stepped" },
{ "time": 1, "x": 0, "y": 0 }
]
@ -288,11 +281,11 @@
{ "time": 0, "angle": -3.69 },
{ "time": 0.1333, "angle": -10.42 },
{ "time": 0.2333, "angle": -5.01 },
{ "time": 0.3666, "angle": 3.87 },
{ "time": 0.5, "angle": -3.87 },
{ "time": 0.3667, "angle": 3.87 },
{ "time": 0.5, "angle": -3.88 },
{ "time": 0.6333, "angle": 2.78 },
{ "time": 0.7333, "angle": 1.68 },
{ "time": 0.8666, "angle": -8.54 },
{ "time": 0.8667, "angle": -8.54 },
{ "time": 1, "angle": -3.69 }
]
},
@ -311,70 +304,70 @@
"rotate": [
{
"time": 0,
"angle": -4.02,
"curve": [ 0.267, 0, 0.804, 0.99 ]
"angle": -4.03,
"curve": [ 0.267, 0.01, 0.805, 0.99 ]
},
{
"time": 0.6333,
"angle": 19.78,
"angle": 19.79,
"curve": [ 0.307, 0, 0.787, 0.99 ]
},
{ "time": 1, "angle": -4.02 }
{ "time": 1, "angle": -4.03 }
]
},
"right hand": {
"rotate": [
{ "time": 0, "angle": 8.98 },
{ "time": 0, "angle": 8.99 },
{ "time": 0.6333, "angle": 0.51 },
{ "time": 1, "angle": 8.98 }
{ "time": 1, "angle": 8.99 }
]
},
"left shoulder": {
"rotate": [
{
"time": 0,
"angle": 6.25,
"curve": [ 0.339, 0, 0.683, 1 ]
"angle": 6.26,
"curve": [ 0.339, 0, 0.684, 1 ]
},
{
"time": 0.5,
"angle": -11.78,
"curve": [ 0.281, 0, 0.686, 0.99 ]
"angle": -11.79,
"curve": [ 0.282, 0, 0.687, 0.99 ]
},
{ "time": 1, "angle": 6.25 }
{ "time": 1, "angle": 6.26 }
],
"translate": [
{ "time": 0, "x": 1.15, "y": 0.23 }
{ "time": 0, "x": 1.15, "y": 0.24 }
]
},
"left hand": {
"rotate": [
{
"time": 0,
"angle": -21.23,
"curve": [ 0.295, 0, 0.755, 0.98 ]
"angle": -21.24,
"curve": [ 0.296, 0, 0.756, 0.99 ]
},
{
"time": 0.5,
"angle": -27.28,
"curve": [ 0.241, 0, 0.75, 0.97 ]
},
{ "time": 1, "angle": -21.23 }
{ "time": 1, "angle": -21.24 }
]
},
"left arm": {
"rotate": [
{
"time": 0,
"angle": 28.37,
"curve": [ 0.339, 0, 0.683, 1 ]
"angle": 28.38,
"curve": [ 0.339, 0, 0.684, 1 ]
},
{
"time": 0.5,
"angle": 60.09,
"curve": [ 0.281, 0, 0.686, 0.99 ]
"curve": [ 0.282, 0, 0.687, 0.99 ]
},
{ "time": 1, "angle": 28.37 }
{ "time": 1, "angle": 28.38 }
]
},
"torso": {
@ -382,38 +375,38 @@
{ "time": 0, "angle": -10.28 },
{
"time": 0.1333,
"angle": -15.38,
"curve": [ 0.545, 0, 0.818, 1 ]
"angle": -15.39,
"curve": [ 0.546, 0.01, 0.819, 1 ]
},
{
"time": 0.3666,
"time": 0.3667,
"angle": -9.78,
"curve": [ 0.58, 0.17, 0.669, 0.99 ]
"curve": [ 0.58, 0.17, 0.67, 0.99 ]
},
{
"time": 0.6333,
"angle": -15.75,
"curve": [ 0.235, 0.01, 0.795, 1 ]
"curve": [ 0.236, 0.01, 0.796, 1 ]
},
{
"time": 0.8666,
"angle": -7.06,
"curve": [ 0.209, 0, 0.816, 0.98 ]
"time": 0.8667,
"angle": -7.07,
"curve": [ 0.21, 0, 0.816, 0.99 ]
},
{ "time": 1, "angle": -10.28 }
],
"translate": [
{ "time": 0, "x": -1.29, "y": 1.68 }
{ "time": 0, "x": -1.29, "y": 1.69 }
]
},
"right foot": {
"rotate": [
{ "time": 0, "angle": -5.25 },
{ "time": 0.2333, "angle": -1.91 },
{ "time": 0.3666, "angle": -6.45 },
{ "time": 0.5, "angle": -5.39 },
{ "time": 0.7333, "angle": -11.68 },
{ "time": 0.8666, "angle": 0.46 },
{ "time": 0.3667, "angle": -6.45 },
{ "time": 0.5, "angle": -5.4 },
{ "time": 0.7333, "angle": -11.69 },
{ "time": 0.8667, "angle": 0.46 },
{ "time": 1, "angle": -5.25 }
]
},
@ -422,12 +415,12 @@
{
"time": 0,
"angle": -3.39,
"curve": [ 0.316, 0.01, 0.741, 0.98 ]
"curve": [ 0.316, 0.02, 0.741, 0.99 ]
},
{
"time": 0.1333,
"angle": -45.53,
"curve": [ 0.229, 0, 0.738, 0.97 ]
"curve": [ 0.23, 0, 0.739, 0.97 ]
},
{ "time": 0.2333, "angle": -4.83 },
{ "time": 0.5, "angle": -19.53 },
@ -442,7 +435,7 @@
"translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
{ "time": 0.5, "x": 0, "y": 0 },
{ "time": 0.6333, "x": 2.18, "y": 0.21 },
{ "time": 0.6333, "x": 2.19, "y": 0.21 },
{ "time": 1, "x": 0, "y": 0 }
]
},
@ -456,31 +449,31 @@
{
"time": 0.1333,
"x": 0,
"y": -7.05,
"curve": [ 0.359, 0.47, 0.646, 0.74 ]
"y": -7.06,
"curve": [ 0.359, 0.47, 0.647, 0.75 ]
},
{ "time": 0.3666, "x": 0, "y": 6.78 },
{ "time": 0.5, "x": 0, "y": -6.13 },
{ "time": 0.3667, "x": 0, "y": 6.78 },
{ "time": 0.5, "x": 0, "y": -6.14 },
{
"time": 0.6333,
"x": 0,
"y": -7.05,
"curve": [ 0.359, 0.47, 0.646, 0.74 ]
"y": -7.06,
"curve": [ 0.359, 0.47, 0.647, 0.75 ]
},
{ "time": 0.8666, "x": 0, "y": 6.78 },
{ "time": 0.8667, "x": 0, "y": 6.78 },
{ "time": 1, "x": 0, "y": -4.16 }
]
},
"neck": {
"rotate": [
{ "time": 0, "angle": 3.6 },
{ "time": 0.1333, "angle": 17.49 },
{ "time": 0.2333, "angle": 6.1 },
{ "time": 0.3666, "angle": 3.45 },
{ "time": 0.5, "angle": 5.17 },
{ "time": 0.1333, "angle": 17.5 },
{ "time": 0.2333, "angle": 6.11 },
{ "time": 0.3667, "angle": 3.46 },
{ "time": 0.5, "angle": 5.18 },
{ "time": 0.6333, "angle": 18.36 },
{ "time": 0.7333, "angle": 6.09 },
{ "time": 0.8666, "angle": 2.28 },
{ "time": 0.8667, "angle": 2.29 },
{ "time": 1, "angle": 3.6 }
]
},
@ -489,19 +482,19 @@
{
"time": 0,
"angle": 3.6,
"curve": [ 0, 0, 0.704, 1.17 ]
"curve": [ 0, 0, 0.704, 1.18 ]
},
{ "time": 0.1333, "angle": -0.2 },
{ "time": 0.2333, "angle": 6.1 },
{ "time": 0.3666, "angle": 3.45 },
{ "time": 0.1333, "angle": -0.21 },
{ "time": 0.2333, "angle": 6.11 },
{ "time": 0.3667, "angle": 3.46 },
{
"time": 0.5,
"angle": 5.17,
"curve": [ 0, 0, 0.704, 1.61 ]
"angle": 5.18,
"curve": [ 0, 0, 0.704, 1.62 ]
},
{ "time": 0.6666, "angle": 1.1 },
{ "time": 0.6667, "angle": 1.11 },
{ "time": 0.7333, "angle": 6.09 },
{ "time": 0.8666, "angle": 2.28 },
{ "time": 0.8667, "angle": 2.29 },
{ "time": 1, "angle": 3.6 }
]
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,30 +1,23 @@
{
"skeleton": {
"hash": "DRH0bKbb0s4lzWxWdYTHHpv4S4I",
"spine": "3.5.03-beta",
"width": 413.18,
"height": 195.71,
"fps": 30,
"images": "./images/"
},
"skeleton": { "hash": "d01ShNZ08gDOIyqc2CGlBzHUKrA", "spine": "3.6.05-beta", "width": 413.19, "height": 195.71, "images": "./images/" },
"bones": [
{ "name": "root" },
{ "name": "powerup", "parent": "root", "x": 1.48, "y": 134.02 },
{ "name": "tokenRoot", "parent": "powerup", "x": -0.47, "y": 56.13 },
{ "name": "tokenRoot", "parent": "powerup", "x": -0.47, "y": 56.14 },
{ "name": "left wing", "parent": "tokenRoot", "x": -91.06, "y": 7.8 },
{ "name": "right wing", "parent": "tokenRoot", "x": 86.82, "y": 7.12 },
{ "name": "stars", "parent": "root", "x": 1.22, "y": 191.25 },
{ "name": "stars", "parent": "root", "x": 1.23, "y": 191.25 },
{ "name": "star", "parent": "stars", "x": 2.84, "y": 4.76 },
{ "name": "star1", "parent": "stars", "x": -2.19, "y": -2.04 },
{ "name": "star2", "parent": "stars", "x": -1.36, "y": -4.16 },
{ "name": "star1", "parent": "stars", "x": -2.2, "y": -2.04 },
{ "name": "star2", "parent": "stars", "x": -1.37, "y": -4.16 },
{ "name": "star3", "parent": "stars", "x": -0.84, "y": -3.78 },
{ "name": "star4", "parent": "stars", "x": 10.08, "y": 14.52 },
{ "name": "star5", "parent": "stars", "x": 11.5, "y": -12.28 },
{ "name": "star6", "parent": "stars", "x": -20.73, "y": -23.44 },
{ "name": "star7", "parent": "stars", "x": -5.85, "y": -35.84 },
{ "name": "star4", "parent": "stars", "x": 10.09, "y": 14.53 },
{ "name": "star5", "parent": "stars", "x": 11.5, "y": -12.29 },
{ "name": "star6", "parent": "stars", "x": -20.74, "y": -23.45 },
{ "name": "star7", "parent": "stars", "x": -5.86, "y": -35.85 },
{ "name": "star8", "parent": "stars", "x": 8.41, "y": -10.05 },
{ "name": "star9", "parent": "stars", "x": -1.62, "y": -7.34 },
{ "name": "token", "parent": "tokenRoot", "x": -1.18, "y": -1.81, "scaleX": 0.771, "scaleY": 0.771 }
{ "name": "token", "parent": "tokenRoot", "x": -1.19, "y": -1.81, "scaleX": 0.771, "scaleY": 0.771 }
],
"slots": [
{ "name": "right wing", "bone": "right wing", "attachment": "wing" },
@ -44,10 +37,10 @@
"skins": {
"default": {
"left wing": {
"wing": { "x": -48.74, "y": 42.16, "scaleX": -1, "width": 137, "height": 150 }
"wing": { "x": -48.75, "y": 42.16, "scaleX": -1, "width": 137, "height": 150 }
},
"right wing": {
"wing": { "x": 49.55, "y": 42.32, "width": 137, "height": 150 }
"wing": { "x": 49.56, "y": 42.32, "width": 137, "height": 150 }
},
"star": {
"star": { "width": 76, "height": 72 }
@ -80,7 +73,7 @@
"star": { "width": 76, "height": 72 }
},
"token": {
"token": { "x": 1.18, "y": 1.81, "width": 123, "height": 122 }
"token": { "x": 1.19, "y": 1.81, "width": 123, "height": 122 }
}
}
},
@ -91,12 +84,12 @@
"color": [
{ "time": 0, "color": "ffffff00" },
{ "time": 0.5333, "color": "ffffffff" },
{ "time": 0.6666, "color": "ffffff00" }
{ "time": 0.6667, "color": "ffffff00" }
]
},
"star1": {
"color": [
{ "time": 0.2666, "color": "fff9f600" },
{ "time": 0.2667, "color": "fff9f600" },
{ "time": 0.8, "color": "ffffffff" },
{ "time": 0.9333, "color": "fff0f200" }
]
@ -104,14 +97,14 @@
"star2": {
"color": [
{ "time": 0.1333, "color": "ffffff00" },
{ "time": 0.6666, "color": "ffffffff" },
{ "time": 0.6667, "color": "ffffffff" },
{ "time": 0.8, "color": "ffffff00" }
]
},
"star3": {
"color": [
{ "time": 0.4333, "color": "ffffff00" },
{ "time": 0.9666, "color": "ffffffff" },
{ "time": 0.9667, "color": "ffffffff" },
{ "time": 1.1, "color": "ffffff00" }
]
},
@ -119,7 +112,7 @@
"color": [
{ "time": 0.6, "color": "ffffff00" },
{ "time": 1.1333, "color": "ffffffff" },
{ "time": 1.2666, "color": "ffffff00" }
{ "time": 1.2667, "color": "ffffff00" }
]
},
"star5": {
@ -135,7 +128,7 @@
"color": [
{ "time": 0, "color": "ffffff2f" },
{ "time": 0.4333, "color": "ffffffff" },
{ "time": 0.5666, "color": "ffffff00", "curve": "stepped" },
{ "time": 0.5667, "color": "ffffff00", "curve": "stepped" },
{ "time": 1.2333, "color": "ffffff00" },
{ "time": 1.3333, "color": "ffffff2f" }
]
@ -143,15 +136,15 @@
"star7": {
"color": [
{ "time": 0.6333, "color": "ffffff00" },
{ "time": 1.1666, "color": "ffffffff" },
{ "time": 1.2999, "color": "ffffff00" }
{ "time": 1.1667, "color": "ffffffff" },
{ "time": 1.3, "color": "ffffff00" }
]
},
"star8": {
"color": [
{ "time": 0, "color": "ffffffbf" },
{ "time": 0.1333, "color": "ffffffff" },
{ "time": 0.2666, "color": "ffffff00", "curve": "stepped" },
{ "time": 0.2667, "color": "ffffff00", "curve": "stepped" },
{ "time": 0.9333, "color": "ffffff00" },
{ "time": 1.3333, "color": "ffffffbf" }
]
@ -170,24 +163,24 @@
"translate": [
{
"time": 0,
"x": -18.55,
"x": -18.56,
"y": 0,
"curve": [ 0.385, 0, 0.689, 0.95 ]
"curve": [ 0.385, 0.01, 0.69, 0.96 ]
},
{
"time": 0.3333,
"x": 0,
"y": -34.69,
"curve": [ 0.235, 0.66, 1, 1 ]
"y": -34.7,
"curve": [ 0.236, 0.67, 1, 1 ]
},
{ "time": 0.6666, "x": 22.04, "y": 0 },
{ "time": 0.6667, "x": 22.04, "y": 0 },
{
"time": 1,
"x": 0,
"y": -34.69,
"curve": [ 0.235, 0.66, 1, 1 ]
"y": -34.7,
"curve": [ 0.236, 0.67, 1, 1 ]
},
{ "time": 1.3333, "x": -18.55, "y": 0 }
{ "time": 1.3333, "x": -18.56, "y": 0 }
]
},
"left wing": {
@ -195,258 +188,258 @@
{
"time": 0,
"angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ]
"curve": [ 0.394, 0, 0.629, 1 ]
},
{
"time": 0.1666,
"angle": -38.74,
"curve": [ 0.163, 0.91, 1, 1 ]
"time": 0.1667,
"angle": -38.75,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{
"time": 0.3333,
"angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ]
"curve": [ 0.394, 0, 0.629, 1 ]
},
{
"time": 0.5,
"angle": -38.74,
"curve": [ 0.163, 0.91, 1, 1 ]
"angle": -38.75,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{
"time": 0.6666,
"time": 0.6667,
"angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ]
"curve": [ 0.394, 0, 0.629, 1 ]
},
{
"time": 0.8333,
"angle": -38.74,
"curve": [ 0.163, 0.91, 1, 1 ]
"angle": -38.75,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{
"time": 1,
"angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ]
"curve": [ 0.394, 0, 0.629, 1 ]
},
{
"time": 1.1666,
"angle": -38.74,
"curve": [ 0.163, 0.91, 1, 1 ]
"time": 1.1667,
"angle": -38.75,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{ "time": 1.3333, "angle": 45.23 }
],
"scale": [
{ "time": 0, "x": 1.098, "y": 1 },
{ "time": 0.1666, "x": 1, "y": 0.826 },
{ "time": 0.3333, "x": 1.098, "y": 1 },
{ "time": 0.5, "x": 1, "y": 0.826 },
{ "time": 0.6666, "x": 1.098, "y": 1 },
{ "time": 0.8333, "x": 1, "y": 0.826 },
{ "time": 1, "x": 1.098, "y": 1 },
{ "time": 1.1666, "x": 1, "y": 0.826 },
{ "time": 1.3333, "x": 1.098, "y": 1 }
{ "time": 0, "x": 1.099, "y": 1 },
{ "time": 0.1667, "x": 1, "y": 0.827 },
{ "time": 0.3333, "x": 1.099, "y": 1 },
{ "time": 0.5, "x": 1, "y": 0.827 },
{ "time": 0.6667, "x": 1.099, "y": 1 },
{ "time": 0.8333, "x": 1, "y": 0.827 },
{ "time": 1, "x": 1.099, "y": 1 },
{ "time": 1.1667, "x": 1, "y": 0.827 },
{ "time": 1.3333, "x": 1.099, "y": 1 }
]
},
"right wing": {
"rotate": [
{
"time": 0,
"angle": -39.45,
"curve": [ 0.327, 0, 0.637, 1 ]
"angle": -39.46,
"curve": [ 0.328, 0, 0.638, 1 ]
},
{
"time": 0.1666,
"angle": 37.67,
"curve": [ 0.163, 0.91, 1, 1 ]
"time": 0.1667,
"angle": 37.68,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{
"time": 0.3333,
"angle": -39.45,
"curve": [ 0.327, 0, 0.637, 1 ]
"angle": -39.46,
"curve": [ 0.328, 0, 0.638, 1 ]
},
{
"time": 0.5,
"angle": 37.67,
"curve": [ 0.163, 0.91, 1, 1 ]
"angle": 37.68,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{
"time": 0.6666,
"angle": -39.45,
"curve": [ 0.327, 0, 0.637, 1 ]
"time": 0.6667,
"angle": -39.46,
"curve": [ 0.328, 0, 0.638, 1 ]
},
{
"time": 0.8333,
"angle": 37.67,
"curve": [ 0.163, 0.91, 1, 1 ]
"angle": 37.68,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{
"time": 1,
"angle": -39.45,
"curve": [ 0.327, 0, 0.637, 1 ]
"angle": -39.46,
"curve": [ 0.328, 0, 0.638, 1 ]
},
{
"time": 1.1666,
"angle": 37.67,
"curve": [ 0.163, 0.91, 1, 1 ]
"time": 1.1667,
"angle": 37.68,
"curve": [ 0.164, 0.91, 1, 1 ]
},
{ "time": 1.3333, "angle": -39.45 }
{ "time": 1.3333, "angle": -39.46 }
],
"scale": [
{ "time": 0, "x": 1.09, "y": 1 },
{ "time": 0.1666, "x": 1, "y": 0.819 },
{ "time": 0.1667, "x": 1, "y": 0.82 },
{ "time": 0.3333, "x": 1.09, "y": 1 },
{ "time": 0.5, "x": 1, "y": 0.819 },
{ "time": 0.6666, "x": 1.09, "y": 1 },
{ "time": 0.8333, "x": 1, "y": 0.819 },
{ "time": 0.5, "x": 1, "y": 0.82 },
{ "time": 0.6667, "x": 1.09, "y": 1 },
{ "time": 0.8333, "x": 1, "y": 0.82 },
{ "time": 1, "x": 1.09, "y": 1 },
{ "time": 1.1666, "x": 1, "y": 0.819 },
{ "time": 1.1667, "x": 1, "y": 0.82 },
{ "time": 1.3333, "x": 1.09, "y": 1 }
]
},
"tokenRoot": {
"rotate": [
{ "time": 0, "angle": 11.29 },
{ "time": 0.3333, "angle": 2.5 },
{ "time": 0.6666, "angle": -12.5 },
{ "time": 0, "angle": 11.3 },
{ "time": 0.3333, "angle": 2.51 },
{ "time": 0.6667, "angle": -12.5 },
{ "time": 1, "angle": 0.63 },
{ "time": 1.3333, "angle": 11.29 }
{ "time": 1.3333, "angle": 11.3 }
]
},
"token": {
"rotate": [
{ "time": 0, "angle": -0.5 },
{ "time": 0.6666, "angle": 5.86 },
{ "time": 0.6667, "angle": 5.87 },
{ "time": 1.3333, "angle": -0.5 }
],
"scale": [
{ "time": 0, "x": 1.181, "y": 1.181 },
{ "time": 0.3333, "x": 1, "y": 1 },
{ "time": 0.6666, "x": 1.181, "y": 1.181 },
{ "time": 0.6667, "x": 1.181, "y": 1.181 },
{ "time": 1, "x": 1, "y": 1 },
{ "time": 1.3333, "x": 1.181, "y": 1.181 }
]
},
"star": {
"rotate": [
{ "time": 0, "angle": 28.25 },
{ "time": 0.6666, "angle": -42.08 }
{ "time": 0, "angle": 28.26 },
{ "time": 0.6667, "angle": -42.08 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0 },
{ "time": 0.6666, "x": 86.68, "y": 68.32 }
{ "time": 0.6667, "x": 86.68, "y": 68.32 }
],
"scale": [
{ "time": 0, "x": 0.439, "y": 0.439 },
{ "time": 0.6666, "x": 1, "y": 1 }
{ "time": 0.6667, "x": 1, "y": 1 }
]
},
"star1": {
"rotate": [
{ "time": 0.2666, "angle": 13.37 },
{ "time": 0.2667, "angle": 13.37 },
{ "time": 0.9333, "angle": 89.61 }
],
"translate": [
{ "time": 0.2666, "x": -12.15, "y": -2.27 },
{ "time": 0.2667, "x": -12.16, "y": -2.28 },
{ "time": 0.9333, "x": -76.4, "y": 67.76 }
],
"scale": [
{ "time": 0.2666, "x": 0.391, "y": 0.391 },
{ "time": 0.9333, "x": 0.815, "y": 0.815 }
{ "time": 0.2667, "x": 0.392, "y": 0.392 },
{ "time": 0.9333, "x": 0.816, "y": 0.816 }
]
},
"star2": {
"rotate": [
{ "time": 0.1333, "angle": -42.67 },
{ "time": 0.1333, "angle": -42.68 },
{ "time": 0.8, "angle": 88.41 }
],
"translate": [
{ "time": 0.1333, "x": -18.32, "y": -18.91 },
{ "time": 0.8, "x": -57.85, "y": -97.4 }
{ "time": 0.1333, "x": -18.33, "y": -18.92 },
{ "time": 0.8, "x": -57.86, "y": -97.4 }
],
"scale": [
{ "time": 0.1333, "x": 0.211, "y": 0.211 },
{ "time": 0.8, "x": 0.652, "y": 0.652 }
{ "time": 0.1333, "x": 0.212, "y": 0.212 },
{ "time": 0.8, "x": 0.653, "y": 0.653 }
]
},
"star3": {
"rotate": [
{ "time": 0.4333, "angle": 57.71 },
{ "time": 0.4333, "angle": 57.72 },
{ "time": 1.1, "angle": -105.15 }
],
"translate": [
{ "time": 0.4333, "x": 36.1, "y": -40.52 },
{ "time": 1.1, "x": 69, "y": -78.3 }
{ "time": 1.1, "x": 69.01, "y": -78.31 }
],
"scale": [
{ "time": 0.4333, "x": 0.24, "y": 0.24 },
{ "time": 0.4333, "x": 0.241, "y": 0.241 },
{ "time": 1.1, "x": 0.776, "y": 0.776 }
]
},
"star4": {
"rotate": [
{ "time": 0.6, "angle": 37.65 },
{ "time": 1.2666, "angle": -102.15 }
{ "time": 0.6, "angle": 37.66 },
{ "time": 1.2667, "angle": -102.16 }
],
"translate": [
{ "time": 0.6, "x": 8.65, "y": -12.98 },
{ "time": 1.2666, "x": -0.99, "y": 82.82 }
{ "time": 0.6, "x": 8.66, "y": -12.98 },
{ "time": 1.2667, "x": -0.99, "y": 82.82 }
],
"scale": [
{ "time": 0.6, "x": 0.275, "y": 0.275 },
{ "time": 1.2666, "x": 1.081, "y": 1.081 }
{ "time": 0.6, "x": 0.276, "y": 0.276 },
{ "time": 1.2667, "x": 1.081, "y": 1.081 }
]
},
"star5": {
"rotate": [
{ "time": 0, "angle": 18.27 },
{ "time": 0, "angle": 18.28 },
{ "time": 0.3333, "angle": 83.73, "curve": "stepped" },
{ "time": 1, "angle": -47.17 },
{ "time": 1.3333, "angle": 18.27 }
{ "time": 1, "angle": -47.18 },
{ "time": 1.3333, "angle": 18.28 }
],
"translate": [
{ "time": 0, "x": -67.73, "y": -7.78 },
{ "time": 0.3333, "x": -102.83, "y": -22.36, "curve": "stepped" },
{ "time": 1, "x": -32.63, "y": 6.8 },
{ "time": 1.3333, "x": -67.73, "y": -7.78 }
{ "time": 0, "x": -67.74, "y": -7.78 },
{ "time": 0.3333, "x": -102.84, "y": -22.36, "curve": "stepped" },
{ "time": 1, "x": -32.64, "y": 6.8 },
{ "time": 1.3333, "x": -67.74, "y": -7.78 }
],
"scale": [
{ "time": 0, "x": 0.565, "y": 0.565 },
{ "time": 0, "x": 0.566, "y": 0.566 },
{ "time": 0.3333, "x": 0.791, "y": 0.791, "curve": "stepped" },
{ "time": 1, "x": 0.34, "y": 0.34 },
{ "time": 1.3333, "x": 0.565, "y": 0.565 }
{ "time": 1, "x": 0.341, "y": 0.341 },
{ "time": 1.3333, "x": 0.566, "y": 0.566 }
]
},
"star6": {
"rotate": [
{ "time": 0, "angle": 25.23 },
{ "time": 0.5666, "angle": -73.06, "curve": "stepped" },
{ "time": 1.2333, "angle": 42.58 },
{ "time": 1.3333, "angle": 25.23 }
{ "time": 0, "angle": 25.24 },
{ "time": 0.5667, "angle": -73.07, "curve": "stepped" },
{ "time": 1.2333, "angle": 42.59 },
{ "time": 1.3333, "angle": 25.24 }
],
"translate": [
{ "time": 0, "x": 4.55, "y": -14.21 },
{ "time": 0.5666, "x": 30.36, "y": -94.75, "curve": "stepped" },
{ "time": 0.5667, "x": 30.36, "y": -94.76, "curve": "stepped" },
{ "time": 1.2333, "x": 0, "y": 0 },
{ "time": 1.3333, "x": 4.55, "y": -14.21 }
],
"scale": [
{ "time": 0, "x": 0.337, "y": 0.337 },
{ "time": 0.5666, "x": 0.955, "y": 0.955, "curve": "stepped" },
{ "time": 1.2333, "x": 0.227, "y": 0.227 },
{ "time": 0.5667, "x": 0.956, "y": 0.956, "curve": "stepped" },
{ "time": 1.2333, "x": 0.228, "y": 0.228 },
{ "time": 1.3333, "x": 0.337, "y": 0.337 }
]
},
"star7": {
"rotate": [
{ "time": 0.6333, "angle": 41.11 },
{ "time": 1.2999, "angle": -89.84 }
{ "time": 0.6333, "angle": 41.12 },
{ "time": 1.3, "angle": -89.85 }
],
"translate": [
{ "time": 0.6333, "x": 20.27, "y": 32.75 },
{ "time": 1.2999, "x": -67.79, "y": -68.56 }
{ "time": 0.6333, "x": 20.28, "y": 32.76 },
{ "time": 1.3, "x": -67.8, "y": -68.56 }
],
"scale": [
{ "time": 0.6333, "x": 0.258, "y": 0.258 },
{ "time": 1.2999, "x": 0.999, "y": 0.999 }
{ "time": 0.6333, "x": 0.259, "y": 0.259 },
{ "time": 1.3, "x": 0.999, "y": 0.999 }
]
},
"star9": {
@ -458,33 +451,33 @@
],
"translate": [
{ "time": 0, "x": -78.75, "y": 77.18 },
{ "time": 0.1333, "x": -98.44, "y": 96.47, "curve": "stepped" },
{ "time": 0.1333, "x": -98.44, "y": 96.48, "curve": "stepped" },
{ "time": 0.8, "x": 0, "y": 0 },
{ "time": 1.3333, "x": -78.75, "y": 77.18 }
],
"scale": [
{ "time": 0, "x": 0.772, "y": 0.772 },
{ "time": 0, "x": 0.773, "y": 0.773 },
{ "time": 0.1333, "x": 0.91, "y": 0.91, "curve": "stepped" },
{ "time": 0.8, "x": 0.221, "y": 0.221 },
{ "time": 1.3333, "x": 0.772, "y": 0.772 }
{ "time": 0.8, "x": 0.222, "y": 0.222 },
{ "time": 1.3333, "x": 0.773, "y": 0.773 }
]
},
"star8": {
"rotate": [
{ "time": 0, "angle": -60.17 },
{ "time": 0.2666, "angle": -109.83, "curve": "stepped" },
{ "time": 0, "angle": -60.18 },
{ "time": 0.2667, "angle": -109.84, "curve": "stepped" },
{ "time": 0.9333, "angle": 14.31 },
{ "time": 1.3333, "angle": -60.17 }
{ "time": 1.3333, "angle": -60.18 }
],
"translate": [
{ "time": 0, "x": 44.63, "y": -41.66 },
{ "time": 0.2666, "x": 74.39, "y": -69.43, "curve": "stepped" },
{ "time": 0, "x": 44.64, "y": -41.66 },
{ "time": 0.2667, "x": 74.4, "y": -69.44, "curve": "stepped" },
{ "time": 0.9333, "x": 0, "y": 0 },
{ "time": 1.3333, "x": 44.63, "y": -41.66 }
{ "time": 1.3333, "x": 44.64, "y": -41.66 }
],
"scale": [
{ "time": 0, "x": 0.452, "y": 0.452 },
{ "time": 0.2666, "x": 0.672, "y": 0.672, "curve": "stepped" },
{ "time": 0.2667, "x": 0.672, "y": 0.672, "curve": "stepped" },
{ "time": 0.9333, "x": 0.123, "y": 0.123 },
{ "time": 1.3333, "x": 0.452, "y": 0.452 }
]

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,62 +1,55 @@
{
"skeleton": {
"hash": "Vw3hWCw+PV8Q6kMU7bcyWS2a+uw",
"spine": "3.5.03-beta",
"width": 511.47,
"height": 739.87,
"fps": 30,
"images": "./images/"
},
"skeleton": { "hash": "jwwArXQBSgnDp4JM5vgHQsr+jXc", "spine": "3.6.05-beta", "width": 511.48, "height": 739.87, "images": "./images/" },
"bones": [
{ "name": "root" },
{ "name": "hip", "parent": "root", "x": -49.89, "y": 290.95 },
{ "name": "hoverboard", "parent": "root", "length": 72.32, "x": 9.9, "y": 57.05 },
{ "name": "rear_foot_ik", "parent": "hoverboard", "rotation": -0.97, "x": 83.75, "y": 21.7, "color": "ff3f00ff" },
{ "name": "hip", "parent": "root", "x": -49.9, "y": 290.96 },
{ "name": "hoverboard", "parent": "root", "length": 72.32, "x": 9.91, "y": 57.06 },
{ "name": "rear_foot_ik", "parent": "hoverboard", "rotation": -0.97, "x": 83.75, "y": 21.71, "color": "ff3f00ff" },
{ "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" },
{ "name": "rear_thigh", "parent": "hip", "length": 85.7, "rotation": -72.54, "x": 8.9, "y": -5.61, "color": "ff000dff" },
{ "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.82, "x": 86.09, "y": -1.32, "color": "ff000dff" },
{ "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.44, "y": -0.75, "color": "ff000dff" },
{ "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" },
{ "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" },
{ "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "rotation": 45.77, "x": 121.45, "y": -0.75, "color": "ff000dff" },
{ "name": "rear_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": 135.05, "y": 20.47, "color": "ff3f00ff" },
{ "name": "back_foot_tip", "parent": "rear_foot", "length": 50.29, "rotation": 46.61, "x": 51.15, "y": 0.23, "color": "ff000dff" },
{ "name": "back_foot_tip", "parent": "rear_foot", "length": 50.3, "rotation": 46.62, "x": 51.16, "y": 0.23, "color": "ff000dff" },
{ "name": "exhaust1", "parent": "hoverboard", "rotation": 3.19, "x": -249.74, "y": 52.63 },
{ "name": "exhaust2", "parent": "hoverboard", "rotation": 26.5, "x": -191.57, "y": -23.5 },
{ "name": "front_foot_ik", "parent": "hoverboard", "rotation": -16.95, "x": -100.29, "y": 23.95, "color": "ff3f00ff" },
{ "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.38, "y": 29.05, "color": "ff3f00ff" },
{ "name": "torso", "parent": "hip", "length": 127.55, "rotation": 64.59, "x": -1.61, "y": 4.9, "color": "e0da19ff" },
{ "name": "front_upper_arm", "parent": "torso", "length": 69.44, "rotation": 125.79, "x": 103.75, "y": 19.31, "color": "00ff04ff" },
{ "name": "exhaust2", "parent": "hoverboard", "rotation": 26.51, "x": -191.58, "y": -23.5 },
{ "name": "front_foot_ik", "parent": "hoverboard", "rotation": -16.95, "x": -100.3, "y": 23.96, "color": "ff3f00ff" },
{ "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.39, "y": 29.06, "color": "ff3f00ff" },
{ "name": "torso", "parent": "hip", "length": 127.55, "rotation": 64.6, "x": -1.61, "y": 4.9, "color": "e0da19ff" },
{ "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 125.79, "x": 103.75, "y": 19.32, "color": "00ff04ff" },
{
"name": "front_bracer",
"parent": "front_upper_arm",
"length": 40.56,
"length": 40.57,
"rotation": 18.29,
"x": 68.8,
"y": -0.68,
"color": "00ff04ff"
},
{ "name": "front_fist", "parent": "front_bracer", "length": 65.37, "rotation": 12.43, "x": 40.56, "y": 0.18, "color": "00ff04ff" },
{ "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 12.43, "x": 40.56, "y": 0.19, "color": "00ff04ff" },
{ "name": "front_thigh", "parent": "hip", "length": 74.8, "rotation": -95.51, "x": -17.45, "y": -11.64, "color": "00ff04ff" },
{ "name": "front_shin", "parent": "front_thigh", "length": 128.75, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" },
{ "name": "front_foot", "parent": "front_shin", "length": 41, "rotation": 51.25, "x": 128.75, "y": -0.33, "color": "00ff04ff" },
{ "name": "front_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": -44.59, "y": 21.98, "color": "ff3f00ff" },
{ "name": "front_shin", "parent": "front_thigh", "length": 128.76, "rotation": -2.21, "x": 78.69, "y": 1.6, "color": "00ff04ff" },
{ "name": "front_foot", "parent": "front_shin", "length": 41, "rotation": 51.26, "x": 128.75, "y": -0.33, "color": "00ff04ff" },
{ "name": "front_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": -44.6, "y": 21.99, "color": "ff3f00ff" },
{
"name": "front_foot_tip",
"parent": "front_foot",
"length": 56.02,
"rotation": 44.29,
"x": 41.41,
"y": -0.07,
"rotation": 44.3,
"x": 41.42,
"y": -0.08,
"color": "00ff04ff"
},
{ "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -153.6, "x": 92.34, "y": -19.21, "color": "ff000dff" },
{ "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.54, "rotation": 43.56, "x": 51.34, "color": "ff000dff" },
{ "name": "gun", "parent": "rear_bracer", "length": 43.09, "rotation": 17.61, "x": 34.41, "y": -0.44, "color": "ff000dff" },
{ "name": "gunTip", "parent": "gun", "rotation": 6.82, "x": 201.03, "y": 52.13, "color": "ff000dff" },
{ "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.48, "y": -0.3, "color": "e0da19ff" },
{ "name": "head", "parent": "neck", "length": 131.78, "rotation": 51.9, "x": 27.65, "y": -0.25, "color": "e0da19ff" },
{ "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.09, "x": 149.82, "y": -59.77, "color": "e0da19ff" },
{ "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.4, "x": 47.22, "y": 0.18, "color": "e0da19ff" },
{ "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.15, "x": 164.13, "y": 3.68, "color": "e0da19ff" },
{ "name": "hair4", "parent": "hair3", "length": 80.27, "rotation": 83.69, "x": 62.22, "y": -0.02, "color": "e0da19ff" },
{ "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -153.6, "x": 92.35, "y": -19.22, "color": "ff000dff" },
{ "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 43.56, "x": 51.35, "color": "ff000dff" },
{ "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 17.61, "x": 34.42, "y": -0.45, "color": "ff000dff" },
{ "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.04, "y": 52.13, "color": "ff000dff" },
{ "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" },
{ "name": "head", "parent": "neck", "length": 131.79, "rotation": 51.91, "x": 27.66, "y": -0.25, "color": "e0da19ff" },
{ "name": "hair1", "parent": "head", "length": 47.22, "rotation": -49.1, "x": 149.82, "y": -59.77, "color": "e0da19ff" },
{ "name": "hair2", "parent": "hair1", "length": 55.56, "rotation": 50.41, "x": 47.22, "y": 0.18, "color": "e0da19ff" },
{ "name": "hair3", "parent": "head", "length": 62.22, "rotation": -32.16, "x": 164.13, "y": 3.68, "color": "e0da19ff" },
{ "name": "hair4", "parent": "hair3", "length": 80.28, "rotation": 83.7, "x": 62.22, "y": -0.03, "color": "e0da19ff" },
{
"name": "hoverboard_thruster_front",
"parent": "hoverboard",
@ -69,12 +62,12 @@
"name": "hoverboard_thruster_rear",
"parent": "hoverboard",
"rotation": -29.03,
"x": -76.46,
"x": -76.47,
"y": -5.11,
"transform": "noRotationOrReflection"
},
{ "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.88, "y": -37.77 },
{ "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.94, "y": -35.65 }
{ "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.89, "y": -37.78 },
{ "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.95, "y": -35.66 }
],
"slots": [
{ "name": "hoverboard_thruster_rear", "bone": "hoverboard_thruster_rear", "attachment": "hoverboard_thruster" },
@ -148,26 +141,26 @@
"skins": {
"default": {
"exhaust1": {
"hoverglow_small": { "scaleX": 0.462, "scaleY": 0.812, "rotation": -83.09, "width": 274, "height": 75 }
"hoverglow_small": { "scaleX": 0.463, "scaleY": 0.813, "rotation": -83.09, "width": 274, "height": 75 }
},
"exhaust2": {
"hoverglow_small": { "y": -0.76, "scaleX": 0.413, "scaleY": 0.487, "rotation": -89.24, "width": 274, "height": 75 }
"hoverglow_small": { "x": 0.01, "y": -0.76, "scaleX": 0.414, "scaleY": 0.488, "rotation": -89.25, "width": 274, "height": 75 }
},
"eye": {
"eye_indifferent": {
"type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
"triangles": [ 1, 3, 0, 1, 2, 3 ],
"vertices": [ 59.15, -86.8, 28.30999, 0.92, 112.26, 30.44, 143.11, -57.27 ],
"vertices": [ 59.16, -86.8, 28.32, 0.92, 112.27, 30.44, 143.11, -57.28 ],
"hull": 4,
"edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
"width": 93,
"height": 89
},
"eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.62, "width": 93, "height": 89 }
"eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }
},
"front_bracer": {
"front_bracer": { "x": 12.02, "y": -1.66, "rotation": 79.58, "width": 58, "height": 80 }
"front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 }
},
"front_fist": {
"front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 },
@ -176,32 +169,32 @@
"front_foot": {
"front_foot": {
"type": "mesh",
"uvs": [ 0.59416, 0.2342, 0.62256, 0.30335, 0.65008, 0.37035, 0.67637, 0.38403, 0.72067, 0.40709, 0.76263, 0.42893, 1, 0.70375, 1, 1, 0.65517, 1, 0.36439, 1, 0, 1, 0, 0.39195, 0, 0, 0.17845, 0, 0.49794, 0 ],
"uvs": [ 0.59417, 0.23421, 0.62257, 0.30335, 0.65009, 0.37035, 0.67637, 0.38403, 0.72068, 0.40709, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.3644, 1, 0, 1, 0, 0.39196, 0, 0, 0.17845, 0, 0.49795, 0 ],
"triangles": [ 8, 9, 3, 4, 8, 3, 8, 4, 5, 8, 5, 6, 8, 6, 7, 11, 12, 13, 11, 1, 10, 13, 14, 0, 0, 11, 13, 1, 11, 0, 2, 9, 10, 2, 10, 1, 9, 2, 3 ],
"vertices": [ 2, 20, 18.17, 41.56, 0.72254, 22, 12.46, 46.04, 0.27744, 2, 20, 24.06999, 40.75, 0.57406, 22, 16.12, 41.34, 0.42592, 2, 20, 29.79, 39.97, 0.47663, 22, 19.67, 36.77, 0.52336, 2, 20, 32.79, 41.65, 0.37452, 22, 22.97999, 35.88, 0.62546, 2, 20, 37.86, 44.5, 0.24772, 22, 28.6, 34.4, 0.75226, 2, 20, 42.65, 47.2, 0.17781, 22, 33.9, 32.97, 0.82216, 1, 22, 64.15, 14.56, 1, 1, 22, 64.51, -5.86, 1, 1, 22, 21.05999, -6.63, 1, 2, 20, 35.38, -16.14999, 0.99997, 22, -15.52999, -7.28, 0, 1, 20, 3.08999, -48.81, 1, 1, 20, -26.70999, -19.29999, 1, 1, 20, -45.95, -0.28, 1, 1, 20, -30.12999, 15.68, 1, 2, 20, -1.84, 44.31, 0.91509, 22, 0.05, 61.97, 0.08488 ],
"vertices": [ 2, 20, 18.17, 41.57, 0.72255, 22, 12.46, 46.04, 0.27744, 2, 20, 24.08, 40.76, 0.57407, 22, 16.12, 41.34, 0.42592, 2, 20, 29.8, 39.97, 0.47663, 22, 19.67, 36.77, 0.52336, 2, 20, 32.8, 41.66, 0.37452, 22, 22.99, 35.89, 0.62547, 2, 20, 37.86, 44.51, 0.24772, 22, 28.6, 34.4, 0.75227, 2, 20, 42.65, 47.21, 0.17783, 22, 33.91, 32.98, 0.82216, 1, 22, 64.15, 14.56, 1, 1, 22, 64.51, -5.87, 1, 1, 22, 21.07, -6.63, 1, 2, 20, 35.38, -16.16, 0.99998, 22, -15.54, -7.28, 1.0E-5, 1, 20, 3.1, -48.81, 1, 1, 20, -26.72, -19.31, 1, 1, 20, -45.95, -0.29, 1, 1, 20, -30.14, 15.69, 1, 2, 20, -1.84, 44.31, 0.91511, 22, 0.05, 61.98, 0.08488 ],
"hull": 15,
"edges": [ 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 22, 24, 24, 26, 26, 28, 22, 26, 12, 14, 10, 12, 2, 4, 2, 20, 4, 6, 6, 16, 2, 0, 0, 28, 6, 8, 8, 10 ],
"width": 126,
"height": 69
},
"front_foot_bend1": { "x": 22.86, "y": 20.23, "rotation": 45.31, "width": 128, "height": 70 },
"front_foot_bend2": { "x": 8.15, "y": 19.56, "rotation": 45.31, "width": 108, "height": 93 }
"front_foot_bend1": { "x": 22.86, "y": 20.24, "rotation": 45.32, "width": 128, "height": 70 },
"front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 }
},
"front_shin": {
"front_shin": { "x": 60.91, "y": -3.9, "rotation": 96.58, "width": 82, "height": 184 }
"front_shin": { "x": 60.92, "y": -3.9, "rotation": 96.59, "width": 82, "height": 184 }
},
"front_thigh": {
"front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 }
},
"front_upper_arm": {
"front_upper_arm": { "x": 28.29, "y": 7.36, "rotation": 97.88, "width": 54, "height": 97 }
"front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 }
},
"goggles": {
"goggles": {
"type": "mesh",
"uvs": [ 0.53653, 0.04112, 0.72921, 0.16034, 0.91666, 0.33221, 0.97045, 0.31328, 1, 0.48052, 0.95754, 0.57328, 0.88824, 0.63279, 0.86877, 0.78961, 0.77403, 0.86748, 0.72627, 1, 0.60712, 0.93861, 0.49599, 0.88138, 0.41556, 0.75025, 0.32547, 0.70083, 0.2782, 0.58256, 0.17208, 0.6328, 0.17227, 0.75071, 0.10779, 0.79896, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15422, 0.10733, 0.23164, 0.13993, 0.30313, 0.02256, 0.34801, 0, 0.42978, 0.69182, 0.39474, 0.51041, 0.39487, 0.3151, 0.45877, 0.23196, 0.56501, 0.28108, 0.69959, 0.39215, 0.82038, 0.54202, 0.85737, 0.62342, 0.91106, 0.51406, 0.72637, 0.32146, 0.58762, 0.19608, 0.48074, 0.11268, 0.37821, 0.055, 0.32868, 0.17866, 0.31898, 0.30498, 0.36035, 0.53798, 0.40327, 0.70072, 0.30057, 0.55836, 0.21955, 0.2815, 0.09962, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51183, 0.52091, 0.67018, 0.59302, 0.7619, 0.68573, 0.73295, 0.43353 ],
"uvs": [ 0.53653, 0.04113, 0.72921, 0.16035, 0.91666, 0.33222, 0.97046, 0.31329, 1, 0.48053, 0.95755, 0.57329, 0.88825, 0.63279, 0.86877, 0.78962, 0.77403, 0.86749, 0.72628, 1, 0.60713, 0.93862, 0.496, 0.88138, 0.41557, 0.75026, 0.32547, 0.70084, 0.2782, 0.58256, 0.17209, 0.63281, 0.17228, 0.75071, 0.1078, 0.79897, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15423, 0.10733, 0.23165, 0.13994, 0.30313, 0.02256, 0.34802, 0, 0.42978, 0.69183, 0.39475, 0.51041, 0.39488, 0.31511, 0.45878, 0.23197, 0.56501, 0.28108, 0.6996, 0.39216, 0.82039, 0.54203, 0.85737, 0.62342, 0.91107, 0.51407, 0.72638, 0.32146, 0.58763, 0.19609, 0.48074, 0.11268, 0.37822, 0.05501, 0.32869, 0.17866, 0.31899, 0.30499, 0.36035, 0.53798, 0.40327, 0.70072, 0.30058, 0.55837, 0.21956, 0.2815, 0.09963, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51184, 0.52092, 0.67018, 0.59303, 0.7619, 0.68574, 0.73296, 0.43354 ],
"triangles": [ 49, 8, 48, 9, 48, 8, 12, 25, 11, 48, 9, 10, 47, 48, 10, 47, 10, 25, 25, 10, 11, 8, 49, 7, 17, 15, 16, 17, 18, 15, 49, 32, 7, 7, 32, 6, 41, 42, 40, 12, 41, 25, 41, 12, 42, 13, 14, 42, 12, 13, 42, 41, 40, 25, 40, 26, 25, 25, 26, 47, 49, 31, 32, 31, 49, 50, 18, 44, 15, 42, 14, 44, 14, 15, 44, 5, 6, 33, 6, 32, 33, 32, 31, 33, 47, 45, 48, 49, 48, 50, 50, 45, 30, 50, 48, 45, 42, 44, 43, 5, 33, 4, 42, 39, 40, 42, 43, 39, 31, 50, 33, 40, 39, 26, 45, 47, 46, 33, 2, 4, 2, 33, 34, 47, 26, 46, 26, 27, 46, 26, 39, 27, 2, 3, 4, 30, 45, 29, 30, 34, 50, 33, 50, 34, 45, 46, 29, 30, 29, 34, 27, 28, 46, 46, 28, 29, 18, 19, 44, 29, 35, 34, 2, 34, 1, 34, 35, 1, 28, 27, 38, 27, 39, 38, 39, 43, 38, 44, 19, 21, 44, 21, 43, 21, 19, 20, 43, 22, 38, 43, 21, 22, 29, 28, 35, 28, 36, 35, 28, 38, 36, 36, 0, 35, 35, 0, 1, 22, 23, 38, 38, 37, 36, 37, 23, 24, 37, 38, 23, 36, 37, 0, 37, 24, 0 ],
"vertices": [ 172.08, 22.79999, 170.08, -31.19, 159.41, -86.8, 167.02, -99, 143.38998, -115.48, 125.19, -110.12999, 109.87, -96.33999, 83.62999, -100.19, 63.25, -81.15, 38.36, -76.69, 37.65, -43.97, 37, -13.47, 50.56, 13.52999, 50.5, 38.45, 64.94, 56.59, 47.88, 79.94, 29.45, 73.41, 16.29999, 86.62, 81.5, 139.38, 112.55, 150.27998, 126.97, 134.97, 128.63, 113.26999, 130.22, 92.43, 154.77998, 81.29, 162.21, 71.48, 60.95, 13.26, 86.33, 31.87, 116.91, 42.59, 135.47, 31.44, 136.97, 2.56999, 131.22, -36.65, 118.22, -74.65, 108.68, -88.23, 130.44, -95.43, 144.61, -39.36, 152.24, 1.69, 156.05, 32.59, 156.21, 61, 132.55, 66.4, 111.94, 61.83, 79.01999, 38.83, 57.27, 19.29, 70.66, 52.40999, 107.01, 87.61, 95.37999, 116.69, 112.91, -6.86, 116.41, 15.8, 94.80999, 2.47, 97.23, -40.47, 90.66, -68.16, 127.62999, -47.15 ],
"vertices": [ 172.08, 22.81, 170.09, -31.19, 159.41, -86.8, 167.03, -99, 143.4, -115.48, 125.2, -110.14, 109.88, -96.35, 83.64, -100.19, 63.25, -81.15, 38.37, -76.69, 37.66, -43.98, 37.01, -13.47, 50.57, 13.54, 50.51, 38.45, 64.94, 56.6, 47.89, 79.95, 29.45, 73.42, 16.31, 86.63, 81.5, 139.38, 112.55, 150.29, 126.97, 134.97, 128.63, 113.28, 130.22, 92.43, 154.79, 81.29, 162.21, 71.48, 60.96, 13.26, 86.33, 31.87, 116.92, 42.6, 135.47, 31.44, 136.98, 2.58, 131.23, -36.66, 118.22, -74.65, 108.68, -88.23, 130.45, -95.43, 144.62, -39.36, 152.24, 1.69, 156.05, 32.6, 156.21, 61.01, 132.56, 66.4, 111.94, 61.83, 79.03, 38.83, 57.27, 19.3, 70.67, 52.42, 107.01, 87.61, 95.39, 116.7, 112.91, -6.87, 116.41, 15.8, 94.82, 2.47, 97.23, -40.47, 90.66, -68.16, 127.64, -47.15 ],
"hull": 25,
"edges": [ 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 36, 38, 40, 38, 24, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 62, 64, 64, 12, 8, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 24, 24, 84, 84, 86, 86, 44, 40, 42, 42, 44, 42, 88, 88, 30, 58, 90, 90, 92, 92, 94, 18, 20, 20, 22, 94, 20, 18, 96, 96, 98, 60, 100, 100, 62, 98, 100 ],
"width": 261,
@ -209,14 +202,14 @@
}
},
"gun": {
"gun": { "x": 77.3, "y": 16.39, "rotation": 60.81, "width": 210, "height": 203 }
"gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 }
},
"head": {
"head": {
"type": "mesh",
"uvs": [ 0.75918, 0.06106, 0.88392, 0.17892, 0.90174, 0.30856, 0.94222, 0.1966, 1, 0.26583, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51332, 0.85957, 0.53469, 0.78387, 0.65605, 0.74383, 0.74838, 0.85114, 0.75151, 0.84828, 0.82563, 0.81779, 0.85367, 0.75598, 0.85905, 0.76235, 0.90467, 0.65874, 1, 0.38335, 1, 0.18579, 0.85403, 0.1274, 0.81089, 0.06024, 0.69208, 0, 0.58551, 0, 0.41021, 0.08528, 0.2069, 0.24243, 0.14504, 0.49998, 0.14208, 0.50322, 0.07433, 0.41738, 0, 0.57612, 0, 0.85058, 0.36085, 0.7343, 0.43206, 0.6848, 0.3127, 0.72163, 0.16717, 0.55931, 0.04152, 0.44762, 0.22893, 0.23925, 0.26559, 0.71271, 0.44034, 0.56992, 0.38299, 0.41677, 0.33509, 0.29298, 0.31496, 0.70801, 0.44501, 0.56676, 0.38975, 0.41519, 0.34415, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73461, 0.2646, 0.65674, 0.21413, 0.61583, 0.14611, 0.62193, 0.10315, 0.66636, 0.10356, 0.72556, 0.14505, 0.79163, 0.20262, 0.81354, 0.27871, 0.80158, 0.34946, 0.7376, 0.23072, 0.57072, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.7968 ],
"uvs": [ 0.75918, 0.06107, 0.88392, 0.17892, 0.90174, 0.30856, 0.94223, 0.1966, 1, 0.26584, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51333, 0.85957, 0.53469, 0.78388, 0.65605, 0.74384, 0.74838, 0.85115, 0.75151, 0.84828, 0.82563, 0.8178, 0.85367, 0.75598, 0.85906, 0.76236, 0.90467, 0.65875, 1, 0.38336, 1, 0.18579, 0.85403, 0.12741, 0.8109, 0.06024, 0.69209, 0, 0.58551, 0, 0.41021, 0.08529, 0.20691, 0.24243, 0.14504, 0.49999, 0.14209, 0.50323, 0.07433, 0.41738, 0, 0.57613, 0, 0.85059, 0.36086, 0.73431, 0.43206, 0.6848, 0.3127, 0.72164, 0.16717, 0.55931, 0.04153, 0.44763, 0.22894, 0.23925, 0.26559, 0.71271, 0.44035, 0.56992, 0.38299, 0.41678, 0.3351, 0.29299, 0.31496, 0.70801, 0.44501, 0.56676, 0.38976, 0.4152, 0.34416, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73462, 0.2646, 0.65674, 0.21414, 0.61583, 0.14612, 0.62193, 0.10315, 0.66636, 0.10357, 0.72556, 0.14505, 0.79163, 0.20263, 0.81355, 0.27872, 0.80158, 0.34946, 0.7376, 0.23073, 0.57073, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.79681 ],
"triangles": [ 16, 58, 15, 16, 59, 58, 59, 16, 60, 18, 57, 17, 57, 54, 17, 16, 17, 60, 17, 54, 60, 58, 14, 15, 58, 59, 14, 59, 60, 14, 60, 10, 14, 14, 10, 13, 18, 53, 57, 18, 52, 53, 19, 51, 18, 18, 51, 52, 13, 10, 12, 12, 10, 11, 53, 52, 45, 57, 45, 54, 57, 53, 45, 20, 50, 19, 46, 45, 52, 47, 46, 50, 50, 48, 47, 19, 50, 51, 46, 52, 51, 54, 41, 60, 10, 60, 9, 60, 41, 40, 46, 51, 50, 9, 60, 40, 55, 42, 41, 54, 55, 41, 46, 54, 45, 20, 49, 50, 50, 49, 48, 20, 56, 49, 20, 21, 56, 49, 56, 48, 47, 55, 46, 42, 55, 43, 55, 54, 46, 9, 40, 8, 47, 48, 55, 55, 48, 56, 55, 56, 22, 56, 21, 22, 55, 22, 43, 8, 44, 7, 40, 36, 8, 8, 36, 44, 7, 44, 6, 41, 37, 40, 40, 37, 36, 43, 22, 39, 22, 23, 35, 41, 42, 38, 43, 39, 42, 42, 39, 38, 38, 39, 34, 39, 22, 35, 39, 35, 34, 35, 24, 34, 35, 23, 24, 34, 24, 25, 36, 30, 44, 44, 30, 6, 30, 29, 6, 30, 36, 31, 36, 37, 31, 30, 31, 29, 37, 41, 38, 31, 37, 34, 31, 32, 29, 37, 38, 34, 34, 25, 31, 2, 32, 1, 31, 25, 32, 33, 32, 25, 33, 25, 26, 32, 0, 1, 32, 33, 0, 0, 33, 28, 26, 27, 33, 33, 27, 28, 6, 29, 5, 29, 2, 5, 2, 4, 5, 2, 29, 32, 2, 3, 4 ],
"vertices": [ 1, 32, 41.97, -41.79, 1, 3, 30, 73.44999, 27.54, 0.18925, 32, -5.75, -51.7, 0.72417, 31, 112.98, -11.43, 0.08656, 3, 30, 38.22, 10.97, 0.84284, 32, -41, -35.22, 0.09705, 31, 92.72, -44.65999, 0.0601, 1, 30, 73.33999, 10.89, 1, 1, 30, 58.59, -10.38, 1, 2, 30, 14.35, -24.79, 0.89741, 29, 75.48, -4.55, 0.10256, 2, 30, -2.69, -18.55999, 0.58265, 29, 59.81, -13.72, 0.41734, 1, 28, 163.05, -108.68, 1, 1, 28, 151.52, -95.04, 1, 1, 28, 110.58999, -87.69, 1, 1, 28, 81.05, -86.58, 1, 1, 28, 89.8, -114.30999, 1, 1, 28, 68.72, -120.91, 1, 1, 28, 58.09, -115.87999, 1, 1, 28, 51.02, -100.62, 1, 1, 28, 38.77, -106.76, 1, 1, 28, 2.67, -89.69, 1, 1, 28, -22.05999, -19.29, 1, 1, 28, 1.19, 45.61, 1, 1, 28, 8.06, 64.8, 1, 1, 28, 35.43, 93.72, 1, 1, 28, 59.97, 119.66, 1, 1, 28, 109.25, 136.97, 1, 1, 28, 174.07, 135.27, 1, 2, 31, -16.79, 104.62, 0.16235, 28, 205.58, 101.22, 0.83762, 2, 32, 58.93, 30.5, 0.60734, 31, 38.36, 61.88, 0.39263, 2, 32, 75.55, 19, 0.94502, 31, 51.61, 77.15, 0.05496, 1, 32, 106.69, 26.88999, 1, 1, 32, 83.76999, -9.5, 1, 4, 30, 19.12, 19.31999, 0.58066, 32, -46.81, -15.18, 0.07453, 31, 72.16, -48.24, 0.14877, 29, 44.52, 27.22999, 0.196, 2, 31, 34.31, -45.24, 0.20795, 29, 7.42, 19.06999, 0.79202, 1, 31, 45.93, -9.06, 1, 1, 32, 20.62, -16.35, 1, 1, 32, 75.73, 0.93, 1, 3, 32, 44.58, 56.29, 0.14948, 31, 11.14999, 50.45, 0.36829, 28, 200.44, 40.47, 0.48219, 1, 28, 171.41, 90.11, 1, 2, 31, 28.19, -43.54, 0.20795, 29, 1.07, 18.93, 0.79202, 3, 31, 8.52999, -6.07, 0.75382, 29, -28.62, 49.02, 0.13132, 28, 168.13, -6.01, 0.11484, 2, 31, -15.06, 30.88999, 0.72898, 28, 167.82, 37.86, 0.27101, 1, 28, 162.36, 71.5, 1, 1, 28, 163.1, -47.43, 1, 1, 28, 165.94, -5.86, 1, 1, 28, 165.13, 37.36, 1, 1, 28, 157.6, 71.37999, 1, 1, 28, 163.5, -99.51999, 1, 1, 28, 45.36, 27.22999, 1, 1, 28, 63.72, 44.97, 1, 1, 28, 70.69, 61.90999, 1, 1, 28, 62.86, 78.69, 1, 1, 28, 46.52, 85.3, 1, 1, 28, 29.92, 79.33, 1, 1, 28, 15.06, 62.2, 1, 1, 28, 14.09, 45.31, 1, 1, 28, 24.29, 27.04, 1, 1, 28, 48.63, 15.27999, 1, 1, 28, 84.87, 62.13, 1, 1, 28, 61.9, 94.83, 1, 1, 28, 22.54, 21.87, 1, 1, 28, 43.13, -95.94, 1, 1, 28, 41.77, -87.23, 1, 1, 28, 60.04, -70.33999, 1 ],
"vertices": [ 1, 32, 41.97, -41.79, 1, 3, 30, 73.46, 27.54, 0.18925, 32, -5.75, -51.7, 0.72419, 31, 112.98, -11.43, 0.08656, 3, 30, 38.23, 10.98, 0.84284, 32, -41.01, -35.22, 0.09706, 31, 92.72, -44.67, 0.0601, 1, 30, 73.35, 10.89, 1, 1, 30, 58.59, -10.38, 1, 2, 30, 14.35, -24.8, 0.89743, 29, 75.49, -4.55, 0.10257, 2, 30, -2.69, -18.57, 0.58266, 29, 59.82, -13.72, 0.41734, 1, 28, 163.06, -108.68, 1, 1, 28, 151.52, -95.04, 1, 1, 28, 110.6, -87.69, 1, 1, 28, 81.05, -86.58, 1, 1, 28, 89.81, -114.32, 1, 1, 28, 68.72, -120.91, 1, 1, 28, 58.1, -115.89, 1, 1, 28, 51.03, -100.62, 1, 1, 28, 38.78, -106.76, 1, 1, 28, 2.67, -89.69, 1, 1, 28, -22.07, -19.3, 1, 1, 28, 1.19, 45.62, 1, 1, 28, 8.07, 64.81, 1, 1, 28, 35.43, 93.72, 1, 1, 28, 59.98, 119.66, 1, 1, 28, 109.25, 136.98, 1, 1, 28, 174.07, 135.27, 1, 2, 31, -16.8, 104.63, 0.16236, 28, 205.58, 101.22, 0.83764, 2, 32, 58.93, 30.5, 0.60735, 31, 38.37, 61.89, 0.39265, 2, 32, 75.55, 19, 0.94503, 31, 51.62, 77.15, 0.05497, 1, 32, 106.69, 26.9, 1, 1, 32, 83.78, -9.5, 1, 4, 30, 19.12, 19.33, 0.58067, 32, -46.82, -15.19, 0.07454, 31, 72.17, -48.24, 0.14877, 29, 44.52, 27.24, 0.19601, 2, 31, 34.31, -45.24, 0.20797, 29, 7.42, 19.08, 0.79203, 1, 31, 45.94, -9.06, 1, 1, 32, 20.62, -16.35, 1, 1, 32, 75.73, 0.94, 1, 3, 32, 44.58, 56.29, 0.14949, 31, 11.16, 50.46, 0.3683, 28, 200.44, 40.47, 0.4822, 1, 28, 171.41, 90.11, 1, 2, 31, 28.19, -43.54, 0.20797, 29, 1.07, 18.93, 0.79203, 3, 31, 8.54, -6.08, 0.75383, 29, -28.63, 49.03, 0.13133, 28, 168.13, -6.01, 0.11484, 2, 31, -15.06, 30.9, 0.72899, 28, 167.82, 37.86, 0.27101, 1, 28, 162.36, 71.5, 1, 1, 28, 163.1, -47.44, 1, 1, 28, 165.94, -5.87, 1, 1, 28, 165.14, 37.37, 1, 1, 28, 157.6, 71.39, 1, 1, 28, 163.5, -99.53, 1, 1, 28, 45.37, 27.24, 1, 1, 28, 63.73, 44.98, 1, 1, 28, 70.7, 61.92, 1, 1, 28, 62.87, 78.7, 1, 1, 28, 46.52, 85.3, 1, 1, 28, 29.92, 79.34, 1, 1, 28, 15.07, 62.21, 1, 1, 28, 14.09, 45.32, 1, 1, 28, 24.29, 27.05, 1, 1, 28, 48.63, 15.29, 1, 1, 28, 84.87, 62.14, 1, 1, 28, 61.9, 94.83, 1, 1, 28, 22.54, 21.87, 1, 1, 28, 43.14, -95.94, 1, 1, 28, 41.77, -87.23, 1, 1, 28, 60.05, -70.35, 1 ],
"hull": 29,
"edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 56, 54, 56, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 42, 44, 32, 34, 4, 58, 58, 60, 62, 64, 64, 66, 66, 54, 50, 68, 68, 70, 70, 44, 60, 72, 62, 74, 72, 74, 74, 76, 76, 78, 78, 44, 16, 80, 80, 82, 82, 84, 84, 86, 86, 44, 14, 88, 88, 72, 14, 16, 10, 12, 12, 14, 12, 60, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 90, 108, 110, 110, 112, 38, 40, 40, 42, 112, 40, 34, 36, 36, 38, 36, 114, 114, 108, 30, 32, 30, 28, 24, 26, 28, 26, 22, 24, 22, 20, 20, 18, 18, 16, 28, 116, 116, 118, 118, 120, 120, 20 ],
"width": 271,
@ -227,76 +220,76 @@
"head": {
"type": "boundingbox",
"vertexCount": 6,
"vertices": [ -19.13999, -70.3, 40.79999, -118.06999, 257.77, -115.61, 285.16, 57.18, 120.76999, 164.95, -5.05999, 76.94 ]
"vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.62, 285.16, 57.18, 120.77, 164.95, -5.07, 76.95 ]
}
},
"hoverboard_board": {
"hoverboard_board": { "x": -11.6, "y": 25.63, "rotation": 0.17, "width": 492, "height": 152 }
"hoverboard_board": { "x": -11.61, "y": 25.64, "rotation": 0.17, "width": 492, "height": 152 }
},
"hoverboard_thruster_front": {
"hoverboard_thruster": { "y": -7.07, "width": 60, "height": 64 }
"hoverboard_thruster": { "y": -7.08, "width": 60, "height": 64 }
},
"hoverboard_thruster_rear": {
"hoverboard_thruster": { "x": 1.08, "y": -6.28, "width": 60, "height": 64 }
"hoverboard_thruster": { "x": 1.08, "y": -6.29, "width": 60, "height": 64 }
},
"hoverglow_front": {
"hoverglow_small": { "x": 2.13, "y": -2, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.15, "width": 274, "height": 75 }
},
"hoverglow_rear": {
"hoverglow_small": { "x": 1.38, "y": -2.08, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.6, "width": 274, "height": 75 }
"hoverglow_small": { "x": 1.39, "y": -2.09, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.61, "width": 274, "height": 75 }
},
"mouth": {
"mouth_grind": {
"type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
"triangles": [ 1, 3, 0, 1, 2, 3 ],
"vertices": [ 11.27, -85.87, -19.54999, 1.84, 36.09, 21.39999, 66.93, -66.3 ],
"vertices": [ 11.28, -85.88, -19.56, 1.84, 36.09, 21.41, 66.93, -66.31 ],
"hull": 4,
"edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
"width": 93,
"height": 59
},
"mouth_oooo": { "x": 23.68, "y": -32.22, "rotation": -70.62, "width": 93, "height": 59 },
"mouth_smile": { "x": 23.68, "y": -32.22, "rotation": -70.62, "width": 93, "height": 59 }
"mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 },
"mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }
},
"muzzle": {
"muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 }
},
"neck": {
"neck": { "x": 9.76, "y": -3, "rotation": -55.22, "width": 36, "height": 41 }
"neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 }
},
"rear_bracer": {
"rear_bracer": { "x": 11.14, "y": -2.2, "rotation": 66.16, "width": 56, "height": 72 }
"rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 }
},
"rear_foot": {
"rear_foot": {
"type": "mesh",
"uvs": [ 0.48368, 0.13869, 0.5199, 0.21423, 0.55098, 0.27906, 0.58837, 0.29815, 0.63488, 0.3219, 0.77341, 0.39265, 1, 0.73346, 1, 1, 0.59434, 1, 0.31159, 1, 0, 1, 0, 0.41396, 0.13629, 0, 0.41716, 0 ],
"uvs": [ 0.48368, 0.1387, 0.5199, 0.21423, 0.55099, 0.27906, 0.58838, 0.29816, 0.63488, 0.32191, 0.77342, 0.39266, 1, 0.73346, 1, 1, 0.59435, 1, 0.3116, 1, 0, 1, 0, 0.41396, 0.1363, 0, 0.41716, 0 ],
"triangles": [ 4, 8, 3, 5, 8, 4, 6, 8, 5, 8, 6, 7, 11, 1, 10, 12, 13, 0, 0, 11, 12, 1, 11, 0, 2, 9, 10, 2, 10, 1, 9, 2, 3, 8, 9, 3 ],
"vertices": [ 2, 7, 10.43999, 29.39999, 0.88823, 9, -6.73, 49.61, 0.11174, 2, 7, 16.54, 29.27, 0.83161, 9, -2.65, 45.08, 0.16834, 2, 7, 21.79, 29.13999, 0.78305, 9, 0.85, 41.18, 0.21694, 2, 7, 25.53, 31.43, 0.67843, 9, 5.07, 40.04, 0.32155, 2, 7, 30.17, 34.27, 0.5483, 9, 10.31999, 38.61, 0.45166, 2, 7, 44, 42.72, 0.16068, 9, 25.95999, 34.36, 0.83929, 1, 9, 51.56, 13.89, 1, 1, 9, 51.54, -2.07999, 1, 2, 7, 56.58, 2.98, 0.02958, 9, 5.71, -2.03999, 0.97039, 1, 7, 34.63, -20.20999, 0.99997, 1, 7, 10.43, -45.79, 0.99997, 1, 7, -15.1, -21.62999, 1, 1, 7, -22.54999, 6.61, 0.99997, 2, 7, -0.75, 29.67, 0.99219, 9, -14.25, 57.93, 0.00779 ],
"vertices": [ 2, 7, 10.45, 29.41, 0.88824, 9, -6.74, 49.62, 0.11175, 2, 7, 16.55, 29.27, 0.83163, 9, -2.65, 45.08, 0.16836, 2, 7, 21.79, 29.15, 0.78305, 9, 0.85, 41.19, 0.21694, 2, 7, 25.53, 31.43, 0.67844, 9, 5.07, 40.04, 0.32155, 2, 7, 30.17, 34.27, 0.54832, 9, 10.33, 38.61, 0.45167, 2, 7, 44.01, 42.72, 0.1607, 9, 25.97, 34.36, 0.83929, 1, 9, 51.56, 13.89, 1, 1, 9, 51.54, -2.09, 1, 2, 7, 56.58, 2.98, 0.02959, 9, 5.71, -2.05, 0.9704, 1, 7, 34.63, -20.22, 0.99999, 1, 7, 10.43, -45.8, 0.99999, 1, 7, -15.1, -21.64, 1, 1, 7, -22.56, 6.61, 0.99999, 2, 7, -0.76, 29.67, 0.99219, 9, -14.25, 57.94, 0.0078 ],
"hull": 14,
"edges": [ 14, 12, 10, 12, 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 4, 2, 2, 20, 4, 6, 6, 16, 6, 8, 8, 10, 2, 0, 0, 26 ],
"width": 113,
"height": 60
},
"rear_foot_bend1": { "x": 29.61, "y": 18.12, "rotation": 46.59, "width": 117, "height": 66 },
"rear_foot_bend2": { "x": 22.81, "y": 23.69, "rotation": 46.59, "width": 103, "height": 83 }
"rear_foot_bend2": { "x": 22.82, "y": 23.69, "rotation": 46.59, "width": 103, "height": 83 }
},
"rear_shin": {
"rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 }
},
"rear_thigh": {
"rear_thigh": { "x": 33.09, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 }
"rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 }
},
"rear_upper_arm": {
"rear_upper_arm": { "x": 21.12, "y": 4.07, "rotation": 89.31, "width": 47, "height": 87 }
"rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 }
},
"torso": {
"torso": {
"type": "mesh",
"uvs": [ 0.62509, 0.12671, 1, 0.26359, 1, 0.2887, 1, 0.66021, 1, 0.68244, 0.92322, 0.69257, 0.95115, 0.84965, 0.77122, 1, 0.49654, 1, 0.2718, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72523, 0.27834, 0.7609, 0.46215, 0.84887, 0.67962, 0.68256, 0.63248, 0.53984, 0.38468, 0.25442, 0.32168, 0.30061, 0.55172, 0.39552, 0.79505, 0.26388, 0.17005, 0.52408, 0.18672 ],
"uvs": [ 0.62509, 0.12672, 1, 0.2636, 1, 0.2887, 1, 0.66021, 1, 0.68245, 0.92323, 0.69258, 0.95115, 0.84965, 0.77123, 1, 0.49654, 1, 0.27181, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72524, 0.27835, 0.76091, 0.46216, 0.84888, 0.67962, 0.68257, 0.63249, 0.53985, 0.38469, 0.25443, 0.32169, 0.30062, 0.55173, 0.39552, 0.79506, 0.26389, 0.17006, 0.52409, 0.18673 ],
"triangles": [ 6, 17, 5, 6, 7, 17, 8, 18, 7, 7, 18, 17, 9, 22, 8, 8, 22, 18, 9, 10, 22, 10, 21, 22, 22, 21, 18, 10, 11, 21, 4, 5, 3, 5, 17, 3, 3, 17, 16, 17, 18, 16, 16, 2, 3, 21, 19, 18, 18, 19, 16, 11, 20, 21, 21, 20, 19, 19, 15, 16, 16, 15, 2, 11, 12, 20, 20, 24, 19, 19, 24, 15, 20, 23, 24, 20, 12, 23, 15, 1, 2, 24, 0, 15, 15, 0, 1, 12, 13, 23, 0, 24, 14, 14, 24, 13, 24, 23, 13 ],
"vertices": [ 129.61, -10.38, 102.16, -45.06, 97.66, -44.7, 31, -39.45, 27.01, -39.13, 25.78, -31.47999, -2.59999, -31.97999, -28.2, -12.27999, -26.06999, 14.52999, -24.34, 36.5, 17.59, 46.29, 75.33, 55.34, 122.3, 51.63, 156.07, 34.75, 155.02998, 21.70999, 101.62999, -18.02, 68.37, -18.88999, 28.68, -24.39999, 38.40999, -8.81999, 83.98, 1.59, 97.5, 28.56999, 55.86, 27.31999, 11.47, 21.51, 124.62, 25.51, 119.62, 0.31 ],
"vertices": [ 129.62, -10.38, 102.17, -45.07, 97.66, -44.71, 31, -39.45, 27.01, -39.13, 25.78, -31.49, -2.61, -31.99, -28.2, -12.29, -26.08, 14.54, -24.34, 36.5, 17.59, 46.3, 75.33, 55.34, 122.31, 51.63, 156.07, 34.75, 155.04, 21.72, 101.64, -18.02, 68.38, -18.9, 28.68, -24.41, 38.42, -8.83, 83.99, 1.59, 97.5, 28.58, 55.86, 27.33, 11.47, 21.51, 124.63, 25.51, 119.63, 0.32 ],
"hull": 15,
"edges": [ 14, 12, 12, 10, 10, 8, 18, 20, 20, 22, 22, 24, 26, 28, 24, 26, 2, 4, 30, 4, 30, 32, 32, 34, 4, 6, 6, 8, 34, 6, 34, 36, 36, 38, 38, 40, 40, 24, 36, 14, 40, 42, 42, 44, 14, 16, 16, 18, 44, 16, 40, 46, 38, 48, 48, 30, 2, 0, 0, 28, 48, 0, 48, 26 ],
"width": 98,
@ -327,7 +320,7 @@
"curve": [ 0.25, 0, 0.75, 1 ]
},
{
"time": 0.5666,
"time": 0.5667,
"color": "ffffffb0",
"curve": [ 0.25, 0, 0.75, 1 ]
},
@ -347,7 +340,7 @@
"curve": [ 0.25, 0, 0.75, 1 ]
},
{
"time": 0.5666,
"time": 0.5667,
"color": "ffffffb0",
"curve": [ 0.25, 0, 0.75, 1 ]
},
@ -389,29 +382,29 @@
"translate": [
{
"time": 0,
"x": 4.72,
"y": -29.18,
"x": 4.73,
"y": -29.19,
"curve": [ 0.155, 0.18, 0.75, 1 ]
},
{
"time": 0.1,
"x": 4.72,
"y": -34.45,
"x": 4.73,
"y": -34.46,
"curve": [ 0.191, -0.39, 0.719, 1 ]
},
{
"time": 0.4333,
"x": 23.48,
"y": 14.72,
"curve": [ 0.311, 0.02, 0.795, 0.98 ]
"x": 23.49,
"y": 14.73,
"curve": [ 0.311, 0.02, 0.796, 0.98 ]
},
{
"time": 0.8333,
"x": 71.9,
"y": 28.45,
"curve": [ 0.319, 0, 0.824, 0.84 ]
"y": 28.46,
"curve": [ 0.32, 0.01, 0.824, 0.84 ]
},
{ "time": 1.3333, "x": 4.72, "y": -29.18 }
{ "time": 1.3333, "x": 4.73, "y": -29.19 }
]
},
"torso": {
@ -419,15 +412,15 @@
{
"time": 0,
"angle": -5.34,
"curve": [ 0.247, 0, 0.629, 0.52 ]
"curve": [ 0.248, 0, 0.629, 0.52 ]
},
{
"time": 0.3,
"angle": -4.14,
"curve": [ 0.221, 0.11, 0.747, 1 ]
"curve": [ 0.221, 0.12, 0.747, 1 ]
},
{
"time": 0.6999,
"time": 0.7,
"angle": 22.54,
"curve": [ 0.25, 0, 0.75, 1 ]
},
@ -447,16 +440,16 @@
},
{
"time": 0.3,
"angle": -1.58,
"curve": [ 0.45, 0, 0.75, 1 ]
"angle": -1.59,
"curve": [ 0.451, 0, 0.75, 1 ]
},
{
"time": 0.6999,
"time": 0.7,
"angle": -12.82,
"curve": [ 0.25, 0, 0.625, 0.5 ]
},
{
"time": 1.0666,
"time": 1.0667,
"angle": -6.71,
"curve": [ 0.375, 0.5, 0.75, 1 ]
},
@ -469,11 +462,11 @@
},
"head": {
"rotate": [
{ "time": 0, "angle": 8.04 },
{ "time": 0.3, "angle": -1.58 },
{ "time": 0.6999, "angle": -12.82 },
{ "time": 1.0666, "angle": 3.26 },
{ "time": 1.3333, "angle": 8.04 }
{ "time": 0, "angle": 8.05 },
{ "time": 0.3, "angle": -1.59 },
{ "time": 0.7, "angle": -12.82 },
{ "time": 1.0667, "angle": 3.27 },
{ "time": 1.3333, "angle": 8.05 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
@ -483,14 +476,14 @@
"hair1": {
"rotate": [
{ "time": 0, "angle": 6.48 },
{ "time": 0.1333, "angle": 7.25 },
{ "time": 0.2666, "angle": 3.81 },
{ "time": 0.3666, "angle": 5.38 },
{ "time": 0.4666, "angle": 4.42 },
{ "time": 0.6333, "angle": 0.75 },
{ "time": 0.1333, "angle": 7.26 },
{ "time": 0.2667, "angle": 3.82 },
{ "time": 0.3667, "angle": 5.39 },
{ "time": 0.4667, "angle": 4.43 },
{ "time": 0.6333, "angle": 0.76 },
{ "time": 0.8, "angle": 0.58 },
{ "time": 0.8999, "angle": 3.76 },
{ "time": 1.0666, "angle": 4.09 },
{ "time": 0.9, "angle": 3.76 },
{ "time": 1.0667, "angle": 4.1 },
{ "time": 1.2333, "angle": 7.48 },
{ "time": 1.3333, "angle": 6.48 }
],
@ -503,13 +496,13 @@
"rotate": [
{ "time": 0, "angle": 9.46 },
{ "time": 0.1333, "angle": 10.24 },
{ "time": 0.2666, "angle": 6.79 },
{ "time": 0.3666, "angle": 8.36 },
{ "time": 0.4666, "angle": 7.41 },
{ "time": 0.6333, "angle": 3.73 },
{ "time": 0.2667, "angle": 6.8 },
{ "time": 0.3667, "angle": 8.37 },
{ "time": 0.4667, "angle": 7.41 },
{ "time": 0.6333, "angle": 3.74 },
{ "time": 0.8, "angle": 3.56 },
{ "time": 0.8999, "angle": 6.74 },
{ "time": 1.0666, "angle": 7.07 },
{ "time": 0.9, "angle": 6.75 },
{ "time": 1.0667, "angle": 7.08 },
{ "time": 1.2333, "angle": 10.46 },
{ "time": 1.3333, "angle": 9.46 }
],
@ -521,14 +514,14 @@
"hair2": {
"rotate": [
{ "time": 0, "angle": -0.25 },
{ "time": 0.1333, "angle": 6.78 },
{ "time": 0.2666, "angle": 9.6 },
{ "time": 0.3666, "angle": 15.86 },
{ "time": 0.4666, "angle": 19.6 },
{ "time": 0.1333, "angle": 6.79 },
{ "time": 0.2667, "angle": 9.6 },
{ "time": 0.3667, "angle": 15.87 },
{ "time": 0.4667, "angle": 19.6 },
{ "time": 0.6333, "angle": 3.35 },
{ "time": 0.8, "angle": -9.4 },
{ "time": 0.8999, "angle": -5.61 },
{ "time": 1.0666, "angle": -4.26 },
{ "time": 0.9, "angle": -5.61 },
{ "time": 1.0667, "angle": -4.26 },
{ "time": 1.2333, "angle": 0.14 },
{ "time": 1.3333, "angle": -0.25 }
],
@ -541,15 +534,15 @@
"rotate": [
{ "time": 0, "angle": 6.9 },
{ "time": 0.1333, "angle": 7.86 },
{ "time": 0.2333, "angle": 5.54 },
{ "time": 0.3666, "angle": 11.19 },
{ "time": 0.2333, "angle": 5.55 },
{ "time": 0.3667, "angle": 11.19 },
{ "time": 0.5, "angle": 12.62 },
{ "time": 0.6, "angle": 17.84 },
{ "time": 0.6999, "angle": 20.53 },
{ "time": 0.8666, "angle": 11.84 },
{ "time": 0.7, "angle": 20.54 },
{ "time": 0.8667, "angle": 11.84 },
{ "time": 1.0333, "angle": 6.65 },
{ "time": 1.1333, "angle": 8.52 },
{ "time": 1.2999, "angle": 6.66 },
{ "time": 1.3, "angle": 6.66 },
{ "time": 1.3333, "angle": 6.9 }
],
"translate": [
@ -562,12 +555,12 @@
"rotate": [
{
"time": 0,
"angle": 24.72,
"curve": [ 0.259, 0, 0.618, 0.44 ]
"angle": 24.73,
"curve": [ 0.259, 0, 0.618, 0.45 ]
},
{
"time": 0.4,
"angle": 35.93,
"angle": 35.94,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{
@ -576,11 +569,11 @@
"curve": [ 0.25, 0, 0.75, 1 ]
},
{
"time": 1.1666,
"angle": 31.47,
"time": 1.1667,
"angle": 31.48,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "angle": 24.72 }
{ "time": 1.3333, "angle": 24.73 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
@ -592,12 +585,12 @@
{
"time": 0,
"angle": 0,
"curve": [ 0.257, 0, 0.618, 0.45 ]
"curve": [ 0.258, 0, 0.619, 0.45 ]
},
{
"time": 0.3333,
"angle": 15.41,
"curve": [ 0.195, 0.35, 0.75, 1 ]
"angle": 15.42,
"curve": [ 0.196, 0.35, 0.75, 1 ]
},
{
"time": 0.8333,
@ -609,23 +602,23 @@
"translate": [
{
"time": 0,
"x": 25.22,
"y": 7.84,
"curve": [ 0.553, 0.02, 0.75, 1 ]
"x": 25.23,
"y": 7.85,
"curve": [ 0.554, 0.02, 0.75, 1 ]
},
{
"time": 0.5,
"x": 67.8,
"y": 62.57,
"curve": [ 0.246, 0, 0.737, 1 ]
"y": 62.58,
"curve": [ 0.247, 0, 0.737, 1 ]
},
{ "time": 1.3333, "x": 25.22, "y": 7.84 }
{ "time": 1.3333, "x": 25.23, "y": 7.85 }
]
},
"front_foot_ik": {
"rotate": [
{ "time": 0, "angle": -22.24 },
{ "time": 0.5, "angle": 9.33 },
{ "time": 0.5, "angle": 9.34 },
{ "time": 1.3333, "angle": -22.24 }
],
"translate": [
@ -755,8 +748,8 @@
"rotate": [
{ "time": 0, "angle": -6.56 },
{
"time": 0.6999,
"angle": -45.47,
"time": 0.7,
"angle": -45.48,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "angle": -6.56 }
@ -770,8 +763,8 @@
},
{
"time": 0.4333,
"x": 4.01,
"y": 1.45,
"x": 4.02,
"y": 1.46,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "x": 0, "y": 0 }
@ -806,7 +799,7 @@
},
{
"time": 0.8,
"angle": -22.48,
"angle": -22.49,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "angle": 0 }
@ -821,16 +814,16 @@
{
"time": 0,
"angle": 53,
"curve": [ 0.259, 0, 0.618, 0.44 ]
"curve": [ 0.259, 0, 0.618, 0.45 ]
},
{
"time": 0.6999,
"angle": 27.8,
"time": 0.7,
"angle": 27.81,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{
"time": 1,
"angle": 56.88,
"angle": 56.89,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "angle": 53 }
@ -855,7 +848,7 @@
{ "time": 0, "angle": 0 },
{
"time": 0.8,
"angle": 16.99,
"angle": 17,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "angle": 0 }
@ -899,15 +892,15 @@
"rotate": [
{
"time": 0,
"angle": 20.28,
"angle": 20.29,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{
"time": 0.8,
"angle": 3.84,
"angle": 3.85,
"curve": [ 0.25, 0, 0.75, 1 ]
},
{ "time": 1.3333, "angle": 20.28 }
{ "time": 1.3333, "angle": 20.29 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
@ -927,14 +920,14 @@
"hoverglow_front": {
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1, "y": 1.565 },
{ "time": 0.5, "x": 1, "y": 1.566 },
{ "time": 1.3333, "x": 1, "y": 1 }
]
},
"hoverglow_rear": {
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.5, "x": 1, "y": 1.565 },
{ "time": 0.5, "x": 1, "y": 1.566 },
{ "time": 1.3333, "x": 1, "y": 1 }
]
},
@ -942,7 +935,7 @@
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.3333, "x": 1.597, "y": 1 },
{ "time": 0.5666, "x": 1.223, "y": 1 },
{ "time": 0.5667, "x": 1.223, "y": 1 },
{ "time": 1.3333, "x": 1, "y": 1 }
]
},
@ -950,7 +943,7 @@
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.3333, "x": 1.597, "y": 1 },
{ "time": 0.5666, "x": 1.223, "y": 1 },
{ "time": 0.5667, "x": 1.223, "y": 1 },
{ "time": 1.3333, "x": 1, "y": 1 }
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,11 @@
{
"skeleton": {
"hash": "vfzL8SvUQWTNRil1kGbSbWF5R60",
"spine": "3.5.03-beta",
"width": 1680,
"height": 1782.27,
"fps": 30,
"images": "./images/"
},
"skeleton": { "hash": "/FQ62MLXDzS93xb3LzhPr1aQxX8", "spine": "3.6.05-beta", "width": 1680, "height": 1782.28, "images": "./images/" },
"bones": [
{ "name": "root", "y": -526.31 },
{ "name": "leaves", "parent": "root", "x": -0.16, "y": 1310.1 },
{ "name": "logo", "parent": "root", "y": 1332.02 },
{ "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.85, "y": -201.21 },
{ "name": "quit", "parent": "root", "x": -2.86, "y": -201.21 },
{ "name": "settings", "parent": "root", "x": 3.02, "y": -144.37 }
],
"slots": [
@ -29,7 +22,7 @@
"leaves": { "y": -28.54, "width": 1042, "height": 522 }
},
"logo": {
"logo": { "y": -20.39, "width": 917, "height": 323 }
"logo": { "y": -20.4, "width": 917, "height": 323 }
},
"play": {
"play": { "width": 218, "height": 77 }
@ -60,9 +53,9 @@
"play": {
"color": [
{ "time": 1.3333, "color": "fff99dff" },
{ "time": 1.5666, "color": "ffffffff", "curve": "stepped" },
{ "time": 1.5667, "color": "ffffffff", "curve": "stepped" },
{ "time": 1.8333, "color": "ffffffff" },
{ "time": 2.0666, "color": "fff99dff" }
{ "time": 2.0667, "color": "fff99dff" }
]
},
"quit": {
@ -73,10 +66,10 @@
},
"settings": {
"color": [
{ "time": 1.8666, "color": "fff99dff" },
{ "time": 2.0999, "color": "ffffffff", "curve": "stepped" },
{ "time": 2.3666, "color": "ffffffff" },
{ "time": 2.5999, "color": "fff99dff" }
{ "time": 1.8667, "color": "fff99dff" },
{ "time": 2.1, "color": "ffffffff", "curve": "stepped" },
{ "time": 2.3667, "color": "ffffffff" },
{ "time": 2.6, "color": "fff99dff" }
]
}
},
@ -87,39 +80,39 @@
"time": 0,
"x": 0,
"y": 40.8,
"curve": [ 0.043, 0.15, 0.344, 1.26 ]
"curve": [ 0.043, 0.15, 0.345, 1.27 ]
},
{
"time": 0.3333,
"x": 0,
"y": -597.71,
"curve": [ 0.425, 0.17, 0.591, 0.99 ]
"y": -597.72,
"curve": [ 0.425, 0.17, 0.592, 1 ]
},
{
"time": 1,
"x": 0,
"y": -583.71,
"y": -583.72,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{
"time": 1.6666,
"time": 1.6667,
"x": 0,
"y": -592.11,
"curve": [ 0.408, 0.01, 0.655, 0.98 ]
"y": -592.12,
"curve": [ 0.408, 0.01, 0.655, 0.99 ]
},
{
"time": 2.3333,
"x": 0,
"y": -583.71,
"curve": [ 0.402, 0, 0.603, 0.99 ]
"y": -583.72,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{
"time": 3,
"x": 0,
"y": -592.11,
"curve": [ 0.408, 0.01, 0.655, 0.98 ]
"y": -592.12,
"curve": [ 0.408, 0.01, 0.655, 0.99 ]
},
{ "time": 3.6666, "x": 0, "y": -583.71 }
{ "time": 3.6667, "x": 0, "y": -583.72 }
],
"scale": [
{
@ -132,61 +125,61 @@
"time": 0.3333,
"x": 1,
"y": 1,
"curve": [ 0.189, 0.37, 0.658, 0.98 ]
"curve": [ 0.19, 0.38, 0.658, 0.99 ]
},
{
"time": 1,
"x": 1.019,
"y": 1.029,
"curve": [ 0.37, 0, 0.66, 0.99 ]
"x": 1.02,
"y": 1.03,
"curve": [ 0.371, 0, 0.661, 1 ]
},
{
"time": 1.6666,
"time": 1.6667,
"x": 1,
"y": 1,
"curve": [ 0.387, 0.01, 0.686, 1 ]
"curve": [ 0.388, 0.01, 0.687, 1 ]
},
{
"time": 2.3333,
"x": 1.019,
"y": 1.029,
"curve": [ 0.37, 0, 0.66, 0.99 ]
"x": 1.02,
"y": 1.03,
"curve": [ 0.371, 0, 0.661, 1 ]
},
{
"time": 3,
"x": 1,
"y": 1,
"curve": [ 0.387, 0.01, 0.686, 1 ]
"curve": [ 0.388, 0.01, 0.687, 1 ]
},
{ "time": 3.6666, "x": 1.019, "y": 1.029 }
{ "time": 3.6667, "x": 1.02, "y": 1.03 }
]
},
"play": {
"translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" },
{
"time": 0.6666,
"time": 0.6667,
"x": 0,
"y": 0,
"curve": [ 0, 0, 0.448, 1.62 ]
"curve": [ 0, 0, 0.448, 1.63 ]
},
{ "time": 0.8666, "x": 0, "y": 480.2 }
{ "time": 0.8667, "x": 0, "y": 480.2 }
],
"scale": [
{
"time": 1.3333,
"x": 1,
"y": 1,
"curve": [ 0, 0, 0.525, 2.46 ]
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 1.5666, "x": 1.231, "y": 1.231, "curve": "stepped" },
{ "time": 1.5667, "x": 1.231, "y": 1.231, "curve": "stepped" },
{
"time": 1.8333,
"x": 1.231,
"y": 1.231,
"curve": [ 0, 0, 0.525, 2.46 ]
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.0666, "x": 1, "y": 1 }
{ "time": 2.0667, "x": 1, "y": 1 }
]
},
"settings": {
@ -195,25 +188,25 @@
"time": 0.8,
"x": 0,
"y": 0,
"curve": [ 0, 0, 0.448, 1.62 ]
"curve": [ 0, 0, 0.448, 1.63 ]
},
{ "time": 1, "x": 0, "y": 431.2 }
],
"scale": [
{
"time": 1.8666,
"time": 1.8667,
"x": 1,
"y": 1,
"curve": [ 0, 0, 0.525, 2.46 ]
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.0999, "x": 1.23, "y": 1.23, "curve": "stepped" },
{ "time": 2.1, "x": 1.23, "y": 1.23, "curve": "stepped" },
{
"time": 2.3666,
"time": 2.3667,
"x": 1.23,
"y": 1.23,
"curve": [ 0, 0, 0.525, 2.46 ]
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.5999, "x": 1, "y": 1 }
{ "time": 2.6, "x": 1, "y": 1 }
]
},
"quit": {
@ -222,7 +215,7 @@
"time": 0.9333,
"x": 0,
"y": 0,
"curve": [ 0, 0, 0.448, 1.62 ]
"curve": [ 0, 0, 0.448, 1.63 ]
},
{ "time": 1.1333, "x": 0, "y": 376.32 }
],
@ -231,7 +224,7 @@
"time": 2.4,
"x": 1,
"y": 1,
"curve": [ 0, 0, 0.525, 2.46 ]
"curve": [ 0, 0, 0.526, 2.46 ]
},
{ "time": 2.6333, "x": 1.23, "y": 1.23 }
]
@ -242,28 +235,28 @@
"time": 0,
"x": 0,
"y": 0,
"curve": [ 0.043, 0.15, 0.344, 1.26 ]
"curve": [ 0.043, 0.15, 0.345, 1.27 ]
},
{
"time": 0.3333,
"x": 0.16,
"y": -601.23,
"curve": [ 0.425, 0.17, 0.591, 0.99 ]
"x": 0.17,
"y": -601.24,
"curve": [ 0.425, 0.17, 0.592, 1 ]
},
{
"time": 1.3333,
"x": 0.16,
"y": -580.83,
"x": 0.17,
"y": -580.84,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{ "time": 2, "x": 0.16, "y": -595.11 },
{ "time": 2, "x": 0.17, "y": -595.12 },
{
"time": 2.6666,
"x": 0.16,
"y": -580.83,
"time": 2.6667,
"x": 0.17,
"y": -580.84,
"curve": [ 0.402, 0, 0.603, 1 ]
},
{ "time": 3.3333, "x": 0.16, "y": -595.11 }
{ "time": 3.3333, "x": 0.17, "y": -595.12 }
],
"scale": [
{
@ -273,9 +266,9 @@
"curve": [ 0, 0, 0.744, 0.4 ]
},
{ "time": 0.3333, "x": 1, "y": 1 },
{ "time": 1.3333, "x": 1.029, "y": 1.019 },
{ "time": 1.3333, "x": 1.03, "y": 1.02 },
{ "time": 2, "x": 1, "y": 1 },
{ "time": 2.6666, "x": 1.029, "y": 1.019 },
{ "time": 2.6667, "x": 1.03, "y": 1.02 },
{ "time": 3.3333, "x": 1, "y": 1 }
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@ -1,20 +1,13 @@
{
"skeleton": {
"hash": "i05EldfljpjLC64I/kHnNrqzJ5A",
"spine": "3.5.03-beta",
"width": 1333.78,
"height": 1112.91,
"fps": 30,
"images": "./images/"
},
"skeleton": { "hash": "64h+ct/Nr1wkBrgZHtYbbfXpBlI", "spine": "3.6.05-beta", "width": 1333.78, "height": 1112.91, "images": "./images/" },
"bones": [
{ "name": "root", "x": 28.68, "y": -105.7 },
{ "name": "attachment", "parent": "root", "x": -267.7, "y": -366.61 },
{ "name": "color", "parent": "root", "x": -298.29, "y": 44.09 },
{ "name": "draworder", "parent": "root", "x": 283.52, "y": -356.26 },
{ "name": "mesh", "parent": "root", "x": -320.73, "y": 413.7 },
{ "name": "meshweighted", "parent": "root", "rotation": -11.22, "x": -353.27, "y": 627.53 },
{ "name": "pathfollower", "parent": "root", "x": 177.52, "y": 56.61 },
{ "name": "root", "x": 28.68, "y": -105.71 },
{ "name": "attachment", "parent": "root", "x": -267.71, "y": -366.62 },
{ "name": "color", "parent": "root", "x": -298.3, "y": 44.1 },
{ "name": "draworder", "parent": "root", "x": 283.53, "y": -356.27 },
{ "name": "mesh", "parent": "root", "x": -320.74, "y": 413.7 },
{ "name": "meshweighted", "parent": "root", "rotation": -11.22, "x": -353.28, "y": 627.53 },
{ "name": "pathfollower", "parent": "root", "x": 177.52, "y": 56.62 },
{ "name": "rotate", "parent": "root", "x": -305, "y": 201 },
{ "name": "scale", "parent": "root", "x": 183.99, "y": -138 },
{ "name": "shear", "parent": "root", "x": -304, "y": -146 },
@ -81,7 +74,7 @@
"path": "spine",
"uvs": [ 0, 0, 0.25, 0, 0.5, 0, 0.75, 0, 1, 0, 1, 0.25, 1, 0.5, 1, 0.75, 1, 1, 0.75, 1, 0.5, 1, 0.25, 1, 0, 1, 0, 0.75, 0, 0.5, 0, 0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.75, 0.5, 0.25, 0.5, 0.5, 0.5, 0.75, 0.75, 0.25, 0.75, 0.5, 0.75, 0.75 ],
"triangles": [ 15, 0, 1, 16, 1, 2, 15, 1, 16, 19, 2, 3, 16, 2, 19, 22, 3, 4, 19, 3, 22, 22, 4, 5, 14, 15, 16, 17, 16, 19, 14, 16, 17, 20, 19, 22, 17, 19, 20, 23, 22, 5, 20, 22, 23, 23, 5, 6, 13, 14, 17, 18, 17, 20, 13, 17, 18, 21, 20, 23, 18, 20, 21, 24, 23, 6, 21, 23, 24, 24, 6, 7, 12, 13, 18, 11, 18, 21, 12, 18, 11, 10, 21, 24, 11, 21, 10, 9, 24, 7, 10, 24, 9, 9, 7, 8 ],
"vertices": [ 1, 5, -194.66, 21.29, 1, 1, 5, -102.08, 38.90999, 1, 1, 5, -9.47999, 56.54, 1, 1, 5, 83.08, 74.16, 1, 1, 5, 175.66, 91.79, 1, 1, 5, 181.27, 62.31, 1, 1, 5, 186.88, 32.84, 1, 1, 5, 192.5, 3.38, 1, 1, 5, 198.11, -26.09, 1, 1, 5, 105.51, -43.7, 1, 1, 5, 12.93, -61.33, 1, 1, 5, -79.62999, -78.94999, 1, 1, 5, -172.22, -96.58, 1, 1, 5, -177.83, -67.11, 1, 1, 5, -183.44, -37.63, 1, 1, 5, -189.05, -8.17, 1, 1, 5, -96.47, 9.43999, 1, 1, 5, -90.86, -20.01, 1, 1, 5, -85.25, -49.47, 1, 1, 5, -3.88, 27.05999, 1, 1, 5, 1.72, -2.39, 1, 1, 5, 7.32, -31.86, 1, 1, 5, 88.69, 44.68, 1, 1, 5, 94.3, 15.22, 1, 1, 5, 99.91, -14.22999, 1 ],
"vertices": [ 1, 5, -194.67, 21.29, 1, 1, 5, -102.08, 38.92, 1, 1, 5, -9.49, 56.54, 1, 1, 5, 83.09, 74.16, 1, 1, 5, 175.67, 91.79, 1, 1, 5, 181.28, 62.32, 1, 1, 5, 186.89, 32.85, 1, 1, 5, 192.5, 3.38, 1, 1, 5, 198.11, -26.09, 1, 1, 5, 105.52, -43.71, 1, 1, 5, 12.94, -61.33, 1, 1, 5, -79.64, -78.96, 1, 1, 5, -172.23, -96.58, 1, 1, 5, -177.84, -67.11, 1, 1, 5, -183.45, -37.64, 1, 1, 5, -189.06, -8.17, 1, 1, 5, -96.47, 9.45, 1, 1, 5, -90.86, -20.01, 1, 1, 5, -85.25, -49.48, 1, 1, 5, -3.88, 27.07, 1, 1, 5, 1.72, -2.39, 1, 1, 5, 7.33, -31.86, 1, 1, 5, 88.7, 44.69, 1, 1, 5, 94.31, 15.22, 1, 1, 5, 99.92, -14.24, 1 ],
"hull": 16,
"edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 0 ],
"width": 377,
@ -114,9 +107,9 @@
"images/spine": {
"type": "mesh",
"path": "spine",
"uvs": [ 1, 0.50124, 1, 1, 0.72412, 1, 0.49981, 1, 0.2858, 1, 0, 1, 0, 0.50124, 0, 0, 0.49206, 0, 1, 0, 0.56941, 0.57414, 0.84013, 0.50124, 0.6184, 0.22584, 0.20588, 0.20153, 0.19558, 0.67133, 0.39151, 0.86574, 0.3941, 0.41214, 0.3941, 0.12863, 0.7602, 0.19344, 0.76537, 0.59034, 0.74474, 0.84144, 0.57716, 0.81713 ],
"uvs": [ 1, 0.50124, 1, 1, 0.72412, 1, 0.49981, 1, 0.28581, 1, 0, 1, 0, 0.50124, 0, 0, 0.49207, 0, 1, 0, 0.56942, 0.57414, 0.84014, 0.50124, 0.61841, 0.22584, 0.20589, 0.20154, 0.19558, 0.67134, 0.39152, 0.86574, 0.3941, 0.41214, 0.3941, 0.12864, 0.76021, 0.19344, 0.76537, 0.59034, 0.74474, 0.84144, 0.57716, 0.81714 ],
"triangles": [ 17, 7, 8, 18, 8, 9, 13, 7, 17, 12, 8, 18, 17, 8, 12, 16, 17, 12, 13, 17, 16, 6, 7, 13, 6, 13, 16, 18, 9, 0, 11, 18, 0, 10, 16, 12, 12, 18, 11, 10, 12, 11, 19, 10, 11, 14, 6, 16, 14, 16, 10, 21, 10, 19, 15, 14, 10, 20, 21, 19, 21, 15, 10, 5, 6, 14, 4, 5, 14, 15, 4, 14, 3, 15, 21, 4, 15, 3, 2, 21, 20, 3, 21, 2, 19, 11, 0, 0, 20, 19, 1, 20, 0, 2, 20, 1 ],
"vertices": [ 191.41, -1.12, 191.41, -60.97, 87.4, -60.97, 2.82999, -60.97, -77.80999, -60.97, -185.58, -60.97, -185.58, -1.12, -185.58, 59.02, -0.07, 59.02, 191.41, 59.02, 29.09, -9.85, 131.13, -1.12, 47.54, 31.92, -107.94999, 34.84, -111.83999, -21.53, -37.97, -44.86, -37, 9.56, -37, 43.59, 101.01, 35.81, 102.94999, -11.81, 95.18, -41.93, 32, -39.02 ],
"vertices": [ 191.41, -1.12, 191.41, -60.97, 87.4, -60.97, 2.84, -60.97, -77.82, -60.97, -185.58, -60.97, -185.58, -1.12, -185.58, 59.02, -0.07, 59.02, 191.41, 59.02, 29.09, -9.86, 131.14, -1.12, 47.55, 31.92, -107.96, 34.84, -111.85, -21.53, -37.97, -44.86, -37, 9.57, -37, 43.59, 101.01, 35.81, 102.96, -11.81, 95.18, -41.94, 32, -39.02 ],
"hull": 10,
"edges": [ 10, 12, 12, 14, 14, 16, 16, 18, 2, 0, 0, 18, 6, 8, 8, 10, 2, 4, 4, 6 ],
"width": 377,
@ -127,9 +120,9 @@
"path": {
"type": "path",
"closed": true,
"lengths": [ 128.85, 310.24, 465.06, 600.88, 773.97 ],
"lengths": [ 128.85, 310.24, 465.06, 600.89, 773.98 ],
"vertexCount": 15,
"vertices": [ 258.07, -42.65999, 291.94, -17.53, 326.41, 7.21, 391.41, 2.75, 398.04, 46.72, 399.82, 84.05999, 274.02, 106.4, 236.69, 117.73, 199.36, 129.08, 116.55, 135.11, 84.41, 115.47, 50.34, 94.04, 56.52, 1.48, 89.01, -5.59, 122.87999, -13.56999 ]
"vertices": [ 258.08, -42.67, 291.94, -17.53, 326.41, 7.22, 391.41, 2.75, 398.05, 46.72, 399.83, 84.07, 274.03, 106.4, 236.7, 117.74, 199.37, 129.09, 116.55, 135.12, 84.41, 115.47, 50.34, 94.04, 56.53, 1.48, 89.01, -5.59, 122.89, -13.58 ]
}
}
}
@ -141,21 +134,21 @@
"color": [
{ "time": 0, "color": "ffffffff" },
{ "time": 0.4333, "color": "ff0901ff" },
{ "time": 0.8999, "color": "2dff00ff" },
{ "time": 0.9, "color": "2dff00ff" },
{ "time": 1.3333, "color": "ffffffff" }
]
},
"images/spine10": {
"attachment": [
{ "time": 0, "name": "images/spine" },
{ "time": 0.6666, "name": "images/logo" },
{ "time": 0.6667, "name": "images/logo" },
{ "time": 1.3333, "name": "images/spine" }
]
},
"images/spine12": {
"attachment": [
{ "time": 0, "name": "images/spine" },
{ "time": 0.6666, "name": "linkedmesh" }
{ "time": 0.6667, "name": "linkedmesh" }
]
}
},
@ -168,50 +161,50 @@
"y": 0,
"curve": [ 1, 0, 0, 1 ]
},
{ "time": 0.6666, "x": 96.98, "y": -151 },
{ "time": 0.6667, "x": 96.99, "y": -151 },
{ "time": 1.3333, "x": 0, "y": 0 }
]
},
"scale": {
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.6666, "x": 1, "y": 2.339 },
{ "time": 0.6667, "x": 1, "y": 2.34 },
{ "time": 1.3333, "x": 1, "y": 1 }
]
},
"rotate": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.6666, "angle": -125.33 },
{ "time": 0.6667, "angle": -125.34 },
{ "time": 1.3333, "angle": 0 }
]
},
"shear": {
"shear": [
{ "time": 0, "x": 0, "y": 0 },
{ "time": 0.6666, "x": 29.39, "y": 0 },
{ "time": 0.6667, "x": 29.4, "y": 0 },
{ "time": 1.3333, "x": 0, "y": 0 }
]
},
"transformconstrainttarget": {
"rotate": [
{ "time": 0, "angle": 0 },
{ "time": 0.6666, "angle": -74.59 },
{ "time": 0.6667, "angle": -74.6 },
{ "time": 1.3333, "angle": 0 }
],
"translate": [
{ "time": 0, "x": 0, "y": 0 },
{ "time": 0.6666, "x": 176.22, "y": -170.33 },
{ "time": 0.6667, "x": 176.22, "y": -170.34 },
{ "time": 1.3333, "x": 0, "y": 0 }
],
"scale": [
{ "time": 0, "x": 1, "y": 1 },
{ "time": 0.6666, "x": 2, "y": 2 },
{ "time": 0.6667, "x": 2, "y": 2 },
{ "time": 1.3333, "x": 1, "y": 1 }
],
"shear": [
{ "time": 0, "x": 0, "y": 0 },
{ "time": 0.6666, "x": 23.39, "y": 0 },
{ "time": 0.6667, "x": 23.4, "y": 0 },
{ "time": 1.3333, "x": 0, "y": 0 }
]
}
@ -219,7 +212,7 @@
"transform": {
"transformconstraint": [
{ "time": 0, "rotateMix": 0.509, "translateMix": 0.509, "scaleMix": 0.509, "shearMix": 0.509 },
{ "time": 0.6666 },
{ "time": 0.6667 },
{ "time": 1.3333, "rotateMix": 0.5, "translateMix": 0.5, "scaleMix": 0.5, "shearMix": 0.5 }
]
},
@ -230,11 +223,11 @@
{ "time": 1.3333, "position": 1 }
],
"spacing": [
{ "time": 0, "spacing": 40.0999 },
{ "time": 0, "spacing": 40.1 },
{ "time": 1.3333 }
],
"mix": [
{ "time": 0.6666, "rotateMix": 0.4729, "translateMix": 0.4729 },
{ "time": 0.6667, "rotateMix": 0.473, "translateMix": 0.473 },
{ "time": 1.3333 }
]
}
@ -245,8 +238,8 @@
"images/spine": [
{ "time": 0 },
{
"time": 0.6666,
"vertices": [ 43.09783, 58.11693, 0, 0, 0, 0, -0.653, -57.46398, -50.93395, -47.01593, -43.098, -24.81398, -43.098, -24.81399, -1.0E-5, 1.0E-5, 0, 1.0E-5, 43.09783, 58.11695, 0, 0, 43.09783, 58.11693, 1.0E-5, -1.0E-5, 0, 0, -43.09797, -24.81399, 0, 1.0E-5, 0, 0, 0, 0, 43.09783, 58.11694, 43.09783, 58.11693 ]
"time": 0.6667,
"vertices": [ 43.09784, 58.11694, 0, 0, 1.0E-5, 0, -0.65301, -57.46399, -50.93396, -47.01593, -43.09801, -24.81399, -43.09801, -24.814, -2.0E-5, 1.0E-5, 1.0E-5, 1.0E-5, 43.09784, 58.11695, 0, 0, 43.09784, 58.11694, 1.0E-5, -1.0E-5, -1.0E-5, 0, -43.09798, -24.81399, 0, 2.0E-5, 0, -1.0E-5, 0, 0, 43.09784, 58.11694, 43.09784, 58.11694 ]
},
{ "time": 1.3333 }
]
@ -257,16 +250,16 @@
{
"time": 0.3333,
"offset": 4,
"vertices": [ -9.45232, 83.51329, -3.90007, 44.76634, -3.90007, 44.76634, -3.90007, 44.76634, 0, 0, 0, 0, 0, 0, 0, 0, 5.15667, -29.57762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.90007, 44.76634 ]
"vertices": [ -9.45233, 83.5133, -3.90008, 44.76635, -3.90008, 44.76635, -3.90008, 44.76635, 0, 0, 0, 0, 0, 0, 0, 0, 5.15667, -29.57763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.90008, 44.76635 ]
},
{ "time": 0.6666 },
{ "time": 0.6667 },
{
"time": 0.6679,
"vertices": [ -1.21159, -14.52715, -2.76092, -7.75683, -4.30998, -0.98668, 2.38385, 9.78289, -1.56903, 5.49315, -2.93443, 6.75127, -4.3001, 8.00932, -5.66552, 9.2677, -7.031, 10.52575, -3.07855, 14.8156, 4.30986, 0.98589, 5.85906, -5.78435, 7.40825, -12.55461, 5.25317, -13.04796, 3.09832, -13.54082, 0.94322, -14.03411, -0.60594, -7.26379, 1.54907, -6.77055, 3.70422, -6.27746, -2.15495, -0.49345, 0, -3.0E-4, 2.15495, 0.49272, 1.01812, 11.04131, -0.34709, 12.29895, -1.71312, 13.557 ]
"vertices": [ -1.2116, -14.52716, -2.76092, -7.75683, -4.30999, -0.98669, 2.38385, 9.78289, -1.56903, 5.49316, -2.93444, 6.75128, -4.30011, 8.00933, -5.66552, 9.2677, -7.031, 10.52575, -3.07855, 14.81561, 4.30987, 0.9859, 5.85907, -5.78436, 7.40826, -12.55462, 5.25317, -13.04797, 3.09832, -13.54083, 0.94323, -14.03411, -0.60595, -7.26379, 1.54907, -6.77056, 3.70422, -6.27746, -2.15496, -0.49346, 0, -3.0E-4, 2.15496, 0.49273, 1.01812, 11.04132, -0.3471, 12.29895, -1.71313, 13.557 ]
},
{
"time": 1.3333,
"vertices": [ -10.57341, 25.16797, -9.16716, 14.48486, -7.76073, 3.80211, 131.25482, 21.05285, 128.23181, -0.04534, 121.51611, 0.91667, 114.80023, 1.8789, 108.08458, 2.84123, 101.36889, 3.80315, 104.39154, 24.90191, -21.3623, 2.0117, -22.76855, 12.69433, -24.17505, 23.37718, -20.7747, 23.82476, -17.37413, 24.27276, -13.97393, 24.72009, -12.56768, 14.03752, -15.96788, 13.58977, -19.36809, 13.14214, -11.16094, 3.35454, -14.56134, 2.90704, -17.96166, 2.45921, 124.53894, 22.01538, 117.82335, 22.97705, 111.10717, 23.93932 ]
"vertices": [ -10.57342, 25.16797, -9.16717, 14.48486, -7.76074, 3.80212, 131.25482, 21.05285, 128.23181, -0.04534, 121.51611, 0.91668, 114.80023, 1.8789, 108.08459, 2.84124, 101.3689, 3.80316, 104.39154, 24.90191, -21.3623, 2.01171, -22.76855, 12.69433, -24.17505, 23.37719, -20.77471, 23.82476, -17.37414, 24.27276, -13.97393, 24.72009, -12.56768, 14.03753, -15.96789, 13.58978, -19.3681, 13.14215, -11.16095, 3.35455, -14.56134, 2.90704, -17.96167, 2.45922, 124.53894, 22.01538, 117.82336, 22.97705, 111.10718, 23.93933 ]
}
]
}
@ -275,7 +268,7 @@
"drawOrder": [
{ "time": 0 },
{
"time": 0.6666,
"time": 0.6667,
"offsets": [
{ "slot": "draworder2", "offset": 1 }
]

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,4 @@
eclipse.preferences.version=1
encoding//src/spine/animation/TwoColorTimeline.as=UTF-8
encoding//src/spine/attachments/PointAttachment.as=UTF-8
encoding/<project>=UTF-8

View File

@ -53,12 +53,12 @@ public class Bone implements Updatable {
public var ashearY:Number;
public var appliedValid:Boolean;
internal var _a:Number;
internal var _b:Number;
internal var _c:Number;
internal var _d:Number;
internal var _worldX:Number;
internal var _worldY:Number;
public var a:Number;
public var b:Number;
public var c:Number;
public var d:Number;
public var worldX:Number;
public var worldY:Number;
internal var _sorted:Boolean;
@ -115,38 +115,38 @@ public class Bone implements Updatable {
lc = -lc;
ld = -ld;
}
_a = la;
_b = lb;
_c = lc;
_d = ld;
_worldX = x + skeleton.x;
_worldY = y + skeleton.y;
this.a = la;
this.b = lb;
this.c = lc;
this.d = ld;
worldX = x + skeleton.x;
worldY = y + skeleton.y;
return;
}
var pa:Number = parent._a, pb:Number = parent._b, pc:Number = parent._c, pd:Number = parent._d;
_worldX = pa * x + pb * y + parent._worldX;
_worldY = pc * x + pd * y + parent._worldY;
var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d;
worldX = pa * x + pb * y + parent.worldX;
worldY = pc * x + pd * y + parent.worldY;
switch (_data.transformMode) {
switch (this.data.transformMode) {
case TransformMode.normal: {
rotationY = rotation + 90 + shearY;
la = MathUtils.cosDeg(rotation + shearX) * scaleX;
lb = MathUtils.cosDeg(rotationY) * scaleY;
lc = MathUtils.sinDeg(rotation + shearX) * scaleX;
ld = MathUtils.sinDeg(rotationY) * scaleY;
_a = pa * la + pb * lc;
_b = pa * lb + pb * ld;
_c = pc * la + pd * lc;
_d = pc * lb + pd * ld;
this.a = pa * la + pb * lc;
this.b = pa * lb + pb * ld;
this.c = pc * la + pd * lc;
this.d = pc * lb + pd * ld;
return;
}
case TransformMode.onlyTranslation: {
rotationY = rotation + 90 + shearY;
_a = MathUtils.cosDeg(rotation + shearX) * scaleX;
_b = MathUtils.cosDeg(rotationY) * scaleY;
_c = MathUtils.sinDeg(rotation + shearX) * scaleX;
_d = MathUtils.sinDeg(rotationY) * scaleY;
this.a = MathUtils.cosDeg(rotation + shearX) * scaleX;
this.b = MathUtils.cosDeg(rotationY) * scaleY;
this.c = MathUtils.sinDeg(rotation + shearX) * scaleX;
this.d = MathUtils.sinDeg(rotationY) * scaleY;
break;
}
case TransformMode.noRotationOrReflection: {
@ -168,10 +168,10 @@ public class Bone implements Updatable {
lb = MathUtils.cosDeg(ry) * scaleY;
lc = MathUtils.sinDeg(rx) * scaleX;
ld = MathUtils.sinDeg(ry) * scaleY;
_a = pa * la - pb * lc;
_b = pa * lb - pb * ld;
_c = pc * la + pd * lc;
_d = pc * lb + pd * ld;
this.a = pa * la - pb * lc;
this.b = pa * lb - pb * ld;
this.c = pc * la + pd * lc;
this.d = pc * lb + pd * ld;
break;
}
case TransformMode.noScale:
@ -192,35 +192,35 @@ public class Bone implements Updatable {
lb = MathUtils.cosDeg(90 + shearY) * scaleY;
lc = MathUtils.sinDeg(shearX) * scaleX;
ld = MathUtils.sinDeg(90 + shearY) * scaleY;
_a = za * la + zb * lc;
_b = za * lb + zb * ld;
_c = zc * la + zd * lc;
_d = zc * lb + zd * ld;
if (_data.transformMode != TransformMode.noScaleOrReflection ? pa * pd - pb * pc < 0 : skeleton.flipX != skeleton.flipY) {
_b = -_b;
_d = -_d;
this.a = za * la + zb * lc;
this.b = za * lb + zb * ld;
this.c = zc * la + zd * lc;
this.d = zc * lb + zd * ld;
if (this.data.transformMode != TransformMode.noScaleOrReflection ? pa * pd - pb * pc < 0 : skeleton.flipX != skeleton.flipY) {
this.b = -this.b;
this.d = -this.d;
}
return;
}
}
if (_skeleton.flipX) {
_a = -_a;
_b = -_b;
this.a = -this.a;
this.b = -this.b;
}
if (_skeleton.flipY != yDown) {
_c = -_c;
_d = -_d;
this.c = -this.c;
this.d = -this.d;
}
}
public function setToSetupPose () : void {
x = _data.x;
y = _data.y;
rotation = _data.rotation;
scaleX = _data.scaleX;
scaleY = _data.scaleY;
shearX = _data.shearX;
shearY = _data.shearY;
x = this.data.x;
y = this.data.y;
rotation = this.data.rotation;
scaleX = this.data.scaleX;
scaleY = this.data.scaleY;
shearX = this.data.shearX;
shearY = this.data.shearY;
}
public function get data () : BoneData {
@ -237,70 +237,22 @@ public class Bone implements Updatable {
public function get children () : Vector.<Bone> {;
return _children;
}
public function get a () : Number {
return _a;
}
public function get b () : Number {
return _b;
}
public function get c () : Number {
return _c;
}
public function get d () : Number {
return _d;
}
public function get worldX () : Number {
return _worldX;
}
public function get worldY () : Number {
return _worldY;
}
}
public function get worldRotationX () : Number {
return Math.atan2(_c, _a) * MathUtils.radDeg;
return Math.atan2(this.c, this.a) * MathUtils.radDeg;
}
public function get worldRotationY () : Number {
return Math.atan2(_d, _b) * MathUtils.radDeg;
return Math.atan2(this.d, this.b) * MathUtils.radDeg;
}
public function get worldScaleX () : Number {
return Math.sqrt(_a * _a + _c * _c);
return Math.sqrt(this.a * this.a + this.c * this.c);
}
public function get worldScaleY () : Number {
return Math.sqrt(_b * _b + _d * _d);
}
public function worldToLocalRotationX () : Number {
var parent:Bone = _parent;
if (parent == null) return arotation;
var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d, a:Number = this.a, c:Number = this.c;
return Math.atan2(pa * c - pc * a, pd * a - pb * c) * MathUtils.radDeg;
}
public function worldToLocalRotationY () : Number {
var parent:Bone = _parent;
if (parent == null) return arotation;
var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d, b:Number = this.b, d:Number = this.d;
return Math.atan2(pa * d - pc * b, pd * b - pb * d) * MathUtils.radDeg;
}
public function rotateWorld (degrees:Number) : void {
var a:Number = this.a, b:Number = this.b, c:Number = this.c, d:Number = this.d;
var cos:Number = MathUtils.cosDeg(degrees), sin:Number = MathUtils.sinDeg(degrees);
this._a = cos * a - sin * c;
this._b = cos * b - sin * d;
this._c = sin * a + cos * c;
this._d = sin * b + cos * d;
this.appliedValid = false;
return Math.sqrt(this.b * this.b + this.d * this.d);
}
/** Computes the individual applied transform values from the world transform. This can be useful to perform processing using
@ -349,21 +301,41 @@ public class Bone implements Updatable {
}
public function worldToLocal (world:Vector.<Number>) : void {
var a:Number = _a, b:Number = _b, c:Number = _c, d:Number = _d;
var a:Number = this.a, b:Number = this.b, c:Number = this.c, d:Number = this.d;
var invDet:Number = 1 / (a * d - b * c);
var x:Number = world[0] - _worldX, y:Number = world[1] - _worldY;
var x:Number = world[0] - this.worldX, y:Number = world[1] - this.worldY;
world[0] = (x * d * invDet - y * b * invDet);
world[1] = (y * a * invDet - x * c * invDet);
}
public function localToWorld (local:Vector.<Number>) : void {
var localX:Number = local[0], localY:Number = local[1];
local[0] = localX * _a + localY * _b + _worldX;
local[1] = localX * _c + localY * _d + _worldY;
local[0] = localX * this.a + localY * this.b + this.worldX;
local[1] = localX * this.c + localY * this.d + this.worldY;
}
public function worldToLocalRotation (worldRotation:Number) : Number {
var sin:Number = MathUtils.sinDeg(worldRotation), cos:Number = MathUtils.cosDeg(worldRotation);
return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg;
}
public function localToWorldRotation (localRotation:Number) : Number {
var sin:Number = MathUtils.sinDeg(localRotation), cos:Number = MathUtils.cosDeg(localRotation);
return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg;
}
public function rotateWorld (degrees:Number) : void {
var a:Number = this.a, b:Number = this.b, c:Number = this.c, d:Number = this.d;
var cos:Number = MathUtils.cosDeg(degrees), sin:Number = MathUtils.sinDeg(degrees);
this.a = cos * a - sin * c;
this.b = cos * b - sin * d;
this.c = sin * a + cos * c;
this.d = sin * b + cos * d;
this.appliedValid = false;
}
public function toString () : String {
return _data._name;
return this.data._name;
}
}

View File

@ -0,0 +1,101 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
package spine {
public class Color {
public static var WHITE:Color = new Color(1, 1, 1, 1);
public static var RED:Color = new Color(1, 0, 0, 1);
public static var GREEN:Color = new Color(0, 1, 0, 1);
public static var BLUE:Color = new Color(0, 0, 1, 1);
public static var MAGENTA:Color = new Color(1, 0, 1, 1);
public var r:Number = 0;
public var g:Number = 0;
public var b:Number = 0;
public var a:Number = 0;
public function Color (r:Number, g:Number, b:Number, a:Number = 0) {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
}
public function setFrom (r:Number, g:Number, b:Number, a:Number): Color {
this.r = r;
this.g = g;
this.b = b;
this.a = a;
this.clamp();
return this;
}
public function setFromColor (c:Color): Color{
this.r = c.r;
this.g = c.g;
this.b = c.b;
this.a = c.a;
return this;
}
public function setFromString (hex:String): Color {
hex = hex.charAt(0) == '#' ? hex.substr(1) : hex;
this.r = parseInt(hex.substr(0, 2), 16) / 255.0;
this.g = parseInt(hex.substr(2, 2), 16) / 255.0;
this.b = parseInt(hex.substr(4, 2), 16) / 255.0;
this.a = (hex.length != 8 ? 255 : parseInt(hex.substr(6, 2), 16)) / 255.0;
return this;
}
public function add (r:Number, g:Number, b:Number, a:Number): Color {
this.r += r;
this.g += g;
this.b += b;
this.a += a;
this.clamp();
return this;
}
public function clamp (): Color {
if (this.r < 0) this.r = 0;
else if (this.r > 1) this.r = 1;
if (this.g < 0) this.g = 0;
else if (this.g > 1) this.g = 1;
if (this.b < 0) this.b = 0;
else if (this.b > 1) this.b = 1;
if (this.a < 0) this.a = 0;
else if (this.a > 1) this.a = 1;
return this;
}
}
}

View File

@ -57,10 +57,10 @@ public class IkConstraint implements Constraint {
public function update () : void {
switch (bones.length) {
case 1:
apply1(bones[0], target._worldX, target._worldY, mix);
apply1(bones[0], target.worldX, target.worldY, mix);
break;
case 2:
apply2(bones[0], bones[1], target._worldX, target._worldY, bendDirection, mix);
apply2(bones[0], bones[1], target.worldX, target.worldY, bendDirection, mix);
break;
}
}

View File

@ -31,6 +31,8 @@
package spine {
public class MathUtils {
static public var PI:Number = Math.PI;
static public var PI2:Number = Math.PI * 2;
static public var radDeg:Number = 180 / Math.PI;
static public var degRad:Number = Math.PI / 180;

View File

@ -89,10 +89,10 @@ public class PathConstraint implements Constraint {
}
for (var i:int = 0, n:int = spacesCount - 1; i < n;) {
var bone:Bone = bones[i];
var length:Number = bone.data.length, x:Number = length * bone.a, y:Number = length * bone.c;
length = Math.sqrt(x * x + y * y);
var setupLength:Number = bone.data.length, x:Number = setupLength * bone.a, y:Number = setupLength * bone.c;
var length:Number = Math.sqrt(x * x + y * y);
if (scale) lengths[i] = length;
spaces[++i] = lengthSpacing ? Math.max(0, length + spacing) : spacing;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
}
} else {
for (i = 1; i < spacesCount; i++)
@ -113,15 +113,15 @@ public class PathConstraint implements Constraint {
var p:Number;
for (i = 0, p = 3; i < boneCount; i++, p += 3) {
bone = bones[i];
bone._worldX += (boneX - bone.worldX) * translateMix;
bone._worldY += (boneY - bone.worldY) * translateMix;
bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix;
x = positions[p]; y = positions[p + 1]; var dx:Number = x - boneX, dy:Number = y - boneY;
if (scale) {
length = lengths[i];
if (length != 0) {
var s:Number = (Math.sqrt(dx * dx + dy * dy) / length - 1) * rotateMix + 1;
bone._a *= s;
bone._c *= s;
bone.a *= s;
bone.c *= s;
}
}
boneX = x;
@ -151,10 +151,10 @@ public class PathConstraint implements Constraint {
r *= rotateMix;
cos = Math.cos(r);
sin = Math.sin(r);
bone._a = cos * a - sin * c;
bone._b = cos * b - sin * d;
bone._c = sin * a + cos * c;
bone._d = sin * b + cos * d;
bone.a = cos * a - sin * c;
bone.b = cos * b - sin * d;
bone.c = sin * a + cos * c;
bone.d = sin * b + cos * d;
}
bone.appliedValid = false;
}
@ -194,14 +194,14 @@ public class PathConstraint implements Constraint {
} else if (p < 0) {
if (prevCurve != BEFORE) {
prevCurve = BEFORE;
path.computeWorldVertices2(target, 2, 4, world, 0);
path.computeWorldVertices(target, 2, 4, world, 0, 2);
}
addBeforePosition(p, world, 0, out, o);
continue;
} else if (p > pathLength) {
if (prevCurve != AFTER) {
prevCurve = AFTER;
path.computeWorldVertices2(target, verticesLength - 6, 4, world, 0);
path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);
}
addAfterPosition(p - pathLength, world, 0, out, o);
continue;
@ -222,10 +222,10 @@ public class PathConstraint implements Constraint {
if (curve != prevCurve) {
prevCurve = curve;
if (closed && curve == curveCount) {
path.computeWorldVertices2(target, verticesLength - 4, 4, world, 0);
path.computeWorldVertices2(target, 0, 4, world, 4);
path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);
path.computeWorldVertices(target, 0, 4, world, 4, 2);
} else
path.computeWorldVertices2(target, curve * 6 + 2, 8, world, 0);
path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);
}
addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o,
tangents || (i > 0 && space == 0));
@ -238,8 +238,8 @@ public class PathConstraint implements Constraint {
verticesLength += 2;
this._world.length = verticesLength;
world = this._world;
path.computeWorldVertices2(target, 2, verticesLength - 4, world, 0);
path.computeWorldVertices2(target, 0, 2, world, verticesLength - 4);
path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);
path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);
world[verticesLength - 2] = world[0];
world[verticesLength - 1] = world[1];
} else {
@ -247,7 +247,7 @@ public class PathConstraint implements Constraint {
verticesLength -= 4;
this._world.length = verticesLength;
world = this._world;
path.computeWorldVertices2(target, 2, verticesLength, world, 0);
path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);
}
// Curve lengths.

View File

@ -29,6 +29,8 @@
*****************************************************************************/
package spine {
import spine.attachments.MeshAttachment;
import spine.attachments.RegionAttachment;
import flash.utils.Dictionary;
import spine.attachments.PathAttachment;
import spine.attachments.Attachment;
@ -44,7 +46,7 @@ public class Skeleton {
private var _updateCache:Vector.<Updatable> = new Vector.<Updatable>();
private var _updateCacheReset:Vector.<Bone> = new Vector.<Bone>();
private var _skin:Skin;
public var r:Number = 1, g:Number = 1, b:Number = 1, a:Number = 1;
public var color:Color = new Color(1, 1, 1, 1);
public var time:Number = 0;
public var flipX:Boolean, flipY:Boolean;
public var x:Number = 0, y:Number = 0;
@ -96,6 +98,7 @@ public class Skeleton {
public function updateCache () : void {
var updateCache:Vector.<Updatable> = this._updateCache;
updateCache.length = 0;
this._updateCacheReset.length = 0;
var bones:Vector.<Bone> = this.bones;
var i:Number = 0;
@ -166,25 +169,25 @@ public class Skeleton {
if (skin != null) sortPathConstraintAttachment(skin, slotIndex, slotBone);
if (data.defaultSkin != null && data.defaultSkin != skin)
sortPathConstraintAttachment(data.defaultSkin, slotIndex, slotBone);
var ii:Number = 0;
var nn:Number = 0;
for (ii = 0, nn = data.skins.length; ii < nn; ii++)
sortPathConstraintAttachment(data.skins[ii], slotIndex, slotBone);
var i:Number = 0;
var n:Number = 0;
for (i = 0, n = data.skins.length; i < n; i++)
sortPathConstraintAttachment(data.skins[i], slotIndex, slotBone);
var attachment:Attachment = slot.attachment;
if (attachment is PathAttachment) sortPathConstraintAttachment2(attachment, slotBone);
var constrained:Vector.<Bone> = constraint.bones;
var boneCount:Number = constrained.length;
for (ii = 0; ii < boneCount; ii++)
sortBone(constrained[ii]);
for (i = 0; i < boneCount; i++)
sortBone(constrained[i]);
_updateCache.push(constraint);
for (ii = 0; ii < boneCount; ii++)
sortReset(constrained[ii].children);
for (ii = 0; ii < boneCount; ii++)
constrained[ii]._sorted = true;
for (i = 0; i < boneCount; i++)
sortReset(constrained[i].children);
for (i = 0; i < boneCount; i++)
constrained[i]._sorted = true;
}
private function sortTransformConstraint (constraint:TransformConstraint): void {
@ -192,16 +195,24 @@ public class Skeleton {
var constrained:Vector.<Bone> = constraint.bones;
var boneCount:Number = constrained.length;
var ii:Number = 0;
for (ii = 0; ii < boneCount; ii++)
sortBone(constrained[ii]);
var i:Number = 0;
if (constraint.data.local) {
for (i = 0; i < boneCount; i++) {
var child:Bone = constrained[constrained.length - 1];
sortBone(child.parent);
if (!(_updateCache.indexOf(child) > -1)) _updateCacheReset.push(child);
}
} else {
for (i = 0; i < boneCount; i++)
sortBone(constrained[i]);
}
_updateCache.push(constraint);
for (ii = 0; ii < boneCount; ii++)
sortReset(constrained[ii].children);
for (ii = 0; ii < boneCount; ii++)
constrained[ii]._sorted = true;
for (i = 0; i < boneCount; i++)
sortReset(constrained[i].children);
for (i = 0; i < boneCount; i++)
constrained[i]._sorted = true;
}
private function sortPathConstraintAttachment (skin:Skin, slotIndex:int, slotBone:Bone) : void {
@ -463,6 +474,44 @@ public class Skeleton {
public function toString () : String {
return _data.name != null ? _data.name : super.toString();
}
public function getBounds (offset: Vector.<Number>, size: Vector.<Number>, temp: Vector.<Number>) : void {
if (offset == null) throw new ArgumentError("offset cannot be null.");
if (size == null) throw new ArgumentError("size cannot be null.");
var drawOrder:Vector.<Slot> = this.drawOrder;
var minX:Number = Number.POSITIVE_INFINITY, minY:Number = Number.POSITIVE_INFINITY, maxX:Number = Number.NEGATIVE_INFINITY, maxY:Number = Number.NEGATIVE_INFINITY;
for (var i:int = 0, n:int = drawOrder.length; i < n; i++) {
var slot:Slot = drawOrder[i];
var verticesLength:int = 0;
var vertices: Vector.<Number> = null;
var attachment:Attachment = slot.attachment;
if (attachment is RegionAttachment) {
verticesLength = 8;
temp.length = verticesLength;
vertices = temp;
(attachment as RegionAttachment).computeWorldVertices(slot.bone, vertices, 0, 2);
} else if (attachment is MeshAttachment) {
var mesh:MeshAttachment = attachment as MeshAttachment;
verticesLength = mesh.worldVerticesLength;
temp.length = verticesLength;
vertices = temp;
mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
}
if (vertices != null) {
for (var ii:int = 0, nn:int = vertices.length; ii < nn; ii += 8) {
var x:Number = vertices[ii], y:Number = vertices[ii + 1];
minX = Math.min(minX, x);
minY = Math.min(minY, y);
maxX = Math.max(maxX, x);
maxY = Math.max(maxY, y);
}
}
}
offset[0] = minX;
offset[1] = minY;
size[0] = maxX - minX;
size[1] = maxY - minY;
}
}
}

View File

@ -65,7 +65,7 @@ public class SkeletonBounds {
polygons[polygons.length] = polygon;
polygon.vertices.length = boundingBox.worldVerticesLength;
boundingBox.computeWorldVertices(slot, polygon.vertices);
boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon.vertices, 0, 2);
}
if (updateAabb)

View File

@ -29,6 +29,8 @@
*****************************************************************************/
package spine {
import spine.animation.TwoColorTimeline;
import spine.attachments.PointAttachment;
import spine.animation.PathConstraintMixTimeline;
import spine.animation.PathConstraintSpacingTimeline;
import spine.animation.PathConstraintPositionTimeline;
@ -126,10 +128,12 @@ public class SkeletonJson {
var color:String = slotMap["color"];
if (color) {
slotData.r = toColor(color, 0);
slotData.g = toColor(color, 1);
slotData.b = toColor(color, 2);
slotData.a = toColor(color, 3);
slotData.color.setFrom(toColor(color, 0), toColor(color, 1), toColor(color, 2), toColor(color, 3));
}
var dark:String = slotMap["dark"];
if (dark) {
slotData.darkColor.setFrom(toColor(dark, 0), toColor(dark, 1), toColor(dark, 2), toColor(dark, 3));
}
slotData.attachmentName = slotMap["attachment"];
@ -288,10 +292,7 @@ public class SkeletonJson {
region.height = Number(map["height"] || 0) * scale;
color = map["color"];
if (color) {
region.r = toColor(color, 0);
region.g = toColor(color, 1);
region.b = toColor(color, 2);
region.a = toColor(color, 3);
region.color.setFrom(toColor(color, 0), toColor(color, 1), toColor(color, 2), toColor(color, 3));
}
region.updateOffset();
return region;
@ -303,10 +304,7 @@ public class SkeletonJson {
color = map["color"];
if (color) {
mesh.r = toColor(color, 0);
mesh.g = toColor(color, 1);
mesh.b = toColor(color, 2);
mesh.a = toColor(color, 3);
mesh.color.setFrom(toColor(color, 0), toColor(color, 1), toColor(color, 2), toColor(color, 3));
}
mesh.width = Number(map["width"] || 0) * scale;
@ -347,6 +345,18 @@ public class SkeletonJson {
}
path.lengths = lengths;
return path;
case AttachmentType.point:
var point:PointAttachment = attachmentLoader.newPointAttachment(skin, name);
if (!point) return null;
point.x = map.hasOwnProperty("x") ? Number(map["x"]) * scale : 0;
point.y = map.hasOwnProperty("y") ? Number(map["y"]) * scale : 0;
point.rotation = map.hasOwnProperty("rotation") ? Number(map["rotation"]) : 0;
color = map["color"];
if (color) {
point.color.setFrom(toColor(color, 0), toColor(color, 1), toColor(color, 2), toColor(color, 3));
}
return point;
}
return null;
@ -400,7 +410,16 @@ public class SkeletonJson {
for (timelineName in slotMap) {
values = slotMap[timelineName];
if (timelineName == "color") {
if (timelineName == "attachment") {
var attachmentTimeline:AttachmentTimeline = new AttachmentTimeline(values.length);
attachmentTimeline.slotIndex = slotIndex;
frameIndex = 0;
for each (valueMap in values)
attachmentTimeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
timelines[timelines.length] = attachmentTimeline;
duration = Math.max(duration, attachmentTimeline.frames[attachmentTimeline.frameCount - 1]);
} else if (timelineName == "color") {
var colorTimeline:ColorTimeline = new ColorTimeline(values.length);
colorTimeline.slotIndex = slotIndex;
@ -417,15 +436,24 @@ public class SkeletonJson {
}
timelines[timelines.length] = colorTimeline;
duration = Math.max(duration, colorTimeline.frames[(colorTimeline.frameCount - 1) * ColorTimeline.ENTRIES]);
} else if (timelineName == "attachment") {
var attachmentTimeline:AttachmentTimeline = new AttachmentTimeline(values.length);
attachmentTimeline.slotIndex = slotIndex;
} else if (timelineName == "twoColor") {
var twoColorTimeline:TwoColorTimeline = new TwoColorTimeline(values.length);
twoColorTimeline.slotIndex = slotIndex;
frameIndex = 0;
for each (valueMap in values)
attachmentTimeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
timelines[timelines.length] = attachmentTimeline;
duration = Math.max(duration, attachmentTimeline.frames[attachmentTimeline.frameCount - 1]);
for each (valueMap in values) {
color = valueMap["color"];
var darkColor:String = valueMap["dark"];
var light:Color = new Color(0, 0, 0, 0);
var dark:Color = new Color(0, 0, 0, 0);
light.setFrom(toColor(color, 0), toColor(color, 1), toColor(color, 2), toColor(color, 3));
dark.setFrom(toColor(darkColor, 0), toColor(darkColor, 1), toColor(darkColor, 2), toColor(darkColor, 3));
twoColorTimeline.setFrame(frameIndex, valueMap["time"], light.r, light.g, light.b, light.a, dark.r, dark.g, dark.b);
readCurve(valueMap, twoColorTimeline, frameIndex);
frameIndex++;
}
timelines[timelines.length] = twoColorTimeline;
duration = Math.max(duration, twoColorTimeline.frames[(twoColorTimeline.frameCount - 1) * TwoColorTimeline.ENTRIES]);
} else
throw new Error("Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")");
}

View File

@ -34,10 +34,8 @@ import spine.attachments.Attachment;
public class Slot {
internal var _data:SlotData;
internal var _bone:Bone;
public var r:Number;
public var g:Number;
public var b:Number;
public var a:Number;
public var color:Color;
public var darkColor:Color;
internal var _attachment:Attachment;
private var _attachmentTime:Number;
public var attachmentVertices:Vector.<Number> = new Vector.<Number>();
@ -47,6 +45,8 @@ public class Slot {
if (bone == null) throw new ArgumentError("bone cannot be null.");
_data = data;
_bone = bone;
this.color = new Color(1, 1, 1, 1);
this.darkColor = data.darkColor == null ? null : new Color(1, 1, 1, 1);
setToSetupPose();
}
@ -86,10 +86,8 @@ public class Slot {
}
public function setToSetupPose () : void {
r = _data.r;
g = _data.g;
b = _data.b;
a = _data.a;
color.setFromColor(data.color);
if (darkColor != null) darkColor.setFromColor(this.data.darkColor);
if (_data.attachmentName == null)
attachment = null;
else {

View File

@ -34,10 +34,8 @@ public class SlotData {
internal var _index:int;
internal var _name:String;
internal var _boneData:BoneData;
public var r:Number = 1;
public var g:Number = 1;
public var b:Number = 1;
public var a:Number = 1;
public var color: Color = new Color(1, 1, 1, 1);
public var darkColor: Color;
public var attachmentName:String;
public var blendMode:BlendMode;

View File

@ -57,8 +57,23 @@ public class TransformConstraint implements Constraint {
public function apply () : void {
update();
}
public function update () : void {
if (data.local) {
if (data.relative)
applyRelativeLocal();
else
applyAbsoluteLocal();
} else {
if (data.relative)
applyRelativeWorld();
else
applyAbsoluteWorld();
}
}
internal function applyAbsoluteWorld () : void {
var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
var target:Bone = this.target;
var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d;
@ -78,10 +93,10 @@ public class TransformConstraint implements Constraint {
else if (r < -Math.PI) r += Math.PI * 2;
r *= rotateMix;
var cos:Number = Math.cos(r), sin:Number = Math.sin(r);
bone._a = cos * a - sin * c;
bone._b = cos * b - sin * d;
bone._c = sin * a + cos * c;
bone._d = sin * b + cos * d;
bone.a = cos * a - sin * c;
bone.b = cos * b - sin * d;
bone.c = sin * a + cos * c;
bone.d = sin * b + cos * d;
modified = true;
}
@ -89,8 +104,8 @@ public class TransformConstraint implements Constraint {
_temp[0] = data.offsetX;
_temp[1] = data.offsetY;
target.localToWorld(_temp);
bone._worldX += (_temp[0] - bone.worldX) * translateMix;
bone._worldY += (_temp[1] - bone.worldY) * translateMix;
bone.worldX += (_temp[0] - bone.worldX) * translateMix;
bone.worldY += (_temp[1] - bone.worldY) * translateMix;
modified = true;
}
@ -98,13 +113,13 @@ public class TransformConstraint implements Constraint {
var s:Number = Math.sqrt(bone.a * bone.a + bone.c * bone.c);
var ts:Number = Math.sqrt(ta * ta + tc * tc);
if (s > 0.00001) s = (s + (ts - s + data.offsetScaleX) * scaleMix) / s;
bone._a *= s;
bone._c *= s;
bone.a *= s;
bone.c *= s;
s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);
ts = Math.sqrt(tb * tb + td * td);
if (s > 0.00001) s = (s + (ts - s + data.offsetScaleY) * scaleMix) / s;
bone._b *= s;
bone._d *= s;
bone.b *= s;
bone.d *= s;
modified = true;
}
@ -117,8 +132,8 @@ public class TransformConstraint implements Constraint {
else if (r < -Math.PI) r += Math.PI * 2;
r = by + (r + offsetShearY) * shearMix;
s = Math.sqrt(b * b + d * d);
bone._b = Math.cos(r) * s;
bone._d = Math.sin(r) * s;
bone.b = Math.cos(r) * s;
bone.d = Math.sin(r) * s;
modified = true;
}
@ -126,6 +141,141 @@ public class TransformConstraint implements Constraint {
}
}
public function applyRelativeWorld () : void {
var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
var target:Bone = this.target;
var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d;
var degRadReflect:Number = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;
var offsetRotation:Number = this.data.offsetRotation * degRadReflect, offsetShearY:Number = this.data.offsetShearY * degRadReflect;
var bones:Vector.<Bone> = this.bones;
for (var i:int = 0, n:int = bones.length; i < n; i++) {
var bone:Bone = bones[i];
var modified:Boolean = false;
if (rotateMix != 0) {
var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d;
var r:Number = Math.atan2(tc, ta) + offsetRotation;
if (r > MathUtils.PI)
r -= MathUtils.PI2;
else if (r < -MathUtils.PI) r += MathUtils.PI2;
r *= rotateMix;
var cos:Number = Math.cos(r), sin:Number = Math.sin(r);
bone.a = cos * a - sin * c;
bone.b = cos * b - sin * d;
bone.c = sin * a + cos * c;
bone.d = sin * b + cos * d;
modified = true;
}
if (translateMix != 0) {
var temp:Vector.<Number> = this._temp;
temp[0] = this._data.offsetX;
temp[1] = this._data.offsetY;
target.localToWorld(temp);
bone.worldX += temp[0] * translateMix;
bone.worldY += temp[1] * translateMix;
modified = true;
}
if (scaleMix > 0) {
var s:Number = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;
bone.a *= s;
bone.c *= s;
s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;
bone.b *= s;
bone.d *= s;
modified = true;
}
if (shearMix > 0) {
r = Math.atan2(td, tb) - Math.atan2(tc, ta);
if (r > MathUtils.PI)
r -= MathUtils.PI2;
else if (r < -MathUtils.PI) r += MathUtils.PI2;
b = bone.b; d = bone.d;
r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * shearMix;
s = Math.sqrt(b * b + d * d);
bone.b = Math.cos(r) * s;
bone.d = Math.sin(r) * s;
modified = true;
}
if (modified) bone.appliedValid = false;
}
}
public function applyAbsoluteLocal () : void {
var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
var target:Bone = this.target;
if (!target.appliedValid) target.updateAppliedTransform();
var bones:Vector.<Bone> = this.bones;
for (var i:int = 0, n:int = bones.length; i < n; i++) {
var bone:Bone = bones[i];
if (!bone.appliedValid) bone.updateAppliedTransform();
var rotation:Number = bone.arotation;
if (rotateMix != 0) {
var r:Number = target.arotation - rotation + this.data.offsetRotation;
r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;
rotation += r * rotateMix;
}
var x:Number = bone.ax, y:Number = bone.ay;
if (translateMix != 0) {
x += (target.ax - x + this.data.offsetX) * translateMix;
y += (target.ay - y + this.data.offsetY) * translateMix;
}
var scaleX:Number = bone.ascaleX, scaleY:Number = bone.ascaleY;
if (scaleMix > 0) {
if (scaleX > 0.00001) scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX;
if (scaleY > 0.00001) scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY;
}
var shearY:Number = bone.ashearY;
if (shearMix > 0) {
r = target.ashearY - shearY + this.data.offsetShearY;
r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;
bone.shearY += r * shearMix;
}
bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);
}
}
public function applyRelativeLocal () : void {
var rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
var target:Bone = this.target;
if (!target.appliedValid) target.updateAppliedTransform();
var bones:Vector.<Bone> = this.bones;
for (var i:int = 0, n:int = bones.length; i < n; i++) {
var bone:Bone = bones[i];
if (!bone.appliedValid) bone.updateAppliedTransform();
var rotation:Number = bone.arotation;
if (rotateMix != 0) rotation += (target.arotation + this.data.offsetRotation) * rotateMix;
var x:Number = bone.ax, y:Number = bone.ay;
if (translateMix != 0) {
x += (target.ax + this.data.offsetX) * translateMix;
y += (target.ay + this.data.offsetY) * translateMix;
}
var scaleX:Number = bone.ascaleX, scaleY:Number = bone.ascaleY;
if (scaleMix > 0) {
if (scaleX > 0.00001) scaleX *= ((target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix) + 1;
if (scaleY > 0.00001) scaleY *= ((target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix) + 1;
}
var shearY:Number = bone.ashearY;
if (shearMix > 0) shearY += (target.ashearY + this.data.offsetShearY) * shearMix;
bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);
}
}
public function getOrder () : Number {
return _data.order;
}

View File

@ -45,6 +45,8 @@ public class TransformConstraintData {
public var offsetScaleX:Number;
public var offsetScaleY:Number;
public var offsetShearY:Number;
public var relative:Boolean = false;
public var local:Boolean = false;
public function TransformConstraintData (name:String) {
if (name == null) throw new ArgumentError("name cannot be null.");

View File

@ -323,11 +323,12 @@ public class AnimationState {
}
public function clearTracks ():void {
var oldTrainDisabled:Boolean = queue.drainDisabled;
queue.drainDisabled = true;
for (var i:int = 0, n:int = tracks.length; i < n; i++)
clearTrack(i);
tracks.length = 0;
queue.drainDisabled = false;
queue.drainDisabled = oldTrainDisabled;
queue.drain();
}
@ -452,12 +453,13 @@ public class AnimationState {
}
public function setEmptyAnimations (mixDuration:Number):void {
var oldDrainDisabled:Boolean = queue.drainDisabled;
queue.drainDisabled = true;
for (var i:int = 0, n:int = tracks.length; i < n; i++) {
var current:TrackEntry = tracks[i];
if (current != null) setEmptyAnimation(current.trackIndex, mixDuration);
}
queue.drainDisabled = false;
queue.drainDisabled = oldDrainDisabled;
queue.drain();
}

View File

@ -66,10 +66,7 @@ public class ColorTimeline extends CurveTimeline {
if (time < frames[0]) {
if (setupPose) {
slot.r = slot.data.r;
slot.g = slot.data.g;
slot.b = slot.data.b;
slot.a = slot.data.a;
slot.color.setFromColor(slot.data.color);
}
return;
}
@ -98,21 +95,15 @@ public class ColorTimeline extends CurveTimeline {
a += (frames[frame + A] - a) * percent;
}
if (alpha == 1) {
slot.r = r;
slot.g = g;
slot.b = b;
slot.a = a;
slot.color.setFrom(r, g, b, a);
} else {
if (setupPose) {
slot.r = slot.data.r;
slot.g = slot.data.g;
slot.b = slot.data.b;
slot.a = slot.data.a;
slot.color.setFromColor(slot.data.color);
}
slot.r += (r - slot.r) * alpha;
slot.g += (g - slot.g) * alpha;
slot.b += (b - slot.b) * alpha;
slot.a += (a - slot.a) * alpha;
slot.color.r += (r - slot.color.r) * alpha;
slot.color.g += (g - slot.color.g) * alpha;
slot.color.b += (b - slot.color.b) * alpha;
slot.color.a += (a - slot.color.a) * alpha;
}
}
}

View File

@ -51,6 +51,7 @@ public class TimelineType {
public static const pathConstraintPosition:TimelineType = new TimelineType(11);
public static const pathConstraintSpacing:TimelineType = new TimelineType(12);
public static const pathConstraintMix:TimelineType = new TimelineType(13);
public static const twoColor:TimelineType = new TimelineType(14);
}
}

View File

@ -0,0 +1,128 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
package spine.animation {
import spine.Color;
import spine.Event;
import spine.Skeleton;
import spine.Slot;
public class TwoColorTimeline extends CurveTimeline {
static public const ENTRIES:int = 8;
static internal const PREV_TIME:int = -8, PREV_R:int = -7, PREV_G:int = -6, PREV_B:int = -5, PREV_A:int = -4;
static internal const PREV_R2:int = -3, PREV_G2:int = -2, PREV_B2:int = -1;
static internal const R:int = 1, G:int = 2, B:int = 3, A:int = 4, R2:int = 5, G2:int = 6, B2:int = 7;
public var slotIndex:int;
public var frames:Vector.<Number>; // time, r, g, b, a, ...
public function TwoColorTimeline (frameCount:int) {
super(frameCount);
frames = new Vector.<Number>(frameCount * ENTRIES, true);
}
override public function getPropertyId () : int {
return (TimelineType.twoColor.ordinal << 24) + slotIndex;
}
/** Sets the time and value of the specified keyframe. */
public function setFrame (frameIndex:int, time:Number, r:Number, g:Number, b:Number, a:Number, r2:Number, g2:Number, b2:Number) : void {
frameIndex *= TwoColorTimeline.ENTRIES;
this.frames[frameIndex] = time;
this.frames[frameIndex + TwoColorTimeline.R] = r;
this.frames[frameIndex + TwoColorTimeline.G] = g;
this.frames[frameIndex + TwoColorTimeline.B] = b;
this.frames[frameIndex + TwoColorTimeline.A] = a;
this.frames[frameIndex + TwoColorTimeline.R2] = r2;
this.frames[frameIndex + TwoColorTimeline.G2] = g2;
this.frames[frameIndex + TwoColorTimeline.B2] = b2;
}
override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector.<Event>, alpha:Number, setupPose:Boolean, mixingOut:Boolean) : void {
var frames:Vector.<Number> = this.frames;
var slot:Slot = skeleton.slots[slotIndex];
if (time < frames[0]) {
if (setupPose) {
slot.color.setFromColor(slot.data.color);
slot.darkColor.setFromColor(slot.data.darkColor);
}
return;
}
var r:Number, g:Number, b:Number, a:Number, r2:Number, g2:Number, b2:Number;
if (time >= frames[frames.length - ENTRIES]) { // Time is after last frame.
var i:int = frames.length;
r = frames[i + PREV_R];
g = frames[i + PREV_G];
b = frames[i + PREV_B];
a = frames[i + PREV_A];
r2 = frames[i + PREV_R2];
g2 = frames[i + PREV_G2];
b2 = frames[i + PREV_B2];
} else {
// Interpolate between the previous frame and the current frame.
var frame:int = Animation.binarySearch(frames, time, ENTRIES);
r = frames[frame + PREV_R];
g = frames[frame + PREV_G];
b = frames[frame + PREV_B];
a = frames[frame + PREV_A];
r2 = frames[frame + PREV_R2];
g2 = frames[frame + PREV_G2];
b2 = frames[frame + PREV_B2];
var frameTime:Number = frames[frame];
var percent:Number = getCurvePercent(frame / ENTRIES - 1,
1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime));
r += (frames[frame + R] - r) * percent;
g += (frames[frame + G] - g) * percent;
b += (frames[frame + B] - b) * percent;
a += (frames[frame + A] - a) * percent;
r2 += (frames[frame + R2] - a) * percent;
g2 += (frames[frame + G2] - a) * percent;
b2 += (frames[frame + B2] - a) * percent;
}
if (alpha == 1) {
slot.color.setFrom(r, g, b, a);
slot.darkColor.setFrom(r2, g2, b2, 1);
} else {
var light:Color = slot.color;
var dark:Color = slot.darkColor;
if (setupPose) {
light.setFromColor(slot.data.color);
dark.setFromColor(slot.data.darkColor);
}
light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);
dark.add((r2 - dark.r) * alpha, (g2 - dark.g) * alpha, (b2 - dark.b) * alpha, 0);
}
}
}
}

View File

@ -89,6 +89,10 @@ public class AtlasAttachmentLoader implements AttachmentLoader {
public function newPathAttachment(skin:Skin, name:String) : PathAttachment {
return new PathAttachment(name);
}
public function newPointAttachment(skin:Skin, name:String) : PointAttachment {
return new PointAttachment(name);
}
static public function nextPOT (value:int) : int {
value--;

View File

@ -43,6 +43,9 @@ public interface AttachmentLoader {
/** @return May be null to not load an attachment */
function newPathAttachment(skin:Skin, name:String): PathAttachment;
/** @return May be null to not load an attachment */
function newPointAttachment(skin:Skin, name:String): PointAttachment;
}
}

View File

@ -37,6 +37,7 @@ public class AttachmentType {
public static const mesh:AttachmentType = new AttachmentType(3, "mesh");
public static const linkedmesh:AttachmentType = new AttachmentType(3, "linkedmesh");
public static const path:AttachmentType = new AttachmentType(4, "path");
public static const point:AttachmentType = new AttachmentType(5, "point");
public var ordinal:int;
public var name:String;

View File

@ -29,16 +29,13 @@
*****************************************************************************/
package spine.attachments {
import spine.Color;
public dynamic class MeshAttachment extends VertexAttachment {
public var worldVertices:Vector.<Number>;
public dynamic class MeshAttachment extends VertexAttachment {
public var uvs:Vector.<Number>;
public var regionUVs:Vector.<Number>;
public var triangles:Vector.<uint>;
public var r:Number = 1;
public var g:Number = 1;
public var b:Number = 1;
public var a:Number = 1;
public var color:Color = new Color(1, 1, 1, 1);
public var hullLength:int;
private var _parentMesh:MeshAttachment;
public var inheritDeform:Boolean;

View File

@ -0,0 +1,57 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
package spine.attachments {
import spine.Color;
import spine.MathUtils;
import spine.Bone;
public dynamic class PointAttachment extends VertexAttachment {
public var x: Number, y: Number, rotation: Number;
public var color:Color = new Color(0.38, 0.94, 0, 1);
public function PointAttachment (name:String) {
super(name);
}
public function computeWorldPosition (bone: Bone, point: Vector.<Number>): Vector.<Number> {
point[0] = this.x * bone.a + this.y * bone.b + bone.worldX;
point[1] = this.x * bone.c + this.y * bone.d + bone.worldY;
return point;
}
public function computeWorldRotation (bone: Bone): Number {
var cos:Number = MathUtils.cosDeg(this.rotation), sin: Number = MathUtils.sinDeg(this.rotation);
var x:Number = cos * bone.a + sin * bone.b;
var y:Number = cos * bone.c + sin * bone.d;
return Math.atan2(y, x) * MathUtils.radDeg;
}
}
}

View File

@ -29,6 +29,7 @@
*****************************************************************************/
package spine.attachments {
import spine.Color;
import spine.Bone;
public dynamic class RegionAttachment extends Attachment {
@ -48,10 +49,7 @@ public dynamic class RegionAttachment extends Attachment {
public var rotation:Number;
public var width:Number;
public var height:Number;
public var r:Number = 1;
public var g:Number = 1;
public var b:Number = 1;
public var a:Number = 1;
public var color:Color = new Color(1, 1, 1, 1);
public var path:String;
public var rendererObject:Object;
@ -71,28 +69,6 @@ public dynamic class RegionAttachment extends Attachment {
uvs.length = 8;
}
public function setUVs (u:Number, v:Number, u2:Number, v2:Number, rotate:Boolean) : void {
if (rotate) {
uvs[X2] = u;
uvs[Y2] = v2;
uvs[X3] = u;
uvs[Y3] = v;
uvs[X4] = u2;
uvs[Y4] = v;
uvs[X1] = u2;
uvs[Y1] = v2;
} else {
uvs[X1] = u;
uvs[Y1] = v2;
uvs[X2] = u;
uvs[Y2] = v;
uvs[X3] = u2;
uvs[Y3] = v;
uvs[X4] = u2;
uvs[Y4] = v2;
}
}
public function updateOffset () : void {
var regionScaleX:Number = width / regionOriginalWidth * scaleX;
var regionScaleY:Number = height / regionOriginalHeight * scaleY;
@ -120,30 +96,58 @@ public dynamic class RegionAttachment extends Attachment {
offset[X4] = localX2Cos - localYSin;
offset[Y4] = localYCos + localX2Sin;
}
public function setUVs (u:Number, v:Number, u2:Number, v2:Number, rotate:Boolean) : void {
var uvs:Vector.<Number> = this.uvs;
if (rotate) {
uvs[X2] = u;
uvs[Y2] = v2;
uvs[X3] = u;
uvs[Y3] = v;
uvs[X4] = u2;
uvs[Y4] = v;
uvs[X1] = u2;
uvs[Y1] = v2;
} else {
uvs[X1] = u;
uvs[Y1] = v2;
uvs[X2] = u;
uvs[Y2] = v;
uvs[X3] = u2;
uvs[Y3] = v;
uvs[X4] = u2;
uvs[Y4] = v2;
}
}
public function computeWorldVertices (x:Number, y:Number, bone:Bone, worldVertices:Vector.<Number>) : void {
x += bone.worldX;
y += bone.worldY;
var m00:Number = bone.a;
var m01:Number = bone.b;
var m10:Number = bone.c;
var m11:Number = bone.d;
var x1:Number = offset[X1];
var y1:Number = offset[Y1];
var x2:Number = offset[X2];
var y2:Number = offset[Y2];
var x3:Number = offset[X3];
var y3:Number = offset[Y3];
var x4:Number = offset[X4];
var y4:Number = offset[Y4];
worldVertices[X1] = x1 * m00 + y1 * m01 + x;
worldVertices[Y1] = x1 * m10 + y1 * m11 + y;
worldVertices[X2] = x2 * m00 + y2 * m01 + x;
worldVertices[Y2] = x2 * m10 + y2 * m11 + y;
worldVertices[X3] = x3 * m00 + y3 * m01 + x;
worldVertices[Y3] = x3 * m10 + y3 * m11 + y;
worldVertices[X4] = x4 * m00 + y4 * m01 + x;
worldVertices[Y4] = x4 * m10 + y4 * m11 + y;
public function computeWorldVertices (bone:Bone, worldVertices:Vector.<Number>, offset:int, stride:int) : void {
var vertexOffset:Vector.<Number> = this.offset;
var x:Number = bone.worldX, y:Number = bone.worldY;
var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d;
var offsetX:Number = 0, offsetY:Number = 0;
offsetX = vertexOffset[X1];
offsetY = vertexOffset[Y1];
worldVertices[offset] = offsetX * a + offsetY * b + x; // br
worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
offset += stride;
offsetX = vertexOffset[X2];
offsetY = vertexOffset[Y2];
worldVertices[offset] = offsetX * a + offsetY * b + x; // bl
worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
offset += stride;
offsetX = vertexOffset[X3];
offsetY = vertexOffset[Y3];
worldVertices[offset] = offsetX * a + offsetY * b + x; // ul
worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
offset += stride;
offsetX = vertexOffset[X4];
offsetY = vertexOffset[Y4];
worldVertices[offset] = offsetX * a + offsetY * b + x; // ur
worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
}
}

View File

@ -42,17 +42,13 @@ public dynamic class VertexAttachment extends Attachment {
super(name);
}
public function computeWorldVertices (slot:Slot, worldVertices:Vector.<Number>): void {
computeWorldVertices2(slot, 0, worldVerticesLength, worldVertices, 0);
}
/** Transforms local vertices to world coordinates.
* @param start The index of the first local vertex value to transform. Each vertex has 2 values, x and y.
* @param count The number of world vertex values to output. Must be <= {@link #getWorldVerticesLength()} - start.
* @param worldVertices The output world vertices. Must have a length >= offset + count.
* @param offset The worldVertices index to begin writing values. */
public function computeWorldVertices2 (slot:Slot, start:int, count:int, worldVertices:Vector.<Number>, offset:int): void {
count += offset;
public function computeWorldVertices (slot:Slot, start:int, count:int, worldVertices:Vector.<Number>, offset:int, stride:int): void {
count = offset + (count >> 1) * stride;
var skeleton:Skeleton = slot.skeleton;
var deformArray:Vector.<Number> = slot.attachmentVertices;
var vertices:Vector.<Number> = this.vertices;
@ -70,7 +66,7 @@ public dynamic class VertexAttachment extends Attachment {
var x:Number = bone.worldX;
var y:Number = bone.worldY;
var a:Number = bone.a, bb:Number = bone.b, c:Number = bone.c, d:Number = bone.d;
for (v = start, w = offset; w < count; v += 2, w += 2) {
for (v = start, w = offset; w < count; v += 2, w += stride) {
vx = vertices[v], vy = vertices[v + 1];
worldVertices[w] = vx * a + vy * bb + x;
worldVertices[w + 1] = vx * c + vy * d + y;
@ -85,7 +81,7 @@ public dynamic class VertexAttachment extends Attachment {
}
var skeletonBones:Vector.<Bone> = skeleton.bones;
if (deformArray.length == 0) {
for (w = offset, b = skip * 3; w < count; w += 2) {
for (w = offset, b = skip * 3; w < count; w += stride) {
wx = 0, wy = 0;
n = bones[v++];
n += v;
@ -100,7 +96,7 @@ public dynamic class VertexAttachment extends Attachment {
}
} else {
deform = deformArray;
for (w = offset, b = skip * 3, f = skip << 1; w < count; w += 2) {
for (w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {
wx = 0; wy = 0;
n = bones[v++];
n += v;

View File

@ -125,10 +125,10 @@ public class SkeletonSprite extends Sprite {
wrapper.blendMode = blendModes[slot.data.blendMode.ordinal];
var colorTransform:ColorTransform = wrapper.transform.colorTransform;
colorTransform.redMultiplier = skeleton.r * slot.r * regionAttachment.r;
colorTransform.greenMultiplier = skeleton.g * slot.g * regionAttachment.g;
colorTransform.blueMultiplier = skeleton.b * slot.b * regionAttachment.b;
colorTransform.alphaMultiplier = skeleton.a * slot.a * regionAttachment.a;
colorTransform.redMultiplier = skeleton.color.r * slot.color.r * regionAttachment.color.r;
colorTransform.greenMultiplier = skeleton.color.g * slot.color.g * regionAttachment.color.g;
colorTransform.blueMultiplier = skeleton.color.b * slot.color.b * regionAttachment.color.b;
colorTransform.alphaMultiplier = skeleton.color.a * slot.color.a * regionAttachment.color.a;
wrapper.transform.colorTransform = colorTransform;
var bone:Bone = slot.bone;

View File

@ -3,7 +3,7 @@ project(spine_unit_test)
set(CMAKE_INSTALL_PREFIX "./")
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -DKANJI_MEMTRACE -DUSE_CPP11_MUTEX")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -DKANJI_MEMTRACE -DUSE_CPP11_MUTEX -std=c++11")
#########################################################
# set includes
@ -55,4 +55,4 @@ add_custom_command(TARGET spine_unit_test PRE_BUILD
add_custom_command(TARGET spine_unit_test PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_LIST_DIR}/../../examples/goblins/export $<TARGET_FILE_DIR:spine_unit_test>/testdata/goblins)
${CMAKE_CURRENT_LIST_DIR}/../../examples/goblins/export $<TARGET_FILE_DIR:spine_unit_test>/testdata/goblins)

View File

@ -11,6 +11,7 @@
#include <ctime>
#include "KString.h"
#include <stdio.h>
#include "spine/extension.h"
#include "spine/spine.h"
@ -63,7 +64,7 @@ int main(int argc, char* argv[])
extern "C" { // probably unnecessary
void _spAtlasPage_createTexture(spAtlasPage* self, const char* path) {
self->rendererObject = nullptr;
self->rendererObject = 0;
self->width = 2048;
self->height = 2048;
}
@ -74,4 +75,4 @@ extern "C" { // probably unnecessary
char* _spUtil_readFile(const char* path, int* length) {
return _readFile(path, length);
}
}
}

View File

@ -27,10 +27,10 @@ void C_InterfaceTestFixture::tearDown()
static spSkeletonData* readSkeletonJsonData(const char* filename, spAtlas* atlas) {
spSkeletonJson* json = spSkeletonJson_create(atlas);
ASSERT(json != nullptr);
ASSERT(json != 0);
spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, filename);
ASSERT(skeletonData != nullptr);
ASSERT(skeletonData != 0);
spSkeletonJson_dispose(json);
return skeletonData;
@ -54,22 +54,22 @@ static void testRunner(const char* jsonName, const char* atlasName)
///////////////////////////////////////////////////////////////////////////
// Global Animation Information
spAtlas* atlas = spAtlas_createFromFile(atlasName, 0);
ASSERT(atlas != nullptr);
ASSERT(atlas != 0);
spSkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas);
ASSERT(skeletonData != nullptr);
ASSERT(skeletonData != 0);
spAnimationStateData* stateData = spAnimationStateData_create(skeletonData);
ASSERT(stateData != nullptr);
ASSERT(stateData != 0);
stateData->defaultMix = 0.2f; // force mixing
///////////////////////////////////////////////////////////////////////////
// Animation Instance
spSkeleton* skeleton = spSkeleton_create(skeletonData);
ASSERT(skeleton != nullptr);
ASSERT(skeleton != 0);
spAnimationState* state = spAnimationState_create(stateData);
ASSERT(state != nullptr);
ASSERT(state != 0);
///////////////////////////////////////////////////////////////////////////

View File

@ -40,10 +40,10 @@ void MemoryTestFixture::tearDown()
// Helper methods
static spSkeletonData* readSkeletonJsonData(const char* filename, spAtlas* atlas) {
spSkeletonJson* json = spSkeletonJson_create(atlas);
ASSERT(json != nullptr);
ASSERT(json != 0);
spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, filename);
ASSERT(skeletonData != nullptr);
ASSERT(skeletonData != 0);
spSkeletonJson_dispose(json);
return skeletonData;
@ -54,22 +54,22 @@ static void LoadSpineboyExample(spAtlas* &atlas, spSkeletonData* &skeletonData,
///////////////////////////////////////////////////////////////////////////
// Global Animation Information
atlas = spAtlas_createFromFile(SPINEBOY_ATLAS, 0);
ASSERT(atlas != nullptr);
ASSERT(atlas != 0);
skeletonData = readSkeletonJsonData(SPINEBOY_JSON, atlas);
ASSERT(skeletonData != nullptr);
ASSERT(skeletonData != 0);
stateData = spAnimationStateData_create(skeletonData);
ASSERT(stateData != nullptr);
ASSERT(stateData != 0);
stateData->defaultMix = 0.4f; // force mixing
///////////////////////////////////////////////////////////////////////////
// Animation Instance
skeleton = spSkeleton_create(skeletonData);
ASSERT(skeleton != nullptr);
ASSERT(skeleton != 0);
state = spAnimationState_create(stateData);
ASSERT(state != nullptr);
ASSERT(state != 0);
}
static void DisposeAll(spSkeleton* skeleton, spAnimationState* state, spAnimationStateData* stateData, spSkeletonData* skeletonData, spAtlas* atlas)
@ -92,11 +92,11 @@ static void DisposeAll(spSkeleton* skeleton, spAnimationState* state, spAnimatio
// https://github.com/EsotericSoftware/spine-runtimes/issues/776
void MemoryTestFixture::reproduceIssue_776()
{
spAtlas* atlas = nullptr;
spSkeletonData* skeletonData = nullptr;
spAnimationStateData* stateData = nullptr;
spSkeleton* skeleton = nullptr;
spAnimationState* state = nullptr;
spAtlas* atlas = 0;
spSkeletonData* skeletonData = 0;
spAnimationStateData* stateData = 0;
spSkeleton* skeleton = 0;
spAnimationState* state = 0;
//////////////////////////////////////////////////////////////////////////
// Initialize Animations
@ -134,11 +134,11 @@ void MemoryTestFixture::reproduceIssue_776()
void MemoryTestFixture::reproduceIssue_777()
{
spAtlas* atlas = nullptr;
spSkeletonData* skeletonData = nullptr;
spAnimationStateData* stateData = nullptr;
spSkeleton* skeleton = nullptr;
spAnimationState* state = nullptr;
spAtlas* atlas = 0;
spSkeletonData* skeletonData = 0;
spAnimationStateData* stateData = 0;
spSkeleton* skeleton = 0;
spAnimationState* state = 0;
//////////////////////////////////////////////////////////////////////////
// Initialize Animations
@ -179,7 +179,7 @@ void MemoryTestFixture::reproduceIssue_777()
DisposeAll(skeleton, state, stateData, skeletonData, atlas);
}
spSkeleton* skeleton = nullptr;
spSkeleton* skeleton = 0;
static void spineAnimStateHandler(spAnimationState* state, int type, spTrackEntry* entry, spEvent* event)
{
if (type == SP_ANIMATION_COMPLETE)
@ -192,10 +192,10 @@ static void spineAnimStateHandler(spAnimationState* state, int type, spTrackEnt
void MemoryTestFixture::reproduceIssue_Loop()
{
spAtlas* atlas = nullptr;
spSkeletonData* skeletonData = nullptr;
spAnimationStateData* stateData = nullptr;
spAnimationState* state = nullptr;
spAtlas* atlas = 0;
spSkeletonData* skeletonData = 0;
spAnimationStateData* stateData = 0;
spAnimationState* state = 0;
//////////////////////////////////////////////////////////////////////////
// Initialize Animations

View File

@ -13,7 +13,7 @@ SpineEventMonitor::SpineEventMonitor(spAnimationState* _pAnimationState /*= null
SpineEventMonitor::~SpineEventMonitor()
{
pAnimState = nullptr;
pAnimState = 0;
}
void SpineEventMonitor::RegisterListener(spAnimationState * _pAnimationState)
@ -28,7 +28,7 @@ void SpineEventMonitor::RegisterListener(spAnimationState * _pAnimationState)
bool SpineEventMonitor::isAnimationPlaying()
{
if (pAnimState)
return spAnimationState_getCurrent(pAnimState, 0) != nullptr;
return spAnimationState_getCurrent(pAnimState, 0) != 0;
return false;
}
@ -42,7 +42,7 @@ void SpineEventMonitor::spineAnimStateHandler(spAnimationState * state, int type
void SpineEventMonitor::OnSpineAnimationStateEvent(spAnimationState * state, int type, spTrackEntry * trackEntry, spEvent * event)
{
const char* eventName = nullptr;
const char* eventName = 0;
if (state == pAnimState) { // only monitor ours
switch(type)
{
@ -135,7 +135,7 @@ inline bool InterruptMonitor::InterruptEvent::matches(spAnimationState * state,
if (mEventType == type) {
// Looking for specific TrackEntry by pointer
if (mTrackEntry != nullptr) {
if (mTrackEntry != 0) {
return mTrackEntry == trackEntry;
}

View File

@ -25,7 +25,7 @@ typedef struct spEvent spEvent;
class SpineEventMonitor
{
public:
SpineEventMonitor(spAnimationState* _pAnimationState = nullptr);
SpineEventMonitor(spAnimationState* _pAnimationState = 0);
virtual ~SpineEventMonitor();
void RegisterListener(spAnimationState* _pAnimationState);
@ -58,7 +58,7 @@ private:
{
InterruptEvent() {
mEventType = -1; // invalid
mTrackEntry = nullptr;
mTrackEntry = 0;
}
bool matches(spAnimationState* state, int type, spTrackEntry* trackEntry, spEvent* event);
@ -72,7 +72,7 @@ private:
public:
InterruptMonitor(spAnimationState* _pAnimationState = nullptr);
InterruptMonitor(spAnimationState* _pAnimationState = 0);
~InterruptMonitor() {}
virtual bool isAnimationPlaying() override;
@ -119,4 +119,4 @@ eventMonitor
.AddInterruptEvent(SP_ANIMATION_START); // Then, stop on any following START signal
*/
*/

View File

@ -90,7 +90,8 @@ typedef enum {
SP_TIMELINE_TRANSFORMCONSTRAINT,
SP_TIMELINE_PATHCONSTRAINTPOSITION,
SP_TIMELINE_PATHCONSTRAINTSPACING,
SP_TIMELINE_PATHCONSTRAINTMIX
SP_TIMELINE_PATHCONSTRAINTMIX,
SP_TIMELINE_TWOCOLOR
} spTimelineType;
struct spTimeline {
@ -266,6 +267,36 @@ typedef spColorTimeline ColorTimeline;
/**/
static const int TWOCOLOR_ENTRIES = 8;
typedef struct spTwoColorTimeline {
spCurveTimeline super;
int const framesCount;
float* const frames; /* time, r, g, b, a, ... */
int slotIndex;
#ifdef __cplusplus
spTwoColorTimeline() :
super(),
framesCount(0),
frames(0),
slotIndex(0) {
}
#endif
} spTwoColorTimeline;
spTwoColorTimeline* spTwoColorTimeline_create (int framesCount);
void spTwoColorTimeline_setFrame (spTwoColorTimeline* self, int frameIndex, float time, float r, float g, float b, float a, float r2, float g2, float b2);
#ifdef SPINE_SHORT_NAMES
typedef spTwoColorTimeline TwoColorTimeline;
#define TwoColorTimeline_create(...) spTwoColorTimeline_create(__VA_ARGS__)
#define TwoColorTimeline_setFrame(...) spTwoColorTimeline_setFrame(__VA_ARGS__)
#endif
/**/
typedef struct spAttachmentTimeline {
spTimeline super;
int const framesCount;

View File

@ -42,7 +42,8 @@ typedef enum {
SP_ATTACHMENT_BOUNDING_BOX,
SP_ATTACHMENT_MESH,
SP_ATTACHMENT_LINKED_MESH,
SP_ATTACHMENT_PATH
SP_ATTACHMENT_PATH,
SP_ATTACHMENT_POINT
} spAttachmentType;
typedef struct spAttachment {

View File

@ -90,13 +90,13 @@ float spBone_getWorldRotationY (spBone* self);
float spBone_getWorldScaleX (spBone* self);
float spBone_getWorldScaleY (spBone* self);
float spBone_worldToLocalRotationX (spBone* self);
float spBone_worldToLocalRotationY (spBone* self);
void spBone_rotateWorld (spBone* self, float degrees);
void spBone_updateAppliedTransform (spBone* self);
void spBone_worldToLocal (spBone* self, float worldX, float worldY, float* localX, float* localY);
void spBone_localToWorld (spBone* self, float localX, float localY, float* worldX, float* worldY);
float spBone_worldToLocalRotation (spBone* self, float worldRotation);
float spBone_localToWorldRotation (spBone* self, float localRotation);
void spBone_rotateWorld (spBone* self, float degrees);
#ifdef SPINE_SHORT_NAMES
typedef spBone Bone;
@ -111,12 +111,12 @@ typedef spBone Bone;
#define Bone_getWorldRotationY(...) spBone_getWorldRotationY(__VA_ARGS__)
#define Bone_getWorldScaleX(...) spBone_getWorldScaleX(__VA_ARGS__)
#define Bone_getWorldScaleY(...) spBone_getWorldScaleY(__VA_ARGS__)
#define Bone_worldToLocalRotationX(...) spBone_worldToLocalRotationX(__VA_ARGS__)
#define Bone_worldToLocalRotationY(...) spBone_worldToLocalRotationY(__VA_ARGS__)
#define Bone_rotateWorld(...) spBone_rotateWorld(__VA_ARGS__)
#define Bone_updateAppliedTransform(...) spBone_updateAppliedTransform(__VA_ARGS__)
#define Bone_worldToLocal(...) spBone_worldToLocal(__VA_ARGS__)
#define Bone_localToWorld(...) spBone_localToWorld(__VA_ARGS__)
#define Bone_worldToLocalRotation(...) spBone_worldToLocalRotation(__VA_ARGS__)
#define Bone_localToWorldRotation(...) spBone_localToWorldRotation(__VA_ARGS__)
#define Bone_rotateWorld(...) spBone_rotateWorld(__VA_ARGS__)
#endif
#ifdef __cplusplus

View File

@ -45,12 +45,10 @@ typedef struct spBoundingBoxAttachment {
} spBoundingBoxAttachment;
spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name);
void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spSlot* slot, float* worldVertices);
#ifdef SPINE_SHORT_NAMES
typedef spBoundingBoxAttachment BoundingBoxAttachment;
#define BoundingBoxAttachment_create(...) spBoundingBoxAttachment_create(__VA_ARGS__)
#define BoundingBoxAttachment_computeWorldVertices(...) spBoundingBoxAttachment_computeWorldVertices(__VA_ARGS__)
#endif
#ifdef __cplusplus

View File

@ -0,0 +1,72 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef SPINE_COLOR_H_
#define SPINE_COLOR_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef struct spColor {
float r, g, b, a;
#ifdef __cplusplus
spColor() :
r(0), g(0), b(0), a(0) {
}
#endif
} spColor;
/* @param attachmentName May be 0 for no setup pose attachment. */
spColor* spColor_create();
void spColor_dispose(spColor* self);
void spColor_setFromFloats(spColor* color, float r, float g, float b, float a);
void spColor_setFromColor(spColor* color, spColor* otherColor);
void spColor_addFloats(spColor* color, float r, float g, float b, float a);
void spColor_addColor(spColor* color, spColor* otherColor);
void spColor_clamp(spColor* color);
#ifdef SPINE_SHORT_NAMES
typedef spColor color;
#define Color_create() spColor_create()
#define Color_dispose(...) spColor_dispose(__VA_ARGS__)
#define Color_setFromFloats(...) spColor_setFromFloats(__VA_ARGS__)
#define Color_setFromColor(...) spColor_setFromColor(__VA_ARGS__)
#define Color_addColor(...) spColor_addColor(__VA_ARGS__)
#define Color_addFloats(...) spColor_addFloats(__VA_ARGS__)
#define Color_clamp(...) spColor_clamp(__VA_ARGS__)
#endif
#ifdef __cplusplus
}
#endif
#endif /* SPINE_COLOR_H_ */

View File

@ -59,7 +59,7 @@ struct spMeshAttachment {
int trianglesCount;
unsigned short* triangles;
float r, g, b, a;
spColor color;
int hullLength;
@ -74,14 +74,12 @@ struct spMeshAttachment {
spMeshAttachment* spMeshAttachment_create (const char* name);
void spMeshAttachment_updateUVs (spMeshAttachment* self);
void spMeshAttachment_computeWorldVertices (spMeshAttachment* self, spSlot* slot, float* worldVertices);
void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* parentMesh);
#ifdef SPINE_SHORT_NAMES
typedef spMeshAttachment MeshAttachment;
#define MeshAttachment_create(...) spMeshAttachment_create(__VA_ARGS__)
#define MeshAttachment_updateUVs(...) spMeshAttachment_updateUVs(__VA_ARGS__)
#define MeshAttachment_computeWorldVertices(...) spMeshAttachment_computeWorldVertices(__VA_ARGS__)
#define MeshAttachment_setParentMesh(...) spMeshAttachment_setParentMesh(__VA_ARGS__)
#endif

View File

@ -48,8 +48,6 @@ typedef struct spPathAttachment {
} spPathAttachment;
spPathAttachment* spPathAttachment_create (const char* name);
void spPathAttachment_computeWorldVertices (spPathAttachment* self, spSlot* slot, float* worldVertices);
void spPathAttachment_computeWorldVertices1 (spPathAttachment* self, spSlot* slot, int start, int count, float* worldVertices, int offset);
#ifdef SPINE_SHORT_NAMES
typedef spPathAttachment PathAttachment;

View File

@ -0,0 +1,64 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#ifndef SPINE_POINTATTACHMENT_H_
#define SPINE_POINTATTACHMENT_H_
#include <spine/Attachment.h>
#include <spine/VertexAttachment.h>
#include <spine/Atlas.h>
#include <spine/Slot.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct spPointAttachment {
spVertexAttachment super;
float x, y, rotation;
spColor color;
} spPointAttachment;
spPointAttachment* spPointAttachment_create (const char* name);
void spPointAttachment_computeWorldPosition (spPointAttachment* self, spBone* bone, float* x, float* y);
float spPointAttachment_computeWorldRotation (spPointAttachment* self, spBone* bone);
#ifdef SPINE_SHORT_NAMES
typedef spPointAttachment PointAttachment;
#define PointAttachment_create(...) spPointAttachment_create(__VA_ARGS__)
#define PointAttachment_computeWorldPosition(...) spPointAttachment_computeWorldPosition(__VA_ARGS__)
#define PointAttachment_computeWorldRotation(...) spPointAttachment_computeWorldRotation(__VA_ARGS__)
#endif
#ifdef __cplusplus
}
#endif
#endif /* SPINE_POINTATTACHMENT_H_ */

View File

@ -47,7 +47,7 @@ typedef struct spRegionAttachment {
spAttachment super;
const char* path;
float x, y, scaleX, scaleY, rotation, width, height;
float r, g, b, a;
spColor color;
void* rendererObject;
int regionOffsetX, regionOffsetY; /* Pixels stripped from the bottom left, unrotated. */
@ -61,7 +61,7 @@ typedef struct spRegionAttachment {
spRegionAttachment* spRegionAttachment_create (const char* name);
void spRegionAttachment_setUVs (spRegionAttachment* self, float u, float v, float u2, float v2, int/*bool*/rotate);
void spRegionAttachment_updateOffset (spRegionAttachment* self);
void spRegionAttachment_computeWorldVertices (spRegionAttachment* self, spBone* bone, float* vertices);
void spRegionAttachment_computeWorldVertices (spRegionAttachment* self, spBone* bone, float* vertices, int offset, int stride);
#ifdef SPINE_SHORT_NAMES
typedef spVertexIndex VertexIndex;

View File

@ -63,7 +63,7 @@ typedef struct spSkeleton {
spPathConstraint** pathConstraints;
spSkin* const skin;
float r, g, b, a;
spColor color;
float time;
int/*bool*/flipX, flipY;
float x, y;
@ -85,7 +85,7 @@ typedef struct spSkeleton {
transformConstraints(0),
skin(0),
r(0), g(0), b(0), a(0),
color(),
time(0),
flipX(0),
flipY(0),

View File

@ -42,7 +42,8 @@ extern "C" {
typedef struct spSlot {
spSlotData* const data;
spBone* const bone;
float r, g, b, a;
spColor color;
spColor* darkColor;
spAttachment* const attachment;
int attachmentVerticesCapacity;
@ -53,7 +54,8 @@ typedef struct spSlot {
spSlot() :
data(0),
bone(0),
r(0), g(0), b(0), a(0),
color(),
darkColor(0),
attachment(0),
attachmentVerticesCapacity(0),
attachmentVerticesCount(0),

View File

@ -32,6 +32,7 @@
#define SPINE_SLOTDATA_H_
#include <spine/BoneData.h>
#include <spine/Color.h>
#ifdef __cplusplus
extern "C" {
@ -46,7 +47,8 @@ typedef struct spSlotData {
const char* const name;
const spBoneData* const boneData;
const char* attachmentName;
float r, g, b, a;
spColor color;
spColor* darkColor;
spBlendMode blendMode;
#ifdef __cplusplus
@ -55,7 +57,8 @@ typedef struct spSlotData {
name(0),
boneData(0),
attachmentName(0),
r(0), g(0), b(0), a(0),
color(),
darkColor(0),
blendMode(SP_BLEND_MODE_NORMAL) {
}
#endif

View File

@ -45,6 +45,8 @@ typedef struct spTransformConstraintData {
spBoneData* target;
float rotateMix, translateMix, scaleMix, shearMix;
float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY;
int /*boolean*/ relative;
int /*boolean*/ local;
#ifdef __cplusplus
spTransformConstraintData() :
@ -61,7 +63,9 @@ typedef struct spTransformConstraintData {
offsetY(0),
offsetScaleX(0),
offsetScaleY(0),
offsetShearY(0) {
offsetShearY(0),
relative(0),
local(0) {
}
#endif
} spTransformConstraintData;

View File

@ -51,13 +51,11 @@ struct spVertexAttachment {
int worldVerticesLength;
};
void spVertexAttachment_computeWorldVertices (spVertexAttachment* self, spSlot* slot, float* worldVertices);
void spVertexAttachment_computeWorldVertices1 (spVertexAttachment* self, int start, int count, spSlot* slot, float* worldVertices, int offset);
void spVertexAttachment_computeWorldVertices (spVertexAttachment* self, spSlot* slot, int start, int count, float* worldVertices, int offset, int stride);
#ifdef SPINE_SHORT_NAMES
typedef spVertexAttachment VertexAttachment;
#define VertexAttachment_computeWorldVertices(...) spVertexAttachment_computeWorldVertices(__VA_ARGS__)
#define VertexAttachment_computeWorldVertices1(...) spVertexAttachment_computeWorldVertices1(__VA_ARGS__)
#endif
#ifdef __cplusplus

View File

@ -135,6 +135,7 @@
#include <spine/MeshAttachment.h>
#include <spine/BoundingBoxAttachment.h>
#include <spine/PathAttachment.h>
#include <spine/PointAttachment.h>
#include <spine/AnimationState.h>
#ifdef __cplusplus

View File

@ -44,6 +44,7 @@
#include <spine/VertexAttachment.h>
#include <spine/MeshAttachment.h>
#include <spine/BoundingBoxAttachment.h>
#include <spine/PointAttachment.h>
#include <spine/Skeleton.h>
#include <spine/SkeletonBounds.h>
#include <spine/SkeletonData.h>

View File

@ -528,10 +528,7 @@ void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f
if (time < self->frames[0]) {
if (setupPose) {
slot->r = slot->data->r;
slot->g = slot->data->g;
slot->b = slot->data->b;
slot->a = slot->data->a;
spColor_setFromColor(&slot->color, &slot->data->color);
}
return;
}
@ -561,21 +558,12 @@ void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f
a += (self->frames[frame + COLOR_A] - a) * percent;
}
if (alpha == 1) {
slot->r = r;
slot->g = g;
slot->b = b;
slot->a = a;
spColor_setFromFloats(&slot->color, r, g, b, a);
} else {
if (setupPose) {
slot->r = slot->data->r;
slot->g = slot->data->g;
slot->b = slot->data->b;
slot->a = slot->data->a;
spColor_setFromColor(&slot->color, &slot->data->color);
}
slot->r += (r - slot->r) * alpha;
slot->g += (g - slot->g) * alpha;
slot->b += (b - slot->b) * alpha;
slot->a += (a - slot->a) * alpha;
spColor_addFloats(&slot->color, (r - slot->color.r) * alpha, (g - slot->color.g) * alpha, (b - slot->color.b) * alpha, (a - slot->color.a) * alpha);
}
UNUSED(lastTime);
@ -602,6 +590,103 @@ void spColorTimeline_setFrame (spColorTimeline* self, int frameIndex, float time
/**/
static const int TWOCOLOR_PREV_TIME = -8, TWOCOLOR_PREV_R = -7, TWOCOLOR_PREV_G = -6, TWOCOLOR_PREV_B = -5, TWOCOLOR_PREV_A = -4;
static const int TWOCOLOR_PREV_R2 = -3, TWOCOLOR_PREV_G2 = -2, TWOCOLOR_PREV_B2 = -1;
static const int TWOCOLOR_R = 1, TWOCOLOR_G = 2, TWOCOLOR_B = 3, TWOCOLOR_A = 4, TWOCOLOR_R2 = 5, TWOCOLOR_G2 = 6, TWOCOLOR_B2 = 7;
void _spTwoColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents,
int* eventsCount, float alpha, int setupPose, int mixingOut) {
spSlot *slot;
int frame;
float percent, frameTime;
float r, g, b, a, r2, g2, b2;
spColor* light;
spColor* dark;
spColorTimeline* self = (spColorTimeline*)timeline;
slot = skeleton->slots[self->slotIndex];
if (time < self->frames[0]) {
if (setupPose) {
spColor_setFromColor(&slot->color, &slot->data->color);
spColor_setFromColor(slot->darkColor, slot->data->darkColor);
}
return;
}
if (time >= self->frames[self->framesCount - TWOCOLOR_ENTRIES]) { /* Time is after last frame */
int i = self->framesCount;
r = self->frames[i + TWOCOLOR_PREV_R];
g = self->frames[i + TWOCOLOR_PREV_G];
b = self->frames[i + TWOCOLOR_PREV_B];
a = self->frames[i + TWOCOLOR_PREV_A];
r2 = self->frames[i + TWOCOLOR_PREV_R2];
g2 = self->frames[i + TWOCOLOR_PREV_G2];
b2 = self->frames[i + TWOCOLOR_PREV_B2];
} else {
/* Interpolate between the previous frame and the current frame. */
frame = binarySearch(self->frames, self->framesCount, time, TWOCOLOR_ENTRIES);
r = self->frames[frame + TWOCOLOR_PREV_R];
g = self->frames[frame + TWOCOLOR_PREV_G];
b = self->frames[frame + TWOCOLOR_PREV_B];
a = self->frames[frame + TWOCOLOR_PREV_A];
r2 = self->frames[frame + TWOCOLOR_PREV_R2];
g2 = self->frames[frame + TWOCOLOR_PREV_G2];
b2 = self->frames[frame + TWOCOLOR_PREV_B2];
frameTime = self->frames[frame];
percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / TWOCOLOR_ENTRIES - 1,
1 - (time - frameTime) / (self->frames[frame + TWOCOLOR_PREV_TIME] - frameTime));
r += (self->frames[frame + TWOCOLOR_R] - r) * percent;
g += (self->frames[frame + TWOCOLOR_G] - g) * percent;
b += (self->frames[frame + TWOCOLOR_B] - b) * percent;
a += (self->frames[frame + TWOCOLOR_A] - a) * percent;
r2 += (self->frames[frame + TWOCOLOR_R2] - r2) * percent;
g2 += (self->frames[frame + TWOCOLOR_G2] - g2) * percent;
b2 += (self->frames[frame + TWOCOLOR_B2] - b2) * percent;
}
if (alpha == 1) {
spColor_setFromFloats(&slot->color, r, g, b, a);
spColor_setFromFloats(slot->darkColor, r2, g2, b2, 1);
} else {
light = &slot->color;
dark = slot->darkColor;
if (setupPose) {
spColor_setFromColor(light, &slot->data->color);
spColor_setFromColor(dark, slot->data->darkColor);
}
spColor_addFloats(light, (r - light->r) * alpha, (g - light->g) * alpha, (b - light->b) * alpha, (a - light->a) * alpha);
spColor_addFloats(dark, (r2 - dark->r) * alpha, (g2 - dark->g) * alpha, (b2 - dark->b) * alpha, 0);
}
UNUSED(lastTime);
UNUSED(firedEvents);
UNUSED(eventsCount);
}
int _spTwoColorTimeline_getPropertyId (const spTimeline* timeline) {
return (SP_TIMELINE_TWOCOLOR << 24) + SUB_CAST(spTwoColorTimeline, timeline)->slotIndex;
}
spTwoColorTimeline* spTwoColorTimeline_create (int framesCount) {
return (spTwoColorTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_TWOCOLOR, TWOCOLOR_ENTRIES, _spTwoColorTimeline_apply, _spTwoColorTimeline_getPropertyId);
}
void spTwoColorTimeline_setFrame (spTwoColorTimeline* self, int frameIndex, float time, float r, float g, float b, float a, float r2, float g2, float b2) {
frameIndex *= TWOCOLOR_ENTRIES;
self->frames[frameIndex] = time;
self->frames[frameIndex + TWOCOLOR_R] = r;
self->frames[frameIndex + TWOCOLOR_G] = g;
self->frames[frameIndex + TWOCOLOR_B] = b;
self->frames[frameIndex + TWOCOLOR_A] = a;
self->frames[frameIndex + TWOCOLOR_R2] = r2;
self->frames[frameIndex + TWOCOLOR_G2] = g2;
self->frames[frameIndex + TWOCOLOR_B2] = b2;
}
/**/
void _spAttachmentTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time,
spEvent** firedEvents, int* eventsCount, float alpha, int setupPose, int mixingOut) {
const char* attachmentName;

View File

@ -142,7 +142,7 @@ void _spEventQueue_drain (_spEventQueue* self) {
if (self->drainDisabled) return;
self->drainDisabled = 1;
for (i = 0; i < self->objectsCount; i += 2) {
spEventType type = self->objects[i].type;
spEventType type = (spEventType)self->objects[i].type;
spTrackEntry* entry = self->objects[i+1].entry;
spEvent* event;
switch (type) {
@ -534,12 +534,13 @@ void _spAnimationState_queueEvents (spAnimationState* self, spTrackEntry* entry,
void spAnimationState_clearTracks (spAnimationState* self) {
_spAnimationState* internal = SUB_CAST(_spAnimationState, self);
int i, n;
int i, n, oldDrainDisabled;
oldDrainDisabled = internal->queue->drainDisabled;
internal->queue->drainDisabled = 1;
for (i = 0, n = self->tracksCount; i < n; i++)
spAnimationState_clearTrack(self, i);
self->tracksCount = 0;
internal->queue->drainDisabled = 0;
internal->queue->drainDisabled = oldDrainDisabled;
_spEventQueue_drain(internal->queue);
}
@ -674,15 +675,16 @@ spTrackEntry* spAnimationState_addEmptyAnimation(spAnimationState* self, int tra
}
void spAnimationState_setEmptyAnimations(spAnimationState* self, float mixDuration) {
int i, n;
int i, n, oldDrainDisabled;
spTrackEntry* current;
_spAnimationState* internal = SUB_CAST(_spAnimationState, self);
oldDrainDisabled = internal->queue->drainDisabled;
internal->queue->drainDisabled = 1;
for (i = 0, n = self->tracksCount; i < n; i++) {
current = self->tracks[i];
if (current) spAnimationState_setEmptyAnimation(self, current->trackIndex, mixDuration);
}
internal->queue->drainDisabled = 0;
internal->queue->drainDisabled = oldDrainDisabled;
_spEventQueue_drain(internal->queue);
}

View File

@ -80,6 +80,8 @@ spAttachment* _spAtlasAttachmentLoader_createAttachment (spAttachmentLoader* loa
return SUPER(SUPER(spBoundingBoxAttachment_create(name)));
case SP_ATTACHMENT_PATH:
return SUPER(SUPER(spPathAttachment_create(name)));
case SP_ATTACHMENT_POINT:
return SUPER(SUPER(spPointAttachment_create(name)));
default:
_spAttachmentLoader_setUnknownTypeError(loader, type);
return 0;

View File

@ -218,29 +218,6 @@ float spBone_getWorldScaleY (spBone* self) {
return SQRT(self->b * self->b + self->d * self->d);
}
float spBone_worldToLocalRotationX (spBone* self) {
spBone* parent = self->parent;
if (!parent) return self->arotation;
return ATAN2(parent->a * self->c - parent->c * self->a, parent->d * self->a - parent->b * self->c) * RAD_DEG;
}
float spBone_worldToLocalRotationY (spBone* self) {
spBone* parent = self->parent;
if (!parent) return self->arotation;
return ATAN2(parent->a * self->d - parent->c * self->b, parent->d * self->b - parent->b * self->d) * RAD_DEG;
}
void spBone_rotateWorld (spBone* self, float degrees) {
float a = self->a, b = self->b, c = self->c, d = self->d;
float cosine = COS_DEG(degrees), sine = SIN_DEG(degrees);
CONST_CAST(float, self->a) = cosine * a - sine * c;
CONST_CAST(float, self->b) = cosine * b - sine * d;
CONST_CAST(float, self->c) = sine * a + cosine * c;
CONST_CAST(float, self->d) = sine * b + cosine * d;
CONST_CAST(int, self->appliedValid) = 1;
}
/** Computes the individual applied transform values from the world transform. This can be useful to perform processing using
* the applied transform after the world transform has been modified directly (eg, by a constraint).
* <p>
@ -299,3 +276,27 @@ void spBone_localToWorld (spBone* self, float localX, float localY, float* world
*worldX = x * self->a + y * self->b + self->worldX;
*worldY = x * self->c + y * self->d + self->worldY;
}
float spBone_worldToLocalRotation (spBone* self, float worldRotation) {
float sine, cosine;
sine = SIN_DEG(worldRotation);
cosine = COS_DEG(worldRotation);
return ATAN2(self->a * sine - self->c * cosine, self->d * cosine - self->b * sine) * RAD_DEG;
}
float spBone_localToWorldRotation (spBone* self, float localRotation) {
float sine, cosine;
sine = SIN_DEG(localRotation);
cosine = COS_DEG(localRotation);
return ATAN2(cosine * self->c + sine * self->d, cosine * self->a + sine * self->b) * RAD_DEG;
}
void spBone_rotateWorld (spBone* self, float degrees) {
float a = self->a, b = self->b, c = self->c, d = self->d;
float cosine = COS_DEG(degrees), sine = SIN_DEG(degrees);
CONST_CAST(float, self->a) = cosine * a - sine * c;
CONST_CAST(float, self->b) = cosine * b - sine * d;
CONST_CAST(float, self->c) = sine * a + cosine * c;
CONST_CAST(float, self->d) = sine * b + cosine * d;
CONST_CAST(int, self->appliedValid) = 0;
}

View File

@ -44,7 +44,3 @@ spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name) {
_spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_BOUNDING_BOX, _spBoundingBoxAttachment_dispose);
return self;
}
void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spSlot* slot, float* worldVertices) {
spVertexAttachment_computeWorldVertices(SUPER(self), slot, worldVertices);
}

View File

@ -0,0 +1,84 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include <spine/Color.h>
#include <spine/extension.h>
spColor* spColor_create() {
return MALLOC(spColor, 1);
}
void spColor_dispose(spColor* self) {
if (self) FREE(self);
}
void spColor_setFromFloats(spColor* self, float r, float g, float b, float a) {
self->r = r;
self->g = g;
self->b = b;
self->a = a;
}
void spColor_setFromColor(spColor* self, spColor* otherColor) {
self->r = otherColor->r;
self->g = otherColor->g;
self->b = otherColor->b;
self->a = otherColor->a;
}
void spColor_addColor(spColor* self, spColor* otherColor) {
self->r += otherColor->r;
self->g += otherColor->g;
self->b += otherColor->b;
self->a += otherColor->a;
spColor_clamp(self);
}
void spColor_addFloats(spColor* self, float r, float g, float b, float a) {
self->r += r;
self->g += g;
self->b += b;
self->a += a;
spColor_clamp(self);
}
void spColor_clamp(spColor* self) {
if (self->r < 0) self->r = 0;
else if (self->r > 1) self->r = 1;
if (self->g < 0) self->g = 0;
else if (self->g > 1) self->g = 1;
if (self->b < 0) self->b = 0;
else if (self->b > 1) self->b = 1;
if (self->a < 0) self->a = 0;
else if (self->a > 1) self->a = 1;
}

View File

@ -47,10 +47,7 @@ void _spMeshAttachment_dispose (spAttachment* attachment) {
spMeshAttachment* spMeshAttachment_create (const char* name) {
spMeshAttachment* self = NEW(spMeshAttachment);
self->r = 1;
self->g = 1;
self->b = 1;
self->a = 1;
spColor_setFromFloats(&self->color, 1, 1, 1, 1);
_spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_MESH, _spMeshAttachment_dispose);
return self;
}
@ -74,14 +71,9 @@ void spMeshAttachment_updateUVs (spMeshAttachment* self) {
}
}
void spMeshAttachment_computeWorldVertices (spMeshAttachment* self, spSlot* slot, float* worldVertices) {
spVertexAttachment_computeWorldVertices(SUPER(self), slot, worldVertices);
}
void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* parentMesh) {
CONST_CAST(spMeshAttachment*, self->parentMesh) = parentMesh;
if (parentMesh) {
self->super.worldVerticesLength = parentMesh->super.worldVerticesLength;
self->super.bones = parentMesh->super.bones;
self->super.bonesCount = parentMesh->super.bonesCount;
@ -95,6 +87,8 @@ void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* p
self->trianglesCount = parentMesh->trianglesCount;
self->hullLength = parentMesh->hullLength;
self->super.worldVerticesLength = parentMesh->super.worldVerticesLength;
self->edges = parentMesh->edges;
self->edgesCount = parentMesh->edgesCount;

View File

@ -45,11 +45,3 @@ spPathAttachment* spPathAttachment_create (const char* name) {
_spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_PATH, _spPathAttachment_dispose);
return self;
}
void spPathAttachment_computeWorldVertices (spPathAttachment* self, spSlot* slot, float* worldVertices) {
spVertexAttachment_computeWorldVertices(SUPER(self), slot, worldVertices);
}
void spPathAttachment_computeWorldVertices1 (spPathAttachment* self, spSlot* slot, int start, int count, float* worldVertices, int offset) {
spVertexAttachment_computeWorldVertices1(SUPER(self), start, count, slot, worldVertices, offset);
}

View File

@ -74,7 +74,7 @@ void spPathConstraint_dispose (spPathConstraint* self) {
void spPathConstraint_apply (spPathConstraint* self) {
int i, p, n;
float length, x, y, dx, dy, s;
float length, setupLength, x, y, dx, dy, s;
float* spaces, *lengths, *positions;
float spacing;
float boneX, boneY, offsetRotation;
@ -114,10 +114,10 @@ void spPathConstraint_apply (spPathConstraint* self) {
}
for (i = 0, n = spacesCount - 1; i < n;) {
spBone* bone = bones[i];
length = bone->data->length, x = length * bone->a, y = length * bone->c;
setupLength = bone->data->length, x = setupLength * bone->a, y = setupLength * bone->c;
length = SQRT(x * x + y * y);
if (scale) lengths[i] = length;
spaces[++i] = lengthSpacing ? MAX(0, length + spacing) : spacing;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
}
} else {
for (i = 1; i < spacesCount; i++) {
@ -256,14 +256,14 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
} else if (p < 0) {
if (prevCurve != PATHCONSTRAINT_BEFORE) {
prevCurve = PATHCONSTRAINT_BEFORE;
spPathAttachment_computeWorldVertices1(path, target, 2, 4, world, 0);
spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, 4, world, 0, 2);
}
_addBeforePosition(p, world, 0, out, o);
continue;
} else if (p > pathLength) {
if (prevCurve != PATHCONSTRAINT_AFTER) {
prevCurve = PATHCONSTRAINT_AFTER;
spPathAttachment_computeWorldVertices1(path, target, verticesLength - 6, 4, world, 0);
spVertexAttachment_computeWorldVertices(SUPER(path), target, verticesLength - 6, 4, world, 0, 2);
}
_addAfterPosition(p - pathLength, world, 0, out, o);
continue;
@ -284,10 +284,10 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
if (curve != prevCurve) {
prevCurve = curve;
if (closed && curve == curveCount) {
spPathAttachment_computeWorldVertices1(path, target, verticesLength - 4, 4, world, 0);
spPathAttachment_computeWorldVertices1(path, target, 0, 4, world, 4);
spVertexAttachment_computeWorldVertices(SUPER(path), target, verticesLength - 4, 4, world, 0, 2);
spVertexAttachment_computeWorldVertices(SUPER(path), target, 0, 4, world, 4, 2);
} else
spPathAttachment_computeWorldVertices1(path, target, curve * 6 + 2, 8, world, 0);
spVertexAttachment_computeWorldVertices(SUPER(path), target, curve * 6 + 2, 8, world, 0, 2);
}
_addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o,
tangents || (i > 0 && space == 0));
@ -304,8 +304,8 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
self->worldCount = verticesLength;
}
world = self->world;
spPathAttachment_computeWorldVertices1(path, target, 2, verticesLength - 4, world, 0);
spPathAttachment_computeWorldVertices1(path, target, 0, 2, world, verticesLength - 4);
spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, verticesLength - 4, world, 0, 2);
spVertexAttachment_computeWorldVertices(SUPER(path), target, 0, 2, world, verticesLength - 4, 2);
world[verticesLength - 2] = world[0];
world[verticesLength - 1] = world[1];
} else {
@ -317,7 +317,7 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
self->worldCount = verticesLength;
}
world = self->world;
spPathAttachment_computeWorldVertices1(path, target, 2, verticesLength, world, 0);
spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, verticesLength, world, 0, 2);
}
/* Curve lengths. */

View File

@ -0,0 +1,60 @@
/******************************************************************************
* Spine Runtimes Software License v2.5
*
* Copyright (c) 2013-2016, Esoteric Software
* All rights reserved.
*
* You are granted a perpetual, non-exclusive, non-sublicensable, and
* non-transferable license to use, install, execute, and perform the Spine
* Runtimes software and derivative works solely for personal or internal
* use. Without the written permission of Esoteric Software (see Section 2 of
* the Spine Software License Agreement), you may not (a) modify, translate,
* adapt, or develop new applications using the Spine Runtimes or otherwise
* create derivative works or improvements of the Spine Runtimes or (b) remove,
* delete, alter, or obscure any trademarks or any copyright, trademark, patent,
* or other intellectual property or proprietary rights notices on or in the
* Software, including any copy thereof. Redistributions in binary or source
* form must include this license and terms.
*
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF
* USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#include <spine/PointAttachment.h>
#include <spine/extension.h>
void _spPointAttachment_dispose (spAttachment* attachment) {
spPathAttachment* self = SUB_CAST(spPathAttachment, attachment);
_spVertexAttachment_deinit(SUPER(self));
FREE(self);
}
spPointAttachment* spPointAttachment_create (const char* name) {
spPointAttachment* self = NEW(spPointAttachment);
_spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_POINT, _spPointAttachment_dispose);
return self;
}
void spPointAttachment_computeWorldPosition (spPointAttachment* self, spBone* bone, float* x, float* y) {
*x = self->x * bone->a + self->y * bone->b + bone->worldX;
*y = self->x * bone->c + self->y * bone->d + bone->worldY;
}
float spPointAttachment_computeWorldRotation (spPointAttachment* self, spBone* bone) {
float cosine, sine, x, y;
cosine = COS_DEG(self->rotation);
sine = SIN_DEG(self->rotation);
x = cosine * bone->a + sine * bone->b;
y = cosine * bone->c + sine * bone->d;
return ATAN2(y, x) * RAD_DEG;
}

View File

@ -42,10 +42,7 @@ spRegionAttachment* spRegionAttachment_create (const char* name) {
spRegionAttachment* self = NEW(spRegionAttachment);
self->scaleX = 1;
self->scaleY = 1;
self->r = 1;
self->g = 1;
self->b = 1;
self->a = 1;
spColor_setFromFloats(&self->color, 1, 1, 1, 1);
_spAttachment_init(SUPER(self), name, SP_ATTACHMENT_REGION, _spRegionAttachment_dispose);
return self;
}
@ -99,15 +96,22 @@ void spRegionAttachment_updateOffset (spRegionAttachment* self) {
self->offset[SP_VERTEX_Y4] = localYCos + localX2Sin;
}
void spRegionAttachment_computeWorldVertices (spRegionAttachment* self, spBone* bone, float* vertices) {
const float* offset = self->offset;
void spRegionAttachment_computeWorldVertices (spRegionAttachment* self, spBone* bone, float* vertices, int offset, int stride) {
const float* offsets = self->offset;
float x = bone->worldX, y = bone->worldY;
vertices[SP_VERTEX_X1] = offset[SP_VERTEX_X1] * bone->a + offset[SP_VERTEX_Y1] * bone->b + x;
vertices[SP_VERTEX_Y1] = offset[SP_VERTEX_X1] * bone->c + offset[SP_VERTEX_Y1] * bone->d + y;
vertices[SP_VERTEX_X2] = offset[SP_VERTEX_X2] * bone->a + offset[SP_VERTEX_Y2] * bone->b + x;
vertices[SP_VERTEX_Y2] = offset[SP_VERTEX_X2] * bone->c + offset[SP_VERTEX_Y2] * bone->d + y;
vertices[SP_VERTEX_X3] = offset[SP_VERTEX_X3] * bone->a + offset[SP_VERTEX_Y3] * bone->b + x;
vertices[SP_VERTEX_Y3] = offset[SP_VERTEX_X3] * bone->c + offset[SP_VERTEX_Y3] * bone->d + y;
vertices[SP_VERTEX_X4] = offset[SP_VERTEX_X4] * bone->a + offset[SP_VERTEX_Y4] * bone->b + x;
vertices[SP_VERTEX_Y4] = offset[SP_VERTEX_X4] * bone->c + offset[SP_VERTEX_Y4] * bone->d + y;
vertices[offset] = offsets[SP_VERTEX_X1] * bone->a + offsets[SP_VERTEX_Y1] * bone->b + x; /* br */
vertices[offset + 1] = offsets[SP_VERTEX_X1] * bone->c + offsets[SP_VERTEX_Y1] * bone->d + y;
offset += stride;
vertices[offset] = offsets[SP_VERTEX_X2] * bone->a + offsets[SP_VERTEX_Y2] * bone->b + x; /* bl */
vertices[offset + 1] = offsets[SP_VERTEX_X2] * bone->c + offsets[SP_VERTEX_Y2] * bone->d + y;
offset += stride;
vertices[offset] = offsets[SP_VERTEX_X3] * bone->a + offsets[SP_VERTEX_Y3] * bone->b + x; /* ul */
vertices[offset + 1] = offsets[SP_VERTEX_X3] * bone->c + offsets[SP_VERTEX_Y3] * bone->d + y;
offset += stride;
vertices[offset] = offsets[SP_VERTEX_X4] * bone->a + offsets[SP_VERTEX_Y4] * bone->b + x; /* ur */
vertices[offset + 1] = offsets[SP_VERTEX_X4] * bone->c + offsets[SP_VERTEX_Y4] * bone->d + y;
}

View File

@ -117,7 +117,7 @@ spSkeleton* spSkeleton_create (spSkeletonData* data) {
for (i = 0; i < self->data->pathConstraintsCount; i++)
self->pathConstraints[i] = spPathConstraint_create(self->data->pathConstraints[i], self);
self->r = 1; self->g = 1; self->b = 1; self->a = 1;
spColor_setFromFloats(&self->color, 1, 1, 1, 1);
spSkeleton_updateCache(self);
@ -161,7 +161,7 @@ static void _addToUpdateCache(_spSkeleton* const internal, _spUpdateType type, v
_spUpdate* update;
if (internal->updateCacheCount == internal->updateCacheCapacity) {
internal->updateCacheCapacity *= 2;
internal->updateCache = realloc(internal->updateCache, sizeof(_spUpdate) * internal->updateCacheCapacity);
internal->updateCache = (_spUpdate*)realloc(internal->updateCache, sizeof(_spUpdate) * internal->updateCacheCapacity);
}
update = internal->updateCache + internal->updateCacheCount;
update->type = type;
@ -172,7 +172,7 @@ static void _addToUpdateCache(_spSkeleton* const internal, _spUpdateType type, v
static void _addToUpdateCacheReset(_spSkeleton* const internal, spBone* bone) {
if (internal->updateCacheResetCount == internal->updateCacheResetCapacity) {
internal->updateCacheResetCapacity *= 2;
internal->updateCacheReset = realloc(internal->updateCacheReset, sizeof(spBone*) * internal->updateCacheResetCapacity);
internal->updateCacheReset = (spBone**)realloc(internal->updateCacheReset, sizeof(spBone*) * internal->updateCacheResetCapacity);
}
internal->updateCacheReset[internal->updateCacheResetCount] = bone;
++internal->updateCacheResetCount;
@ -258,48 +258,66 @@ static void _sortPathConstraint(_spSkeleton* const internal, spPathConstraint* c
spSlot* slot = constraint->target;
int slotIndex = slot->data->index;
spBone* slotBone = slot->bone;
int ii, nn, boneCount;
int i, n, boneCount;
spAttachment* attachment;
spBone** constrained;
spSkeleton* skeleton = SUPER_CAST(spSkeleton, internal);
if (skeleton->skin) _sortPathConstraintAttachment(internal, skeleton->skin, slotIndex, slotBone);
if (skeleton->data->defaultSkin && skeleton->data->defaultSkin != skeleton->skin)
_sortPathConstraintAttachment(internal, skeleton->data->defaultSkin, slotIndex, slotBone);
for (ii = 0, nn = skeleton->data->skinsCount; ii < nn; ii++)
_sortPathConstraintAttachment(internal, skeleton->data->skins[ii], slotIndex, slotBone);
for (i = 0, n = skeleton->data->skinsCount; i < n; i++)
_sortPathConstraintAttachment(internal, skeleton->data->skins[i], slotIndex, slotBone);
attachment = slot->attachment;
if (attachment->type == SP_ATTACHMENT_PATH) _sortPathConstraintAttachmentBones(internal, attachment, slotBone);
constrained = constraint->bones;
boneCount = constraint->bonesCount;
for (ii = 0; ii < boneCount; ii++)
_sortBone(internal, constrained[ii]);
for (i = 0; i < boneCount; i++)
_sortBone(internal, constrained[i]);
_addToUpdateCache(internal, SP_UPDATE_PATH_CONSTRAINT, constraint);
for (ii = 0; ii < boneCount; ii++)
_sortReset(constrained[ii]->children, constrained[ii]->childrenCount);
for (ii = 0; ii < boneCount; ii++)
constrained[ii]->sorted = 1;
for (i = 0; i < boneCount; i++)
_sortReset(constrained[i]->children, constrained[i]->childrenCount);
for (i = 0; i < boneCount; i++)
constrained[i]->sorted = 1;
}
static void _sortTransformConstraint(_spSkeleton* const internal, spTransformConstraint* constraint) {
int ii, boneCount;
int i, boneCount;
spBone** constrained;
spBone* child;
int /*boolean*/ contains = 0;
_sortBone(internal, constraint->target);
constrained = constraint->bones;
boneCount = constraint->bonesCount;
for (ii = 0; ii < boneCount; ii++)
_sortBone(internal, constrained[ii]);
if (constraint->data->local) {
for (i = 0; i < boneCount; i++) {
child = constrained[boneCount - 1];
_sortBone(internal, child);
contains = 0;
for (i = 0; i < internal->updateCacheCount; i++) {
_spUpdate update = internal->updateCache[i];
if (update.object == child) {
contains = -1;
break;
}
}
if (!contains) _addToUpdateCacheReset(internal, child);
}
} else {
for (i = 0; i < boneCount; i++)
_sortBone(internal, constrained[i]);
}
_addToUpdateCache(internal, SP_UPDATE_TRANSFORM_CONSTRAINT, constraint);
for (ii = 0; ii < boneCount; ii++)
_sortReset(constrained[ii]->children, constrained[ii]->childrenCount);
for (ii = 0; ii < boneCount; ii++)
constrained[ii]->sorted = 1;
for (i = 0; i < boneCount; i++)
_sortReset(constrained[i]->children, constrained[i]->childrenCount);
for (i = 0; i < boneCount; i++)
constrained[i]->sorted = 1;
}
void spSkeleton_updateCache (spSkeleton* self) {

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