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-threejs/spine-js/spine.js
spine-ts/.vscode/* 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": [ "bones": [
{ "name": "root", "y": -176.12 }, { "name": "root", "y": -176.12 },
{ "name": "COG", "parent": "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": "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.58, "y": 7.92 }, { "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.57, "rotation": 43.36, "x": 67.42, "y": 0.02 }, { "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.44, "rotation": -98, "x": 45.53, "y": 2.43 }, { "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.97, "rotation": -55.26, "x": 51.57, "y": -0.12 }, { "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.13, "x": 54.19, "y": 0.6, "scaleX": 1.134 }, { "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.42, "x": 50.6, "y": 7.08, "scaleX": 1.134 }, { "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.37, "rotation": 151.83, "x": 16.03, "y": 27.94 }, { "name": "back", "parent": "COG", "length": 115.38, "rotation": 151.83, "x": 16.04, "y": 27.94 },
{ "name": "R_rear_thigh", "parent": "back", "length": 123.46, "rotation": 104.87, "x": 65.31, "y": 59.89 }, { "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.05, "rotation": 28.35, "x": -8.59, "y": 30.18 }, { "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_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": "L_wing", "parent": "chest", "length": 301.12, "rotation": -75.51, "x": -7.25, "y": -24.66 },
{ "name": "R_front_thigh", "parent": "chest", "length": 81.63, "rotation": 67.96, "x": -10.89, "y": 28.25 }, { "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.52, "rotation": 92.7, "x": 83.04, "y": -0.3 }, { "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.65, "rotation": 8.59, "x": 70.03, "y": 5.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.66, "rotation": -35.02, "x": 66.52, "y": 0.33 }, { "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.38, "rotation": -74.67, "x": 62.1, "y": -0.79 }, { "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.46, "y": -0.26 }, { "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": 94.99, "rotation": 141.98, "x": 90.06, "y": 2.12 }, { "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_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": "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.36, "rotation": 39.05, "x": 64.75, "y": 11.98 }, { "name": "neck", "parent": "COG", "length": 41.37, "rotation": 39.06, "x": 64.76, "y": 11.98 },
{ "name": "head", "parent": "neck", "length": 188.83, "rotation": 8.06, "x": 69.96, "y": 2.49 }, { "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.9 }, { "name": "R_wing", "parent": "head", "length": 359.5, "rotation": 83.21, "x": -74.68, "y": 20.91 },
{ "name": "chin", "parent": "neck", "length": 153.15, "rotation": -69.07, "x": 64.62, "y": -6.99 }, { "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.31, "x": 115.37, "y": -0.19 }, { "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.22 }, { "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": "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": "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": "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.32, "y": -0.23 } { "name": "tail6", "parent": "tail5", "length": 80.08, "rotation": -29.55, "x": 32.33, "y": -0.23 }
], ],
"slots": [ "slots": [
{ "name": "L_rear_leg", "bone": "L_rear_leg", "attachment": "L_rear_leg" }, { "name": "L_rear_leg", "bone": "L_rear_leg", "attachment": "L_rear_leg" },
@ -71,113 +71,113 @@
"skins": { "skins": {
"default": { "default": {
"L_front_leg": { "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": {
"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": { "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": { "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": { "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": { "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": {
"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": {
"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_wing": {
"L_wing01": { "x": 129.21, "y": -45.49, "rotation": -83.7, "width": 191, "height": 256 }, "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_wing02": { "x": 126.38, "y": -31.69, "rotation": -86.19, "width": 179, "height": 269 },
"L_wing03": { "x": 110.26, "y": -90.89, "rotation": -86.18, "width": 186, "height": 207 }, "L_wing03": { "x": 110.27, "y": -90.89, "rotation": -86.19, "width": 186, "height": 207 },
"L_wing04": { "x": -61.61, "y": -83.26, "rotation": -86.18, "width": 188, "height": 135 }, "L_wing04": { "x": -61.62, "y": -83.27, "rotation": -86.19, "width": 188, "height": 135 },
"L_wing05": { "x": -90.01, "y": -78.14, "rotation": -86.18, "width": 218, "height": 213 }, "L_wing05": { "x": -90.02, "y": -78.14, "rotation": -86.19, "width": 218, "height": 213 },
"L_wing06": { "x": -143.76, "y": -83.71, "rotation": -86.18, "width": 192, "height": 331 }, "L_wing06": { "x": -143.77, "y": -83.72, "rotation": -86.19, "width": 192, "height": 331 },
"L_wing07": { "x": -133.04, "y": -33.89, "rotation": -86.18, "width": 159, "height": 255 }, "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.18, "width": 164, "height": 181 }, "L_wing08": { "x": 50.15, "y": -15.71, "rotation": -86.19, "width": 164, "height": 181 },
"L_wing09": { "x": 85.94, "y": -11.32, "rotation": -86.18, "width": 204, "height": 167 } "L_wing09": { "x": 85.94, "y": -11.33, "rotation": -86.19, "width": 204, "height": 167 }
}, },
"R_front_leg": { "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": {
"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": { "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": { "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": { "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": {
"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": {
"R_rear_thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 } "R_rear_thigh": { "x": 53.25, "y": 12.58, "rotation": 103.29, "width": 91, "height": 149 }
}, },
"R_rear_toe1": { "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": { "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": { "R_rear_toe3": {
"rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 } "rear-toe": { "x": 47.46, "y": -7.64, "rotation": 134.34, "width": 109, "height": 77 }
}, },
"R_wing": { "R_wing": {
"R_wing01": { "x": 170.08, "y": -23.67, "rotation": -130.33, "width": 219, "height": 310 }, "R_wing01": { "x": 170.08, "y": -23.68, "rotation": -130.34, "width": 219, "height": 310 },
"R_wing02": { "x": 171.14, "y": -19.33, "rotation": -130.33, "width": 203, "height": 305 }, "R_wing02": { "x": 171.15, "y": -19.33, "rotation": -130.34, "width": 203, "height": 305 },
"R_wing03": { "x": 166.46, "y": 29.23, "rotation": -130.33, "width": 272, "height": 247 }, "R_wing03": { "x": 166.46, "y": 29.24, "rotation": -130.34, "width": 272, "height": 247 },
"R_wing04": { "x": 42.94, "y": 134.05, "rotation": -130.33, "width": 279, "height": 144 }, "R_wing04": { "x": 42.94, "y": 134.06, "rotation": -130.34, "width": 279, "height": 144 },
"R_wing05": { "x": -8.83, "y": 142.59, "rotation": -130.33, "width": 251, "height": 229 }, "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.33, "width": 200, "height": 366 }, "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.33, "width": 200, "height": 263 }, "R_wing07": { "x": -40.17, "y": 118.03, "rotation": -130.34, "width": 200, "height": 263 },
"R_wing08": { "x": 48.01, "y": 28.76, "rotation": -130.33, "width": 234, "height": 254 }, "R_wing08": { "x": 48.02, "y": 28.76, "rotation": -130.34, "width": 234, "height": 254 },
"R_wing09": { "x": 128.1, "y": 21.12, "rotation": -130.33, "width": 248, "height": 204 } "R_wing09": { "x": 128.1, "y": 21.13, "rotation": -130.34, "width": 248, "height": 204 }
}, },
"back": { "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": {
"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": {
"chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 } "chin": { "x": 66.55, "y": 7.32, "rotation": 30.01, "width": 214, "height": 146 }
}, },
"head": { "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": {
"logo": { "y": -176.72, "width": 897, "height": 92 } "logo": { "y": -176.72, "width": 897, "height": 92 }
}, },
"tail1": { "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": { "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": { "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": { "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": { "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": { "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": { "L_wing": {
"attachment": [ "attachment": [
{ "time": 0, "name": "L_wing01" }, { "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.1333, "name": "L_wing03" },
{ "time": 0.2, "name": "L_wing04" }, { "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.3333, "name": "L_wing06" },
{ "time": 0.4, "name": "L_wing07" }, { "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.5333, "name": "L_wing09" },
{ "time": 0.6, "name": "L_wing01" }, { "time": 0.6, "name": "L_wing01" },
{ "time": 0.7333, "name": "L_wing02" }, { "time": 0.7333, "name": "L_wing02" },
{ "time": 0.8, "name": "L_wing03" }, { "time": 0.8, "name": "L_wing03" },
{ "time": 0.8333, "name": "L_wing04" }, { "time": 0.8333, "name": "L_wing04" },
{ "time": 0.8666, "name": "L_wing05" }, { "time": 0.8667, "name": "L_wing05" },
{ "time": 0.8999, "name": "L_wing06" }, { "time": 0.9, "name": "L_wing06" },
{ "time": 0.9333, "name": "L_wing07" }, { "time": 0.9333, "name": "L_wing07" },
{ "time": 0.9666, "name": "L_wing08" }, { "time": 0.9667, "name": "L_wing08" },
{ "time": 1, "name": "L_wing01" } { "time": 1, "name": "L_wing01" }
] ]
}, },
"R_wing": { "R_wing": {
"attachment": [ "attachment": [
{ "time": 0, "name": "R_wing01" }, { "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.1333, "name": "R_wing03" },
{ "time": 0.2, "name": "R_wing04" }, { "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.3333, "name": "R_wing06" },
{ "time": 0.4, "name": "R_wing07" }, { "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.5333, "name": "R_wing09" },
{ "time": 0.6, "name": "R_wing01" }, { "time": 0.6, "name": "R_wing01" },
{ "time": 0.7333, "name": "R_wing02" }, { "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.8, "name": "R_wing03" },
{ "time": 0.8333, "name": "R_wing04" }, { "time": 0.8333, "name": "R_wing04" },
{ "time": 0.8666, "name": "R_wing05" }, { "time": 0.8667, "name": "R_wing05" },
{ "time": 0.8999, "name": "R_wing06" }, { "time": 0.9, "name": "R_wing06" },
{ "time": 0.9333, "name": "R_wing07" }, { "time": 0.9333, "name": "R_wing07" },
{ "time": 0.9666, "name": "R_wing08" }, { "time": 0.9667, "name": "R_wing08" },
{ "time": 1, "name": "R_wing01" } { "time": 1, "name": "R_wing01" }
] ]
} }
@ -234,9 +234,9 @@
"back": { "back": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 17.39 }, { "time": 0.1667, "angle": 17.39 },
{ "time": 0.5, "angle": 0 }, { "time": 0.5, "angle": 0 },
{ "time": 0.8333, "angle": 7 }, { "time": 0.8333, "angle": 7.01 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -253,9 +253,9 @@
"neck": { "neck": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -8.18 }, { "time": 0.1667, "angle": -8.18 },
{ "time": 0.3333, "angle": -23.16 }, { "time": 0.3333, "angle": -23.16 },
{ "time": 0.5, "angle": -18.01 }, { "time": 0.5, "angle": -18.02 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -289,10 +289,10 @@
"tail1": { "tail1": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -2.42 }, { "time": 0.1667, "angle": -2.42 },
{ "time": 0.3333, "angle": -26.2 }, { "time": 0.3333, "angle": -26.21 },
{ "time": 0.5, "angle": -29.65 }, { "time": 0.5, "angle": -29.66 },
{ "time": 0.6666, "angle": -23.15 }, { "time": 0.6667, "angle": -23.15 },
{ "time": 0.8333, "angle": -55.46 }, { "time": 0.8333, "angle": -55.46 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -327,10 +327,10 @@
"tail2": { "tail2": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -1.12 }, { "time": 0.1667, "angle": -1.13 },
{ "time": 0.3333, "angle": 10.48 }, { "time": 0.3333, "angle": 10.48 },
{ "time": 0.5, "angle": 7.89 }, { "time": 0.5, "angle": 7.89 },
{ "time": 0.8333, "angle": -10.38 }, { "time": 0.8333, "angle": -10.39 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -347,10 +347,10 @@
"tail3": { "tail3": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 8.24 }, { "time": 0.1667, "angle": 8.25 },
{ "time": 0.3333, "angle": 15.21 }, { "time": 0.3333, "angle": 15.21 },
{ "time": 0.5, "angle": 14.84 }, { "time": 0.5, "angle": 14.85 },
{ "time": 0.8333, "angle": -18.9 }, { "time": 0.8333, "angle": -18.91 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -367,7 +367,7 @@
"tail4": { "tail4": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 17.46 }, { "time": 0.1667, "angle": 17.47 },
{ "time": 0.3333, "angle": 22.15 }, { "time": 0.3333, "angle": 22.15 },
{ "time": 0.5, "angle": 22.76 }, { "time": 0.5, "angle": 22.76 },
{ "time": 0.8333, "angle": -4.37 }, { "time": 0.8333, "angle": -4.37 },
@ -387,10 +387,10 @@
"tail5": { "tail5": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 7.4 }, { "time": 0.1667, "angle": 7.4 },
{ "time": 0.3333, "angle": 28.5 }, { "time": 0.3333, "angle": 28.51 },
{ "time": 0.5, "angle": 21.33 }, { "time": 0.5, "angle": 21.33 },
{ "time": 0.8333, "angle": -1.27 }, { "time": 0.8333, "angle": -1.28 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -407,7 +407,7 @@
"tail6": { "tail6": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 45.99 }, { "time": 0.1667, "angle": 46 },
{ "time": 0.4, "angle": 43.53 }, { "time": 0.4, "angle": 43.53 },
{ "time": 0.5, "angle": 61.79 }, { "time": 0.5, "angle": 61.79 },
{ "time": 0.8333, "angle": 13.28 }, { "time": 0.8333, "angle": 13.28 },
@ -427,8 +427,8 @@
"R_rear_leg": { "R_rear_leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -14.21 }, { "time": 0.1667, "angle": -14.22 },
{ "time": 0.5, "angle": 47.17 }, { "time": 0.5, "angle": 47.18 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -498,9 +498,9 @@
{ {
"time": 0, "time": 0,
"angle": 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 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -519,11 +519,11 @@
{ {
"time": 0, "time": 0,
"angle": 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.3333, "angle": -5.15 },
{ "time": 0.5, "angle": 9.79 }, { "time": 0.5, "angle": 9.8 },
{ "time": 0.6666, "angle": 18.94 }, { "time": 0.6667, "angle": 18.95 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -540,7 +540,7 @@
"L_front_thigh": { "L_front_thigh": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -19.18 }, { "time": 0.1667, "angle": -19.19 },
{ "time": 0.3333, "angle": -32.02 }, { "time": 0.3333, "angle": -32.02 },
{ "time": 0.5, "angle": -19.62 }, { "time": 0.5, "angle": -19.62 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
@ -559,7 +559,7 @@
"R_front_thigh": { "R_front_thigh": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -12.96 }, { "time": 0.1667, "angle": -12.96 },
{ "time": 0.5, "angle": 16.2 }, { "time": 0.5, "angle": 16.2 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -577,7 +577,7 @@
"L_front_leg": { "L_front_leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 37.77 }, { "time": 0.1667, "angle": 37.77 },
{ "time": 0.5, "angle": 0, "curve": "stepped" }, { "time": 0.5, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -595,7 +595,7 @@
"L_front_toe1": { "L_front_toe1": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": -16.08 }, { "time": 0.1667, "angle": -16.09 },
{ "time": 0.5, "angle": 0, "curve": "stepped" }, { "time": 0.5, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -623,14 +623,14 @@
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1, "x": 1, "y": 1 }
] ]
}, },
"L_front_toe4": { "L_front_toe4": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.5, "angle": 26.51 }, { "time": 0.5, "angle": 26.52 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -640,7 +640,7 @@
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1, "x": 1, "y": 1 }
] ]
}, },
@ -657,14 +657,14 @@
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1, "x": 1, "y": 1 }
] ]
}, },
"R_front_leg": { "R_front_leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 26.07 }, { "time": 0.1667, "angle": 26.07 },
{ "time": 0.5, "angle": -21.6 }, { "time": 0.5, "angle": -21.6 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -682,8 +682,8 @@
"R_front_toe1": { "R_front_toe1": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 29.23 }, { "time": 0.1667, "angle": 29.24 },
{ "time": 0.5, "angle": 34.83 }, { "time": 0.5, "angle": 34.84 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -700,7 +700,7 @@
"R_front_toe2": { "R_front_toe2": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 24.89 }, { "time": 0.1667, "angle": 24.9 },
{ "time": 0.5, "angle": 23.16 }, { "time": 0.5, "angle": 23.16 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -711,14 +711,14 @@
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1, "x": 1, "y": 1 }
] ]
}, },
"R_front_toe3": { "R_front_toe3": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.1666, "angle": 11.01 }, { "time": 0.1667, "angle": 11.01 },
{ "time": 0.5, "angle": 0, "curve": "stepped" }, { "time": 0.5, "angle": 0, "curve": "stepped" },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -729,15 +729,15 @@
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1, "x": 1, "y": 1 }
] ]
}, },
"L_rear_leg": { "L_rear_leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.3666, "angle": 25.19 }, { "time": 0.3667, "angle": 25.19 },
{ "time": 0.6666, "angle": -15.65 }, { "time": 0.6667, "angle": -15.65 },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
"translate": [ "translate": [
@ -752,13 +752,13 @@
{ {
"time": 0, "time": 0,
"angle": 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.3333, "angle": 23.93 },
{ {
"time": 0.6666, "time": 0.6667,
"angle": 337.79, "angle": 337.8,
"curve": [ 0.41, 0, 0.887, 0.75 ] "curve": [ 0.411, 0, 0.888, 0.75 ]
}, },
{ "time": 1, "angle": 0 } { "time": 1, "angle": 0 }
], ],
@ -767,13 +767,13 @@
"time": 0, "time": 0,
"x": 0, "x": 0,
"y": 0, "y": 0,
"curve": [ 0.33, 1, 0.816, 1.33 ] "curve": [ 0.33, 1, 0.816, 1.34 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"x": 0, "x": -0.01,
"y": 113.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 } { "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": { "skeleton": { "hash": "r5YD0f6538Hmy0yaaam0Wp73fd8", "spine": "3.6.05-beta", "width": 234.01, "height": 354.84, "images": "./images/" },
"hash": "9Twfw0ImCCb/C3Vx15ucH1FZP6U",
"spine": "3.5.03-beta",
"width": 234.01,
"height": 354.84,
"fps": 30,
"images": "./images/"
},
"bones": [ "bones": [
{ "name": "root" }, { "name": "root" },
{ "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, { "name": "hip", "parent": "root", "x": 0.65, "y": 114.41 },
{ "name": "torso", "parent": "hip", "length": 85.82, "rotation": 93.92, "x": -6.42, "y": 1.97 }, { "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.51, "x": 81.67, "y": -6.34 }, { "name": "neck", "parent": "torso", "length": 18.38, "rotation": -1.52, "x": 81.68, "y": -6.35 },
{ "name": "head", "parent": "neck", "length": 68.28, "rotation": -13.92, "x": 20.93, "y": 11.59 }, { "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.04, "y": -20.38 }, { "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.16, "x": 37.85, "y": -2.34 }, { "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.39, "rotation": -89.09, "x": 14.45, "y": 2.81 }, { "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.89, "rotation": -16.65, "x": 56.34, "y": 0.98 }, { "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 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": "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.57 }, { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.58 },
{ "name": "right shoulder", "parent": "torso", "length": 37.24, "rotation": 133.88, "x": 76.02, "y": 18.14 }, { "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.74, "rotation": 36.32, "x": 37.6, "y": 0.31 }, { "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.45, "rotation": -97.49, "x": -20.07, "y": -6.83 }, { "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.52, "rotation": -14.34, "x": 42.99, "y": -0.61 }, { "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.45, "rotation": 110.3, "x": 64.88, "y": 0.04 }, { "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.35, "x": 36.9, "y": 0.34 } { "name": "right hand", "parent": "right arm", "length": 15.32, "rotation": 2.36, "x": 36.9, "y": 0.35 }
], ],
"slots": [ "slots": [
{ "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" },
@ -54,22 +47,22 @@
"skins": { "skins": {
"default": { "default": {
"left hand item": { "left hand item": {
"dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, "dagger": { "x": 7.88, "y": -23.46, "rotation": 10.48, "width": 26, "height": 108 },
"spear": { "x": -4.55, "y": 39.2, "rotation": 13.04, "width": 22, "height": 368 } "spear": { "x": -4.56, "y": 39.2, "rotation": 13.05, "width": 22, "height": 368 }
}, },
"right hand item": { "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": { "right hand item top": {
"shield": { "rotation": 93.49, "width": 70, "height": 72 } "shield": { "rotation": 93.5, "width": 70, "height": 72 }
} }
}, },
"goblin": { "goblin": {
"eyes": { "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": {
"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": {
"left arm": { "left arm": {
@ -78,13 +71,13 @@
"y": -1.69, "y": -1.69,
"scaleX": 1.057, "scaleX": 1.057,
"scaleY": 1.057, "scaleY": 1.057,
"rotation": 33.84, "rotation": 33.85,
"width": 37, "width": 37,
"height": 35 "height": 35
} }
}, },
"left foot": { "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": {
"left hand": { "left hand": {
@ -99,60 +92,60 @@
} }
}, },
"left lower leg": { "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": {
"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": {
"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": {
"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": {
"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": {
"right arm": { "name": "goblin/right-arm", "x": 16.44, "y": -1.04, "rotation": 94.32, "width": 23, "height": 50 } "right arm": { "name": "goblin/right-arm", "x": 16.44, "y": -1.04, "rotation": 94.32, "width": 23, "height": 50 }
}, },
"right foot": { "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": {
"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": {
"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": {
"right shoulder": { "name": "goblin/right-shoulder", "x": 15.68, "y": -1.03, "rotation": 130.65, "width": 39, "height": 45 } "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": {
"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": {
"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": {
"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": {
"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": { "goblingirl": {
"eyes": { "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": {
"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": {
"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": {
"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": {
"left hand": { "left hand": {
@ -161,52 +154,52 @@
"y": 2.39, "y": 2.39,
"scaleX": 0.896, "scaleX": 0.896,
"scaleY": 0.896, "scaleY": 0.896,
"rotation": 30.34, "rotation": 30.35,
"width": 35, "width": 35,
"height": 40 "height": 40
} }
}, },
"left lower leg": { "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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": {
"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": { "slots": {
"eyes": { "eyes": {
"attachment": [ "attachment": [
{ "time": 0.6999, "name": "eyes closed" }, { "time": 0.7, "name": "eyes closed" },
{ "time": 0.8, "name": null } { "time": 0.8, "name": null }
] ]
} }
@ -223,62 +216,62 @@
"bones": { "bones": {
"left upper leg": { "left upper leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -26.55 }, { "time": 0, "angle": -26.56 },
{ "time": 0.1333, "angle": -8.78 }, { "time": 0.1333, "angle": -8.79 },
{ "time": 0.2333, "angle": 9.51 }, { "time": 0.2333, "angle": 9.51 },
{ "time": 0.3666, "angle": 30.74 }, { "time": 0.3667, "angle": 30.74 },
{ "time": 0.5, "angle": 25.33 }, { "time": 0.5, "angle": 25.34 },
{ "time": 0.6333, "angle": 26.11 }, { "time": 0.6333, "angle": 26.12 },
{ "time": 0.7333, "angle": -7.7 }, { "time": 0.7333, "angle": -7.71 },
{ "time": 0.8666, "angle": -21.19 }, { "time": 0.8667, "angle": -21.19 },
{ "time": 1, "angle": -26.55 } { "time": 1, "angle": -26.56 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": -1.32, "y": 1.7 }, { "time": 0, "x": -1.32, "y": 1.71 },
{ "time": 0.3666, "x": -0.06, "y": 2.42 }, { "time": 0.3667, "x": -0.06, "y": 2.43 },
{ "time": 1, "x": -1.32, "y": 1.7 } { "time": 1, "x": -1.32, "y": 1.71 }
] ]
}, },
"right upper leg": { "right upper leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 42.45 }, { "time": 0, "angle": 42.45 },
{ "time": 0.1333, "angle": 52.1 }, { "time": 0.1333, "angle": 52.11 },
{ "time": 0.2333, "angle": 8.53 }, { "time": 0.2333, "angle": 8.54 },
{ "time": 0.5, "angle": -16.93 }, { "time": 0.5, "angle": -16.94 },
{ "time": 0.6333, "angle": 1.89 }, { "time": 0.6333, "angle": 1.9 },
{ {
"time": 0.7333, "time": 0.7333,
"angle": 28.06, "angle": 28.06,
"curve": [ 0.462, 0.11, 1, 1 ] "curve": [ 0.463, 0.12, 1, 1 ]
}, },
{ {
"time": 0.8666, "time": 0.8667,
"angle": 58.68, "angle": 58.69,
"curve": [ 0.5, 0.02, 1, 1 ] "curve": [ 0.5, 0.02, 1, 1 ]
}, },
{ "time": 1, "angle": 42.45 } { "time": 1, "angle": 42.45 }
], ],
"translate": [ "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.2333, "x": 2.14, "y": 2.4 },
{ "time": 0.5, "x": 2.44, "y": 4.8 }, { "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": { "left lower leg": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -22.98 }, { "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.2333, "angle": -73.76 },
{ "time": 0.5, "angle": 5.11 }, { "time": 0.5, "angle": 5.12 },
{ "time": 0.6333, "angle": -28.29 }, { "time": 0.6333, "angle": -28.3 },
{ "time": 0.7333, "angle": 4.08 }, { "time": 0.7333, "angle": 4.08 },
{ "time": 0.8666, "angle": 3.53 }, { "time": 0.8667, "angle": 3.53 },
{ "time": 1, "angle": -22.98 } { "time": 1, "angle": -22.98 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0 }, { "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": 0.5, "x": 0, "y": 0, "curve": "stepped" },
{ "time": 1, "x": 0, "y": 0 } { "time": 1, "x": 0, "y": 0 }
] ]
@ -288,11 +281,11 @@
{ "time": 0, "angle": -3.69 }, { "time": 0, "angle": -3.69 },
{ "time": 0.1333, "angle": -10.42 }, { "time": 0.1333, "angle": -10.42 },
{ "time": 0.2333, "angle": -5.01 }, { "time": 0.2333, "angle": -5.01 },
{ "time": 0.3666, "angle": 3.87 }, { "time": 0.3667, "angle": 3.87 },
{ "time": 0.5, "angle": -3.87 }, { "time": 0.5, "angle": -3.88 },
{ "time": 0.6333, "angle": 2.78 }, { "time": 0.6333, "angle": 2.78 },
{ "time": 0.7333, "angle": 1.68 }, { "time": 0.7333, "angle": 1.68 },
{ "time": 0.8666, "angle": -8.54 }, { "time": 0.8667, "angle": -8.54 },
{ "time": 1, "angle": -3.69 } { "time": 1, "angle": -3.69 }
] ]
}, },
@ -311,70 +304,70 @@
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": -4.02, "angle": -4.03,
"curve": [ 0.267, 0, 0.804, 0.99 ] "curve": [ 0.267, 0.01, 0.805, 0.99 ]
}, },
{ {
"time": 0.6333, "time": 0.6333,
"angle": 19.78, "angle": 19.79,
"curve": [ 0.307, 0, 0.787, 0.99 ] "curve": [ 0.307, 0, 0.787, 0.99 ]
}, },
{ "time": 1, "angle": -4.02 } { "time": 1, "angle": -4.03 }
] ]
}, },
"right hand": { "right hand": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 8.98 }, { "time": 0, "angle": 8.99 },
{ "time": 0.6333, "angle": 0.51 }, { "time": 0.6333, "angle": 0.51 },
{ "time": 1, "angle": 8.98 } { "time": 1, "angle": 8.99 }
] ]
}, },
"left shoulder": { "left shoulder": {
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": 6.25, "angle": 6.26,
"curve": [ 0.339, 0, 0.683, 1 ] "curve": [ 0.339, 0, 0.684, 1 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"angle": -11.78, "angle": -11.79,
"curve": [ 0.281, 0, 0.686, 0.99 ] "curve": [ 0.282, 0, 0.687, 0.99 ]
}, },
{ "time": 1, "angle": 6.25 } { "time": 1, "angle": 6.26 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 1.15, "y": 0.23 } { "time": 0, "x": 1.15, "y": 0.24 }
] ]
}, },
"left hand": { "left hand": {
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": -21.23, "angle": -21.24,
"curve": [ 0.295, 0, 0.755, 0.98 ] "curve": [ 0.296, 0, 0.756, 0.99 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"angle": -27.28, "angle": -27.28,
"curve": [ 0.241, 0, 0.75, 0.97 ] "curve": [ 0.241, 0, 0.75, 0.97 ]
}, },
{ "time": 1, "angle": -21.23 } { "time": 1, "angle": -21.24 }
] ]
}, },
"left arm": { "left arm": {
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": 28.37, "angle": 28.38,
"curve": [ 0.339, 0, 0.683, 1 ] "curve": [ 0.339, 0, 0.684, 1 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"angle": 60.09, "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": { "torso": {
@ -382,38 +375,38 @@
{ "time": 0, "angle": -10.28 }, { "time": 0, "angle": -10.28 },
{ {
"time": 0.1333, "time": 0.1333,
"angle": -15.38, "angle": -15.39,
"curve": [ 0.545, 0, 0.818, 1 ] "curve": [ 0.546, 0.01, 0.819, 1 ]
}, },
{ {
"time": 0.3666, "time": 0.3667,
"angle": -9.78, "angle": -9.78,
"curve": [ 0.58, 0.17, 0.669, 0.99 ] "curve": [ 0.58, 0.17, 0.67, 0.99 ]
}, },
{ {
"time": 0.6333, "time": 0.6333,
"angle": -15.75, "angle": -15.75,
"curve": [ 0.235, 0.01, 0.795, 1 ] "curve": [ 0.236, 0.01, 0.796, 1 ]
}, },
{ {
"time": 0.8666, "time": 0.8667,
"angle": -7.06, "angle": -7.07,
"curve": [ 0.209, 0, 0.816, 0.98 ] "curve": [ 0.21, 0, 0.816, 0.99 ]
}, },
{ "time": 1, "angle": -10.28 } { "time": 1, "angle": -10.28 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": -1.29, "y": 1.68 } { "time": 0, "x": -1.29, "y": 1.69 }
] ]
}, },
"right foot": { "right foot": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -5.25 }, { "time": 0, "angle": -5.25 },
{ "time": 0.2333, "angle": -1.91 }, { "time": 0.2333, "angle": -1.91 },
{ "time": 0.3666, "angle": -6.45 }, { "time": 0.3667, "angle": -6.45 },
{ "time": 0.5, "angle": -5.39 }, { "time": 0.5, "angle": -5.4 },
{ "time": 0.7333, "angle": -11.68 }, { "time": 0.7333, "angle": -11.69 },
{ "time": 0.8666, "angle": 0.46 }, { "time": 0.8667, "angle": 0.46 },
{ "time": 1, "angle": -5.25 } { "time": 1, "angle": -5.25 }
] ]
}, },
@ -422,12 +415,12 @@
{ {
"time": 0, "time": 0,
"angle": -3.39, "angle": -3.39,
"curve": [ 0.316, 0.01, 0.741, 0.98 ] "curve": [ 0.316, 0.02, 0.741, 0.99 ]
}, },
{ {
"time": 0.1333, "time": 0.1333,
"angle": -45.53, "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.2333, "angle": -4.83 },
{ "time": 0.5, "angle": -19.53 }, { "time": 0.5, "angle": -19.53 },
@ -442,7 +435,7 @@
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0, "x": 0, "y": 0, "curve": "stepped" },
{ "time": 0.5, "x": 0, "y": 0 }, { "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 } { "time": 1, "x": 0, "y": 0 }
] ]
}, },
@ -456,31 +449,31 @@
{ {
"time": 0.1333, "time": 0.1333,
"x": 0, "x": 0,
"y": -7.05, "y": -7.06,
"curve": [ 0.359, 0.47, 0.646, 0.74 ] "curve": [ 0.359, 0.47, 0.647, 0.75 ]
}, },
{ "time": 0.3666, "x": 0, "y": 6.78 }, { "time": 0.3667, "x": 0, "y": 6.78 },
{ "time": 0.5, "x": 0, "y": -6.13 }, { "time": 0.5, "x": 0, "y": -6.14 },
{ {
"time": 0.6333, "time": 0.6333,
"x": 0, "x": 0,
"y": -7.05, "y": -7.06,
"curve": [ 0.359, 0.47, 0.646, 0.74 ] "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 } { "time": 1, "x": 0, "y": -4.16 }
] ]
}, },
"neck": { "neck": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 3.6 }, { "time": 0, "angle": 3.6 },
{ "time": 0.1333, "angle": 17.49 }, { "time": 0.1333, "angle": 17.5 },
{ "time": 0.2333, "angle": 6.1 }, { "time": 0.2333, "angle": 6.11 },
{ "time": 0.3666, "angle": 3.45 }, { "time": 0.3667, "angle": 3.46 },
{ "time": 0.5, "angle": 5.17 }, { "time": 0.5, "angle": 5.18 },
{ "time": 0.6333, "angle": 18.36 }, { "time": 0.6333, "angle": 18.36 },
{ "time": 0.7333, "angle": 6.09 }, { "time": 0.7333, "angle": 6.09 },
{ "time": 0.8666, "angle": 2.28 }, { "time": 0.8667, "angle": 2.29 },
{ "time": 1, "angle": 3.6 } { "time": 1, "angle": 3.6 }
] ]
}, },
@ -489,19 +482,19 @@
{ {
"time": 0, "time": 0,
"angle": 3.6, "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.1333, "angle": -0.21 },
{ "time": 0.2333, "angle": 6.1 }, { "time": 0.2333, "angle": 6.11 },
{ "time": 0.3666, "angle": 3.45 }, { "time": 0.3667, "angle": 3.46 },
{ {
"time": 0.5, "time": 0.5,
"angle": 5.17, "angle": 5.18,
"curve": [ 0, 0, 0.704, 1.61 ] "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.7333, "angle": 6.09 },
{ "time": 0.8666, "angle": 2.28 }, { "time": 0.8667, "angle": 2.29 },
{ "time": 1, "angle": 3.6 } { "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": { "skeleton": { "hash": "d01ShNZ08gDOIyqc2CGlBzHUKrA", "spine": "3.6.05-beta", "width": 413.19, "height": 195.71, "images": "./images/" },
"hash": "DRH0bKbb0s4lzWxWdYTHHpv4S4I",
"spine": "3.5.03-beta",
"width": 413.18,
"height": 195.71,
"fps": 30,
"images": "./images/"
},
"bones": [ "bones": [
{ "name": "root" }, { "name": "root" },
{ "name": "powerup", "parent": "root", "x": 1.48, "y": 134.02 }, { "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": "left wing", "parent": "tokenRoot", "x": -91.06, "y": 7.8 },
{ "name": "right wing", "parent": "tokenRoot", "x": 86.82, "y": 7.12 }, { "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": "star", "parent": "stars", "x": 2.84, "y": 4.76 },
{ "name": "star1", "parent": "stars", "x": -2.19, "y": -2.04 }, { "name": "star1", "parent": "stars", "x": -2.2, "y": -2.04 },
{ "name": "star2", "parent": "stars", "x": -1.36, "y": -4.16 }, { "name": "star2", "parent": "stars", "x": -1.37, "y": -4.16 },
{ "name": "star3", "parent": "stars", "x": -0.84, "y": -3.78 }, { "name": "star3", "parent": "stars", "x": -0.84, "y": -3.78 },
{ "name": "star4", "parent": "stars", "x": 10.08, "y": 14.52 }, { "name": "star4", "parent": "stars", "x": 10.09, "y": 14.53 },
{ "name": "star5", "parent": "stars", "x": 11.5, "y": -12.28 }, { "name": "star5", "parent": "stars", "x": 11.5, "y": -12.29 },
{ "name": "star6", "parent": "stars", "x": -20.73, "y": -23.44 }, { "name": "star6", "parent": "stars", "x": -20.74, "y": -23.45 },
{ "name": "star7", "parent": "stars", "x": -5.85, "y": -35.84 }, { "name": "star7", "parent": "stars", "x": -5.86, "y": -35.85 },
{ "name": "star8", "parent": "stars", "x": 8.41, "y": -10.05 }, { "name": "star8", "parent": "stars", "x": 8.41, "y": -10.05 },
{ "name": "star9", "parent": "stars", "x": -1.62, "y": -7.34 }, { "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": [ "slots": [
{ "name": "right wing", "bone": "right wing", "attachment": "wing" }, { "name": "right wing", "bone": "right wing", "attachment": "wing" },
@ -44,10 +37,10 @@
"skins": { "skins": {
"default": { "default": {
"left wing": { "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": { "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": {
"star": { "width": 76, "height": 72 } "star": { "width": 76, "height": 72 }
@ -80,7 +73,7 @@
"star": { "width": 76, "height": 72 } "star": { "width": 76, "height": 72 }
}, },
"token": { "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": [ "color": [
{ "time": 0, "color": "ffffff00" }, { "time": 0, "color": "ffffff00" },
{ "time": 0.5333, "color": "ffffffff" }, { "time": 0.5333, "color": "ffffffff" },
{ "time": 0.6666, "color": "ffffff00" } { "time": 0.6667, "color": "ffffff00" }
] ]
}, },
"star1": { "star1": {
"color": [ "color": [
{ "time": 0.2666, "color": "fff9f600" }, { "time": 0.2667, "color": "fff9f600" },
{ "time": 0.8, "color": "ffffffff" }, { "time": 0.8, "color": "ffffffff" },
{ "time": 0.9333, "color": "fff0f200" } { "time": 0.9333, "color": "fff0f200" }
] ]
@ -104,14 +97,14 @@
"star2": { "star2": {
"color": [ "color": [
{ "time": 0.1333, "color": "ffffff00" }, { "time": 0.1333, "color": "ffffff00" },
{ "time": 0.6666, "color": "ffffffff" }, { "time": 0.6667, "color": "ffffffff" },
{ "time": 0.8, "color": "ffffff00" } { "time": 0.8, "color": "ffffff00" }
] ]
}, },
"star3": { "star3": {
"color": [ "color": [
{ "time": 0.4333, "color": "ffffff00" }, { "time": 0.4333, "color": "ffffff00" },
{ "time": 0.9666, "color": "ffffffff" }, { "time": 0.9667, "color": "ffffffff" },
{ "time": 1.1, "color": "ffffff00" } { "time": 1.1, "color": "ffffff00" }
] ]
}, },
@ -119,7 +112,7 @@
"color": [ "color": [
{ "time": 0.6, "color": "ffffff00" }, { "time": 0.6, "color": "ffffff00" },
{ "time": 1.1333, "color": "ffffffff" }, { "time": 1.1333, "color": "ffffffff" },
{ "time": 1.2666, "color": "ffffff00" } { "time": 1.2667, "color": "ffffff00" }
] ]
}, },
"star5": { "star5": {
@ -135,7 +128,7 @@
"color": [ "color": [
{ "time": 0, "color": "ffffff2f" }, { "time": 0, "color": "ffffff2f" },
{ "time": 0.4333, "color": "ffffffff" }, { "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.2333, "color": "ffffff00" },
{ "time": 1.3333, "color": "ffffff2f" } { "time": 1.3333, "color": "ffffff2f" }
] ]
@ -143,15 +136,15 @@
"star7": { "star7": {
"color": [ "color": [
{ "time": 0.6333, "color": "ffffff00" }, { "time": 0.6333, "color": "ffffff00" },
{ "time": 1.1666, "color": "ffffffff" }, { "time": 1.1667, "color": "ffffffff" },
{ "time": 1.2999, "color": "ffffff00" } { "time": 1.3, "color": "ffffff00" }
] ]
}, },
"star8": { "star8": {
"color": [ "color": [
{ "time": 0, "color": "ffffffbf" }, { "time": 0, "color": "ffffffbf" },
{ "time": 0.1333, "color": "ffffffff" }, { "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": 0.9333, "color": "ffffff00" },
{ "time": 1.3333, "color": "ffffffbf" } { "time": 1.3333, "color": "ffffffbf" }
] ]
@ -170,24 +163,24 @@
"translate": [ "translate": [
{ {
"time": 0, "time": 0,
"x": -18.55, "x": -18.56,
"y": 0, "y": 0,
"curve": [ 0.385, 0, 0.689, 0.95 ] "curve": [ 0.385, 0.01, 0.69, 0.96 ]
}, },
{ {
"time": 0.3333, "time": 0.3333,
"x": 0, "x": 0,
"y": -34.69, "y": -34.7,
"curve": [ 0.235, 0.66, 1, 1 ] "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, "time": 1,
"x": 0, "x": 0,
"y": -34.69, "y": -34.7,
"curve": [ 0.235, 0.66, 1, 1 ] "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": { "left wing": {
@ -195,258 +188,258 @@
{ {
"time": 0, "time": 0,
"angle": 45.23, "angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ] "curve": [ 0.394, 0, 0.629, 1 ]
}, },
{ {
"time": 0.1666, "time": 0.1667,
"angle": -38.74, "angle": -38.75,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ {
"time": 0.3333, "time": 0.3333,
"angle": 45.23, "angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ] "curve": [ 0.394, 0, 0.629, 1 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"angle": -38.74, "angle": -38.75,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ {
"time": 0.6666, "time": 0.6667,
"angle": 45.23, "angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ] "curve": [ 0.394, 0, 0.629, 1 ]
}, },
{ {
"time": 0.8333, "time": 0.8333,
"angle": -38.74, "angle": -38.75,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ {
"time": 1, "time": 1,
"angle": 45.23, "angle": 45.23,
"curve": [ 0.393, 0, 0.629, 1 ] "curve": [ 0.394, 0, 0.629, 1 ]
}, },
{ {
"time": 1.1666, "time": 1.1667,
"angle": -38.74, "angle": -38.75,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ "time": 1.3333, "angle": 45.23 } { "time": 1.3333, "angle": 45.23 }
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1.098, "y": 1 }, { "time": 0, "x": 1.099, "y": 1 },
{ "time": 0.1666, "x": 1, "y": 0.826 }, { "time": 0.1667, "x": 1, "y": 0.827 },
{ "time": 0.3333, "x": 1.098, "y": 1 }, { "time": 0.3333, "x": 1.099, "y": 1 },
{ "time": 0.5, "x": 1, "y": 0.826 }, { "time": 0.5, "x": 1, "y": 0.827 },
{ "time": 0.6666, "x": 1.098, "y": 1 }, { "time": 0.6667, "x": 1.099, "y": 1 },
{ "time": 0.8333, "x": 1, "y": 0.826 }, { "time": 0.8333, "x": 1, "y": 0.827 },
{ "time": 1, "x": 1.098, "y": 1 }, { "time": 1, "x": 1.099, "y": 1 },
{ "time": 1.1666, "x": 1, "y": 0.826 }, { "time": 1.1667, "x": 1, "y": 0.827 },
{ "time": 1.3333, "x": 1.098, "y": 1 } { "time": 1.3333, "x": 1.099, "y": 1 }
] ]
}, },
"right wing": { "right wing": {
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": -39.45, "angle": -39.46,
"curve": [ 0.327, 0, 0.637, 1 ] "curve": [ 0.328, 0, 0.638, 1 ]
}, },
{ {
"time": 0.1666, "time": 0.1667,
"angle": 37.67, "angle": 37.68,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ {
"time": 0.3333, "time": 0.3333,
"angle": -39.45, "angle": -39.46,
"curve": [ 0.327, 0, 0.637, 1 ] "curve": [ 0.328, 0, 0.638, 1 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"angle": 37.67, "angle": 37.68,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ {
"time": 0.6666, "time": 0.6667,
"angle": -39.45, "angle": -39.46,
"curve": [ 0.327, 0, 0.637, 1 ] "curve": [ 0.328, 0, 0.638, 1 ]
}, },
{ {
"time": 0.8333, "time": 0.8333,
"angle": 37.67, "angle": 37.68,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ {
"time": 1, "time": 1,
"angle": -39.45, "angle": -39.46,
"curve": [ 0.327, 0, 0.637, 1 ] "curve": [ 0.328, 0, 0.638, 1 ]
}, },
{ {
"time": 1.1666, "time": 1.1667,
"angle": 37.67, "angle": 37.68,
"curve": [ 0.163, 0.91, 1, 1 ] "curve": [ 0.164, 0.91, 1, 1 ]
}, },
{ "time": 1.3333, "angle": -39.45 } { "time": 1.3333, "angle": -39.46 }
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1.09, "y": 1 }, { "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.3333, "x": 1.09, "y": 1 },
{ "time": 0.5, "x": 1, "y": 0.819 }, { "time": 0.5, "x": 1, "y": 0.82 },
{ "time": 0.6666, "x": 1.09, "y": 1 }, { "time": 0.6667, "x": 1.09, "y": 1 },
{ "time": 0.8333, "x": 1, "y": 0.819 }, { "time": 0.8333, "x": 1, "y": 0.82 },
{ "time": 1, "x": 1.09, "y": 1 }, { "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 } { "time": 1.3333, "x": 1.09, "y": 1 }
] ]
}, },
"tokenRoot": { "tokenRoot": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 11.29 }, { "time": 0, "angle": 11.3 },
{ "time": 0.3333, "angle": 2.5 }, { "time": 0.3333, "angle": 2.51 },
{ "time": 0.6666, "angle": -12.5 }, { "time": 0.6667, "angle": -12.5 },
{ "time": 1, "angle": 0.63 }, { "time": 1, "angle": 0.63 },
{ "time": 1.3333, "angle": 11.29 } { "time": 1.3333, "angle": 11.3 }
] ]
}, },
"token": { "token": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -0.5 }, { "time": 0, "angle": -0.5 },
{ "time": 0.6666, "angle": 5.86 }, { "time": 0.6667, "angle": 5.87 },
{ "time": 1.3333, "angle": -0.5 } { "time": 1.3333, "angle": -0.5 }
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1.181, "y": 1.181 }, { "time": 0, "x": 1.181, "y": 1.181 },
{ "time": 0.3333, "x": 1, "y": 1 }, { "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, "x": 1, "y": 1 },
{ "time": 1.3333, "x": 1.181, "y": 1.181 } { "time": 1.3333, "x": 1.181, "y": 1.181 }
] ]
}, },
"star": { "star": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 28.25 }, { "time": 0, "angle": 28.26 },
{ "time": 0.6666, "angle": -42.08 } { "time": 0.6667, "angle": -42.08 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0 }, { "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": [ "scale": [
{ "time": 0, "x": 0.439, "y": 0.439 }, { "time": 0, "x": 0.439, "y": 0.439 },
{ "time": 0.6666, "x": 1, "y": 1 } { "time": 0.6667, "x": 1, "y": 1 }
] ]
}, },
"star1": { "star1": {
"rotate": [ "rotate": [
{ "time": 0.2666, "angle": 13.37 }, { "time": 0.2667, "angle": 13.37 },
{ "time": 0.9333, "angle": 89.61 } { "time": 0.9333, "angle": 89.61 }
], ],
"translate": [ "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 } { "time": 0.9333, "x": -76.4, "y": 67.76 }
], ],
"scale": [ "scale": [
{ "time": 0.2666, "x": 0.391, "y": 0.391 }, { "time": 0.2667, "x": 0.392, "y": 0.392 },
{ "time": 0.9333, "x": 0.815, "y": 0.815 } { "time": 0.9333, "x": 0.816, "y": 0.816 }
] ]
}, },
"star2": { "star2": {
"rotate": [ "rotate": [
{ "time": 0.1333, "angle": -42.67 }, { "time": 0.1333, "angle": -42.68 },
{ "time": 0.8, "angle": 88.41 } { "time": 0.8, "angle": 88.41 }
], ],
"translate": [ "translate": [
{ "time": 0.1333, "x": -18.32, "y": -18.91 }, { "time": 0.1333, "x": -18.33, "y": -18.92 },
{ "time": 0.8, "x": -57.85, "y": -97.4 } { "time": 0.8, "x": -57.86, "y": -97.4 }
], ],
"scale": [ "scale": [
{ "time": 0.1333, "x": 0.211, "y": 0.211 }, { "time": 0.1333, "x": 0.212, "y": 0.212 },
{ "time": 0.8, "x": 0.652, "y": 0.652 } { "time": 0.8, "x": 0.653, "y": 0.653 }
] ]
}, },
"star3": { "star3": {
"rotate": [ "rotate": [
{ "time": 0.4333, "angle": 57.71 }, { "time": 0.4333, "angle": 57.72 },
{ "time": 1.1, "angle": -105.15 } { "time": 1.1, "angle": -105.15 }
], ],
"translate": [ "translate": [
{ "time": 0.4333, "x": 36.1, "y": -40.52 }, { "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": [ "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 } { "time": 1.1, "x": 0.776, "y": 0.776 }
] ]
}, },
"star4": { "star4": {
"rotate": [ "rotate": [
{ "time": 0.6, "angle": 37.65 }, { "time": 0.6, "angle": 37.66 },
{ "time": 1.2666, "angle": -102.15 } { "time": 1.2667, "angle": -102.16 }
], ],
"translate": [ "translate": [
{ "time": 0.6, "x": 8.65, "y": -12.98 }, { "time": 0.6, "x": 8.66, "y": -12.98 },
{ "time": 1.2666, "x": -0.99, "y": 82.82 } { "time": 1.2667, "x": -0.99, "y": 82.82 }
], ],
"scale": [ "scale": [
{ "time": 0.6, "x": 0.275, "y": 0.275 }, { "time": 0.6, "x": 0.276, "y": 0.276 },
{ "time": 1.2666, "x": 1.081, "y": 1.081 } { "time": 1.2667, "x": 1.081, "y": 1.081 }
] ]
}, },
"star5": { "star5": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 18.27 }, { "time": 0, "angle": 18.28 },
{ "time": 0.3333, "angle": 83.73, "curve": "stepped" }, { "time": 0.3333, "angle": 83.73, "curve": "stepped" },
{ "time": 1, "angle": -47.17 }, { "time": 1, "angle": -47.18 },
{ "time": 1.3333, "angle": 18.27 } { "time": 1.3333, "angle": 18.28 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": -67.73, "y": -7.78 }, { "time": 0, "x": -67.74, "y": -7.78 },
{ "time": 0.3333, "x": -102.83, "y": -22.36, "curve": "stepped" }, { "time": 0.3333, "x": -102.84, "y": -22.36, "curve": "stepped" },
{ "time": 1, "x": -32.63, "y": 6.8 }, { "time": 1, "x": -32.64, "y": 6.8 },
{ "time": 1.3333, "x": -67.73, "y": -7.78 } { "time": 1.3333, "x": -67.74, "y": -7.78 }
], ],
"scale": [ "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": 0.3333, "x": 0.791, "y": 0.791, "curve": "stepped" },
{ "time": 1, "x": 0.34, "y": 0.34 }, { "time": 1, "x": 0.341, "y": 0.341 },
{ "time": 1.3333, "x": 0.565, "y": 0.565 } { "time": 1.3333, "x": 0.566, "y": 0.566 }
] ]
}, },
"star6": { "star6": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 25.23 }, { "time": 0, "angle": 25.24 },
{ "time": 0.5666, "angle": -73.06, "curve": "stepped" }, { "time": 0.5667, "angle": -73.07, "curve": "stepped" },
{ "time": 1.2333, "angle": 42.58 }, { "time": 1.2333, "angle": 42.59 },
{ "time": 1.3333, "angle": 25.23 } { "time": 1.3333, "angle": 25.24 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 4.55, "y": -14.21 }, { "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.2333, "x": 0, "y": 0 },
{ "time": 1.3333, "x": 4.55, "y": -14.21 } { "time": 1.3333, "x": 4.55, "y": -14.21 }
], ],
"scale": [ "scale": [
{ "time": 0, "x": 0.337, "y": 0.337 }, { "time": 0, "x": 0.337, "y": 0.337 },
{ "time": 0.5666, "x": 0.955, "y": 0.955, "curve": "stepped" }, { "time": 0.5667, "x": 0.956, "y": 0.956, "curve": "stepped" },
{ "time": 1.2333, "x": 0.227, "y": 0.227 }, { "time": 1.2333, "x": 0.228, "y": 0.228 },
{ "time": 1.3333, "x": 0.337, "y": 0.337 } { "time": 1.3333, "x": 0.337, "y": 0.337 }
] ]
}, },
"star7": { "star7": {
"rotate": [ "rotate": [
{ "time": 0.6333, "angle": 41.11 }, { "time": 0.6333, "angle": 41.12 },
{ "time": 1.2999, "angle": -89.84 } { "time": 1.3, "angle": -89.85 }
], ],
"translate": [ "translate": [
{ "time": 0.6333, "x": 20.27, "y": 32.75 }, { "time": 0.6333, "x": 20.28, "y": 32.76 },
{ "time": 1.2999, "x": -67.79, "y": -68.56 } { "time": 1.3, "x": -67.8, "y": -68.56 }
], ],
"scale": [ "scale": [
{ "time": 0.6333, "x": 0.258, "y": 0.258 }, { "time": 0.6333, "x": 0.259, "y": 0.259 },
{ "time": 1.2999, "x": 0.999, "y": 0.999 } { "time": 1.3, "x": 0.999, "y": 0.999 }
] ]
}, },
"star9": { "star9": {
@ -458,33 +451,33 @@
], ],
"translate": [ "translate": [
{ "time": 0, "x": -78.75, "y": 77.18 }, { "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": 0.8, "x": 0, "y": 0 },
{ "time": 1.3333, "x": -78.75, "y": 77.18 } { "time": 1.3333, "x": -78.75, "y": 77.18 }
], ],
"scale": [ "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.1333, "x": 0.91, "y": 0.91, "curve": "stepped" },
{ "time": 0.8, "x": 0.221, "y": 0.221 }, { "time": 0.8, "x": 0.222, "y": 0.222 },
{ "time": 1.3333, "x": 0.772, "y": 0.772 } { "time": 1.3333, "x": 0.773, "y": 0.773 }
] ]
}, },
"star8": { "star8": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -60.17 }, { "time": 0, "angle": -60.18 },
{ "time": 0.2666, "angle": -109.83, "curve": "stepped" }, { "time": 0.2667, "angle": -109.84, "curve": "stepped" },
{ "time": 0.9333, "angle": 14.31 }, { "time": 0.9333, "angle": 14.31 },
{ "time": 1.3333, "angle": -60.17 } { "time": 1.3333, "angle": -60.18 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 44.63, "y": -41.66 }, { "time": 0, "x": 44.64, "y": -41.66 },
{ "time": 0.2666, "x": 74.39, "y": -69.43, "curve": "stepped" }, { "time": 0.2667, "x": 74.4, "y": -69.44, "curve": "stepped" },
{ "time": 0.9333, "x": 0, "y": 0 }, { "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": [ "scale": [
{ "time": 0, "x": 0.452, "y": 0.452 }, { "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": 0.9333, "x": 0.123, "y": 0.123 },
{ "time": 1.3333, "x": 0.452, "y": 0.452 } { "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": { "skeleton": { "hash": "jwwArXQBSgnDp4JM5vgHQsr+jXc", "spine": "3.6.05-beta", "width": 511.48, "height": 739.87, "images": "./images/" },
"hash": "Vw3hWCw+PV8Q6kMU7bcyWS2a+uw",
"spine": "3.5.03-beta",
"width": 511.47,
"height": 739.87,
"fps": 30,
"images": "./images/"
},
"bones": [ "bones": [
{ "name": "root" }, { "name": "root" },
{ "name": "hip", "parent": "root", "x": -49.89, "y": 290.95 }, { "name": "hip", "parent": "root", "x": -49.9, "y": 290.96 },
{ "name": "hoverboard", "parent": "root", "length": 72.32, "x": 9.9, "y": 57.05 }, { "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.7, "color": "ff3f00ff" }, { "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_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_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.82, "x": 86.09, "y": -1.32, "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.44, "y": -0.75, "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": "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": "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": "exhaust2", "parent": "hoverboard", "rotation": 26.51, "x": -191.58, "y": -23.5 },
{ "name": "front_foot_ik", "parent": "hoverboard", "rotation": -16.95, "x": -100.29, "y": 23.95, "color": "ff3f00ff" }, { "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.38, "y": 29.05, "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.59, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, { "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.44, "rotation": 125.79, "x": 103.75, "y": 19.31, "color": "00ff04ff" }, { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 125.79, "x": 103.75, "y": 19.32, "color": "00ff04ff" },
{ {
"name": "front_bracer", "name": "front_bracer",
"parent": "front_upper_arm", "parent": "front_upper_arm",
"length": 40.56, "length": 40.57,
"rotation": 18.29, "rotation": 18.29,
"x": 68.8, "x": 68.8,
"y": -0.68, "y": -0.68,
"color": "00ff04ff" "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_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_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.25, "x": 128.75, "y": -0.33, "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.59, "y": 21.98, "color": "ff3f00ff" }, { "name": "front_toe_ik", "parent": "hoverboard", "rotation": -0.97, "x": -44.6, "y": 21.99, "color": "ff3f00ff" },
{ {
"name": "front_foot_tip", "name": "front_foot_tip",
"parent": "front_foot", "parent": "front_foot",
"length": 56.02, "length": 56.02,
"rotation": 44.29, "rotation": 44.3,
"x": 41.41, "x": 41.42,
"y": -0.07, "y": -0.08,
"color": "00ff04ff" "color": "00ff04ff"
}, },
{ "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -153.6, "x": 92.34, "y": -19.21, "color": "ff000dff" }, { "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.54, "rotation": 43.56, "x": 51.34, "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.09, "rotation": 17.61, "x": 34.41, "y": -0.44, "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.82, "x": 201.03, "y": 52.13, "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.48, "y": -0.3, "color": "e0da19ff" }, { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" },
{ "name": "head", "parent": "neck", "length": 131.78, "rotation": 51.9, "x": 27.65, "y": -0.25, "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.09, "x": 149.82, "y": -59.77, "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.4, "x": 47.22, "y": 0.18, "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.15, "x": 164.13, "y": 3.68, "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.27, "rotation": 83.69, "x": 62.22, "y": -0.02, "color": "e0da19ff" }, { "name": "hair4", "parent": "hair3", "length": 80.28, "rotation": 83.7, "x": 62.22, "y": -0.03, "color": "e0da19ff" },
{ {
"name": "hoverboard_thruster_front", "name": "hoverboard_thruster_front",
"parent": "hoverboard", "parent": "hoverboard",
@ -69,12 +62,12 @@
"name": "hoverboard_thruster_rear", "name": "hoverboard_thruster_rear",
"parent": "hoverboard", "parent": "hoverboard",
"rotation": -29.03, "rotation": -29.03,
"x": -76.46, "x": -76.47,
"y": -5.11, "y": -5.11,
"transform": "noRotationOrReflection" "transform": "noRotationOrReflection"
}, },
{ "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.88, "y": -37.77 }, { "name": "hoverglow_front", "parent": "hoverboard_thruster_front", "x": -1.89, "y": -37.78 },
{ "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.94, "y": -35.65 } { "name": "hoverglow_rear", "parent": "hoverboard_thruster_rear", "x": 0.95, "y": -35.66 }
], ],
"slots": [ "slots": [
{ "name": "hoverboard_thruster_rear", "bone": "hoverboard_thruster_rear", "attachment": "hoverboard_thruster" }, { "name": "hoverboard_thruster_rear", "bone": "hoverboard_thruster_rear", "attachment": "hoverboard_thruster" },
@ -148,26 +141,26 @@
"skins": { "skins": {
"default": { "default": {
"exhaust1": { "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": { "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": {
"eye_indifferent": { "eye_indifferent": {
"type": "mesh", "type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
"triangles": [ 1, 3, 0, 1, 2, 3 ], "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, "hull": 4,
"edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
"width": 93, "width": 93,
"height": 89 "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": {
"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": {
"front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, "front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 },
@ -176,32 +169,32 @@
"front_foot": { "front_foot": {
"front_foot": { "front_foot": {
"type": "mesh", "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 ], "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, "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 ], "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, "width": 126,
"height": 69 "height": 69
}, },
"front_foot_bend1": { "x": 22.86, "y": 20.23, "rotation": 45.31, "width": 128, "height": 70 }, "front_foot_bend1": { "x": 22.86, "y": 20.24, "rotation": 45.32, "width": 128, "height": 70 },
"front_foot_bend2": { "x": 8.15, "y": 19.56, "rotation": 45.31, "width": 108, "height": 93 } "front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 }
}, },
"front_shin": { "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": {
"front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 }
}, },
"front_upper_arm": { "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": {
"goggles": { "goggles": {
"type": "mesh", "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 ], "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, "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 ], "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, "width": 261,
@ -209,14 +202,14 @@
} }
}, },
"gun": { "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": {
"head": { "head": {
"type": "mesh", "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 ], "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, "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 ], "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, "width": 271,
@ -227,76 +220,76 @@
"head": { "head": {
"type": "boundingbox", "type": "boundingbox",
"vertexCount": 6, "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": {
"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_front": {
"hoverboard_thruster": { "y": -7.07, "width": 60, "height": 64 } "hoverboard_thruster": { "y": -7.08, "width": 60, "height": 64 }
}, },
"hoverboard_thruster_rear": { "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_front": {
"hoverglow_small": { "x": 2.13, "y": -2, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.15, "width": 274, "height": 75 } "hoverglow_small": { "x": 2.13, "y": -2, "scaleX": 0.303, "scaleY": 0.495, "rotation": 0.15, "width": 274, "height": 75 }
}, },
"hoverglow_rear": { "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": {
"mouth_grind": { "mouth_grind": {
"type": "mesh", "type": "mesh",
"uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
"triangles": [ 1, 3, 0, 1, 2, 3 ], "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, "hull": 4,
"edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
"width": 93, "width": 93,
"height": 59 "height": 59
}, },
"mouth_oooo": { "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.22, "rotation": -70.62, "width": 93, "height": 59 } "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }
}, },
"muzzle": { "muzzle": {
"muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 }
}, },
"neck": { "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": {
"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": {
"rear_foot": { "rear_foot": {
"type": "mesh", "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 ], "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, "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 ], "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, "width": 113,
"height": 60 "height": 60
}, },
"rear_foot_bend1": { "x": 29.61, "y": 18.12, "rotation": 46.59, "width": 117, "height": 66 }, "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": {
"rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 }
}, },
"rear_thigh": { "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": {
"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": {
"torso": { "torso": {
"type": "mesh", "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 ], "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, "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 ], "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, "width": 98,
@ -327,7 +320,7 @@
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ {
"time": 0.5666, "time": 0.5667,
"color": "ffffffb0", "color": "ffffffb0",
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
@ -347,7 +340,7 @@
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ {
"time": 0.5666, "time": 0.5667,
"color": "ffffffb0", "color": "ffffffb0",
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
@ -389,29 +382,29 @@
"translate": [ "translate": [
{ {
"time": 0, "time": 0,
"x": 4.72, "x": 4.73,
"y": -29.18, "y": -29.19,
"curve": [ 0.155, 0.18, 0.75, 1 ] "curve": [ 0.155, 0.18, 0.75, 1 ]
}, },
{ {
"time": 0.1, "time": 0.1,
"x": 4.72, "x": 4.73,
"y": -34.45, "y": -34.46,
"curve": [ 0.191, -0.39, 0.719, 1 ] "curve": [ 0.191, -0.39, 0.719, 1 ]
}, },
{ {
"time": 0.4333, "time": 0.4333,
"x": 23.48, "x": 23.49,
"y": 14.72, "y": 14.73,
"curve": [ 0.311, 0.02, 0.795, 0.98 ] "curve": [ 0.311, 0.02, 0.796, 0.98 ]
}, },
{ {
"time": 0.8333, "time": 0.8333,
"x": 71.9, "x": 71.9,
"y": 28.45, "y": 28.46,
"curve": [ 0.319, 0, 0.824, 0.84 ] "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": { "torso": {
@ -419,15 +412,15 @@
{ {
"time": 0, "time": 0,
"angle": -5.34, "angle": -5.34,
"curve": [ 0.247, 0, 0.629, 0.52 ] "curve": [ 0.248, 0, 0.629, 0.52 ]
}, },
{ {
"time": 0.3, "time": 0.3,
"angle": -4.14, "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, "angle": 22.54,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
@ -447,16 +440,16 @@
}, },
{ {
"time": 0.3, "time": 0.3,
"angle": -1.58, "angle": -1.59,
"curve": [ 0.45, 0, 0.75, 1 ] "curve": [ 0.451, 0, 0.75, 1 ]
}, },
{ {
"time": 0.6999, "time": 0.7,
"angle": -12.82, "angle": -12.82,
"curve": [ 0.25, 0, 0.625, 0.5 ] "curve": [ 0.25, 0, 0.625, 0.5 ]
}, },
{ {
"time": 1.0666, "time": 1.0667,
"angle": -6.71, "angle": -6.71,
"curve": [ 0.375, 0.5, 0.75, 1 ] "curve": [ 0.375, 0.5, 0.75, 1 ]
}, },
@ -469,11 +462,11 @@
}, },
"head": { "head": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 8.04 }, { "time": 0, "angle": 8.05 },
{ "time": 0.3, "angle": -1.58 }, { "time": 0.3, "angle": -1.59 },
{ "time": 0.6999, "angle": -12.82 }, { "time": 0.7, "angle": -12.82 },
{ "time": 1.0666, "angle": 3.26 }, { "time": 1.0667, "angle": 3.27 },
{ "time": 1.3333, "angle": 8.04 } { "time": 1.3333, "angle": 8.05 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0, "x": 0, "y": 0, "curve": "stepped" },
@ -483,14 +476,14 @@
"hair1": { "hair1": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 6.48 }, { "time": 0, "angle": 6.48 },
{ "time": 0.1333, "angle": 7.25 }, { "time": 0.1333, "angle": 7.26 },
{ "time": 0.2666, "angle": 3.81 }, { "time": 0.2667, "angle": 3.82 },
{ "time": 0.3666, "angle": 5.38 }, { "time": 0.3667, "angle": 5.39 },
{ "time": 0.4666, "angle": 4.42 }, { "time": 0.4667, "angle": 4.43 },
{ "time": 0.6333, "angle": 0.75 }, { "time": 0.6333, "angle": 0.76 },
{ "time": 0.8, "angle": 0.58 }, { "time": 0.8, "angle": 0.58 },
{ "time": 0.8999, "angle": 3.76 }, { "time": 0.9, "angle": 3.76 },
{ "time": 1.0666, "angle": 4.09 }, { "time": 1.0667, "angle": 4.1 },
{ "time": 1.2333, "angle": 7.48 }, { "time": 1.2333, "angle": 7.48 },
{ "time": 1.3333, "angle": 6.48 } { "time": 1.3333, "angle": 6.48 }
], ],
@ -503,13 +496,13 @@
"rotate": [ "rotate": [
{ "time": 0, "angle": 9.46 }, { "time": 0, "angle": 9.46 },
{ "time": 0.1333, "angle": 10.24 }, { "time": 0.1333, "angle": 10.24 },
{ "time": 0.2666, "angle": 6.79 }, { "time": 0.2667, "angle": 6.8 },
{ "time": 0.3666, "angle": 8.36 }, { "time": 0.3667, "angle": 8.37 },
{ "time": 0.4666, "angle": 7.41 }, { "time": 0.4667, "angle": 7.41 },
{ "time": 0.6333, "angle": 3.73 }, { "time": 0.6333, "angle": 3.74 },
{ "time": 0.8, "angle": 3.56 }, { "time": 0.8, "angle": 3.56 },
{ "time": 0.8999, "angle": 6.74 }, { "time": 0.9, "angle": 6.75 },
{ "time": 1.0666, "angle": 7.07 }, { "time": 1.0667, "angle": 7.08 },
{ "time": 1.2333, "angle": 10.46 }, { "time": 1.2333, "angle": 10.46 },
{ "time": 1.3333, "angle": 9.46 } { "time": 1.3333, "angle": 9.46 }
], ],
@ -521,14 +514,14 @@
"hair2": { "hair2": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -0.25 }, { "time": 0, "angle": -0.25 },
{ "time": 0.1333, "angle": 6.78 }, { "time": 0.1333, "angle": 6.79 },
{ "time": 0.2666, "angle": 9.6 }, { "time": 0.2667, "angle": 9.6 },
{ "time": 0.3666, "angle": 15.86 }, { "time": 0.3667, "angle": 15.87 },
{ "time": 0.4666, "angle": 19.6 }, { "time": 0.4667, "angle": 19.6 },
{ "time": 0.6333, "angle": 3.35 }, { "time": 0.6333, "angle": 3.35 },
{ "time": 0.8, "angle": -9.4 }, { "time": 0.8, "angle": -9.4 },
{ "time": 0.8999, "angle": -5.61 }, { "time": 0.9, "angle": -5.61 },
{ "time": 1.0666, "angle": -4.26 }, { "time": 1.0667, "angle": -4.26 },
{ "time": 1.2333, "angle": 0.14 }, { "time": 1.2333, "angle": 0.14 },
{ "time": 1.3333, "angle": -0.25 } { "time": 1.3333, "angle": -0.25 }
], ],
@ -541,15 +534,15 @@
"rotate": [ "rotate": [
{ "time": 0, "angle": 6.9 }, { "time": 0, "angle": 6.9 },
{ "time": 0.1333, "angle": 7.86 }, { "time": 0.1333, "angle": 7.86 },
{ "time": 0.2333, "angle": 5.54 }, { "time": 0.2333, "angle": 5.55 },
{ "time": 0.3666, "angle": 11.19 }, { "time": 0.3667, "angle": 11.19 },
{ "time": 0.5, "angle": 12.62 }, { "time": 0.5, "angle": 12.62 },
{ "time": 0.6, "angle": 17.84 }, { "time": 0.6, "angle": 17.84 },
{ "time": 0.6999, "angle": 20.53 }, { "time": 0.7, "angle": 20.54 },
{ "time": 0.8666, "angle": 11.84 }, { "time": 0.8667, "angle": 11.84 },
{ "time": 1.0333, "angle": 6.65 }, { "time": 1.0333, "angle": 6.65 },
{ "time": 1.1333, "angle": 8.52 }, { "time": 1.1333, "angle": 8.52 },
{ "time": 1.2999, "angle": 6.66 }, { "time": 1.3, "angle": 6.66 },
{ "time": 1.3333, "angle": 6.9 } { "time": 1.3333, "angle": 6.9 }
], ],
"translate": [ "translate": [
@ -562,12 +555,12 @@
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": 24.72, "angle": 24.73,
"curve": [ 0.259, 0, 0.618, 0.44 ] "curve": [ 0.259, 0, 0.618, 0.45 ]
}, },
{ {
"time": 0.4, "time": 0.4,
"angle": 35.93, "angle": 35.94,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ {
@ -576,11 +569,11 @@
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ {
"time": 1.1666, "time": 1.1667,
"angle": 31.47, "angle": 31.48,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "angle": 24.72 } { "time": 1.3333, "angle": 24.73 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0, "x": 0, "y": 0, "curve": "stepped" },
@ -592,12 +585,12 @@
{ {
"time": 0, "time": 0,
"angle": 0, "angle": 0,
"curve": [ 0.257, 0, 0.618, 0.45 ] "curve": [ 0.258, 0, 0.619, 0.45 ]
}, },
{ {
"time": 0.3333, "time": 0.3333,
"angle": 15.41, "angle": 15.42,
"curve": [ 0.195, 0.35, 0.75, 1 ] "curve": [ 0.196, 0.35, 0.75, 1 ]
}, },
{ {
"time": 0.8333, "time": 0.8333,
@ -609,23 +602,23 @@
"translate": [ "translate": [
{ {
"time": 0, "time": 0,
"x": 25.22, "x": 25.23,
"y": 7.84, "y": 7.85,
"curve": [ 0.553, 0.02, 0.75, 1 ] "curve": [ 0.554, 0.02, 0.75, 1 ]
}, },
{ {
"time": 0.5, "time": 0.5,
"x": 67.8, "x": 67.8,
"y": 62.57, "y": 62.58,
"curve": [ 0.246, 0, 0.737, 1 ] "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": { "front_foot_ik": {
"rotate": [ "rotate": [
{ "time": 0, "angle": -22.24 }, { "time": 0, "angle": -22.24 },
{ "time": 0.5, "angle": 9.33 }, { "time": 0.5, "angle": 9.34 },
{ "time": 1.3333, "angle": -22.24 } { "time": 1.3333, "angle": -22.24 }
], ],
"translate": [ "translate": [
@ -755,8 +748,8 @@
"rotate": [ "rotate": [
{ "time": 0, "angle": -6.56 }, { "time": 0, "angle": -6.56 },
{ {
"time": 0.6999, "time": 0.7,
"angle": -45.47, "angle": -45.48,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "angle": -6.56 } { "time": 1.3333, "angle": -6.56 }
@ -770,8 +763,8 @@
}, },
{ {
"time": 0.4333, "time": 0.4333,
"x": 4.01, "x": 4.02,
"y": 1.45, "y": 1.46,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "x": 0, "y": 0 } { "time": 1.3333, "x": 0, "y": 0 }
@ -806,7 +799,7 @@
}, },
{ {
"time": 0.8, "time": 0.8,
"angle": -22.48, "angle": -22.49,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "angle": 0 } { "time": 1.3333, "angle": 0 }
@ -821,16 +814,16 @@
{ {
"time": 0, "time": 0,
"angle": 53, "angle": 53,
"curve": [ 0.259, 0, 0.618, 0.44 ] "curve": [ 0.259, 0, 0.618, 0.45 ]
}, },
{ {
"time": 0.6999, "time": 0.7,
"angle": 27.8, "angle": 27.81,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ {
"time": 1, "time": 1,
"angle": 56.88, "angle": 56.89,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "angle": 53 } { "time": 1.3333, "angle": 53 }
@ -855,7 +848,7 @@
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ {
"time": 0.8, "time": 0.8,
"angle": 16.99, "angle": 17,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "angle": 0 } { "time": 1.3333, "angle": 0 }
@ -899,15 +892,15 @@
"rotate": [ "rotate": [
{ {
"time": 0, "time": 0,
"angle": 20.28, "angle": 20.29,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ {
"time": 0.8, "time": 0.8,
"angle": 3.84, "angle": 3.85,
"curve": [ 0.25, 0, 0.75, 1 ] "curve": [ 0.25, 0, 0.75, 1 ]
}, },
{ "time": 1.3333, "angle": 20.28 } { "time": 1.3333, "angle": 20.29 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0, "x": 0, "y": 0, "curve": "stepped" },
@ -927,14 +920,14 @@
"hoverglow_front": { "hoverglow_front": {
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1.3333, "x": 1, "y": 1 }
] ]
}, },
"hoverglow_rear": { "hoverglow_rear": {
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1.3333, "x": 1, "y": 1 }
] ]
}, },
@ -942,7 +935,7 @@
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "time": 0, "x": 1, "y": 1 },
{ "time": 0.3333, "x": 1.597, "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 } { "time": 1.3333, "x": 1, "y": 1 }
] ]
}, },
@ -950,7 +943,7 @@
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "time": 0, "x": 1, "y": 1 },
{ "time": 0.3333, "x": 1.597, "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 } { "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": { "skeleton": { "hash": "/FQ62MLXDzS93xb3LzhPr1aQxX8", "spine": "3.6.05-beta", "width": 1680, "height": 1782.28, "images": "./images/" },
"hash": "vfzL8SvUQWTNRil1kGbSbWF5R60",
"spine": "3.5.03-beta",
"width": 1680,
"height": 1782.27,
"fps": 30,
"images": "./images/"
},
"bones": [ "bones": [
{ "name": "root", "y": -526.31 }, { "name": "root", "y": -526.32 },
{ "name": "leaves", "parent": "root", "x": -0.16, "y": 1310.1 }, { "name": "leaves", "parent": "root", "x": -0.17, "y": 1310.1 },
{ "name": "logo", "parent": "root", "y": 1332.02 }, { "name": "logo", "parent": "root", "y": 1332.03 },
{ "name": "play", "parent": "root", "x": 3.02, "y": -83.61 }, { "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 } { "name": "settings", "parent": "root", "x": 3.02, "y": -144.37 }
], ],
"slots": [ "slots": [
@ -29,7 +22,7 @@
"leaves": { "y": -28.54, "width": 1042, "height": 522 } "leaves": { "y": -28.54, "width": 1042, "height": 522 }
}, },
"logo": { "logo": {
"logo": { "y": -20.39, "width": 917, "height": 323 } "logo": { "y": -20.4, "width": 917, "height": 323 }
}, },
"play": { "play": {
"play": { "width": 218, "height": 77 } "play": { "width": 218, "height": 77 }
@ -60,9 +53,9 @@
"play": { "play": {
"color": [ "color": [
{ "time": 1.3333, "color": "fff99dff" }, { "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": 1.8333, "color": "ffffffff" },
{ "time": 2.0666, "color": "fff99dff" } { "time": 2.0667, "color": "fff99dff" }
] ]
}, },
"quit": { "quit": {
@ -73,10 +66,10 @@
}, },
"settings": { "settings": {
"color": [ "color": [
{ "time": 1.8666, "color": "fff99dff" }, { "time": 1.8667, "color": "fff99dff" },
{ "time": 2.0999, "color": "ffffffff", "curve": "stepped" }, { "time": 2.1, "color": "ffffffff", "curve": "stepped" },
{ "time": 2.3666, "color": "ffffffff" }, { "time": 2.3667, "color": "ffffffff" },
{ "time": 2.5999, "color": "fff99dff" } { "time": 2.6, "color": "fff99dff" }
] ]
} }
}, },
@ -87,39 +80,39 @@
"time": 0, "time": 0,
"x": 0, "x": 0,
"y": 40.8, "y": 40.8,
"curve": [ 0.043, 0.15, 0.344, 1.26 ] "curve": [ 0.043, 0.15, 0.345, 1.27 ]
}, },
{ {
"time": 0.3333, "time": 0.3333,
"x": 0, "x": 0,
"y": -597.71, "y": -597.72,
"curve": [ 0.425, 0.17, 0.591, 0.99 ] "curve": [ 0.425, 0.17, 0.592, 1 ]
}, },
{ {
"time": 1, "time": 1,
"x": 0, "x": 0,
"y": -583.71, "y": -583.72,
"curve": [ 0.402, 0, 0.603, 1 ] "curve": [ 0.402, 0, 0.603, 1 ]
}, },
{ {
"time": 1.6666, "time": 1.6667,
"x": 0, "x": 0,
"y": -592.11, "y": -592.12,
"curve": [ 0.408, 0.01, 0.655, 0.98 ] "curve": [ 0.408, 0.01, 0.655, 0.99 ]
}, },
{ {
"time": 2.3333, "time": 2.3333,
"x": 0, "x": 0,
"y": -583.71, "y": -583.72,
"curve": [ 0.402, 0, 0.603, 0.99 ] "curve": [ 0.402, 0, 0.603, 1 ]
}, },
{ {
"time": 3, "time": 3,
"x": 0, "x": 0,
"y": -592.11, "y": -592.12,
"curve": [ 0.408, 0.01, 0.655, 0.98 ] "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": [ "scale": [
{ {
@ -132,61 +125,61 @@
"time": 0.3333, "time": 0.3333,
"x": 1, "x": 1,
"y": 1, "y": 1,
"curve": [ 0.189, 0.37, 0.658, 0.98 ] "curve": [ 0.19, 0.38, 0.658, 0.99 ]
}, },
{ {
"time": 1, "time": 1,
"x": 1.019, "x": 1.02,
"y": 1.029, "y": 1.03,
"curve": [ 0.37, 0, 0.66, 0.99 ] "curve": [ 0.371, 0, 0.661, 1 ]
}, },
{ {
"time": 1.6666, "time": 1.6667,
"x": 1, "x": 1,
"y": 1, "y": 1,
"curve": [ 0.387, 0.01, 0.686, 1 ] "curve": [ 0.388, 0.01, 0.687, 1 ]
}, },
{ {
"time": 2.3333, "time": 2.3333,
"x": 1.019, "x": 1.02,
"y": 1.029, "y": 1.03,
"curve": [ 0.37, 0, 0.66, 0.99 ] "curve": [ 0.371, 0, 0.661, 1 ]
}, },
{ {
"time": 3, "time": 3,
"x": 1, "x": 1,
"y": 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": { "play": {
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0, "curve": "stepped" }, { "time": 0, "x": 0, "y": 0, "curve": "stepped" },
{ {
"time": 0.6666, "time": 0.6667,
"x": 0, "x": 0,
"y": 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": [ "scale": [
{ {
"time": 1.3333, "time": 1.3333,
"x": 1, "x": 1,
"y": 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, "time": 1.8333,
"x": 1.231, "x": 1.231,
"y": 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": { "settings": {
@ -195,25 +188,25 @@
"time": 0.8, "time": 0.8,
"x": 0, "x": 0,
"y": 0, "y": 0,
"curve": [ 0, 0, 0.448, 1.62 ] "curve": [ 0, 0, 0.448, 1.63 ]
}, },
{ "time": 1, "x": 0, "y": 431.2 } { "time": 1, "x": 0, "y": 431.2 }
], ],
"scale": [ "scale": [
{ {
"time": 1.8666, "time": 1.8667,
"x": 1, "x": 1,
"y": 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, "x": 1.23,
"y": 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": { "quit": {
@ -222,7 +215,7 @@
"time": 0.9333, "time": 0.9333,
"x": 0, "x": 0,
"y": 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 } { "time": 1.1333, "x": 0, "y": 376.32 }
], ],
@ -231,7 +224,7 @@
"time": 2.4, "time": 2.4,
"x": 1, "x": 1,
"y": 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 } { "time": 2.6333, "x": 1.23, "y": 1.23 }
] ]
@ -242,28 +235,28 @@
"time": 0, "time": 0,
"x": 0, "x": 0,
"y": 0, "y": 0,
"curve": [ 0.043, 0.15, 0.344, 1.26 ] "curve": [ 0.043, 0.15, 0.345, 1.27 ]
}, },
{ {
"time": 0.3333, "time": 0.3333,
"x": 0.16, "x": 0.17,
"y": -601.23, "y": -601.24,
"curve": [ 0.425, 0.17, 0.591, 0.99 ] "curve": [ 0.425, 0.17, 0.592, 1 ]
}, },
{ {
"time": 1.3333, "time": 1.3333,
"x": 0.16, "x": 0.17,
"y": -580.83, "y": -580.84,
"curve": [ 0.402, 0, 0.603, 1 ] "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, "time": 2.6667,
"x": 0.16, "x": 0.17,
"y": -580.83, "y": -580.84,
"curve": [ 0.402, 0, 0.603, 1 ] "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": [ "scale": [
{ {
@ -273,9 +266,9 @@
"curve": [ 0, 0, 0.744, 0.4 ] "curve": [ 0, 0, 0.744, 0.4 ]
}, },
{ "time": 0.3333, "x": 1, "y": 1 }, { "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, "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 } { "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": { "skeleton": { "hash": "64h+ct/Nr1wkBrgZHtYbbfXpBlI", "spine": "3.6.05-beta", "width": 1333.78, "height": 1112.91, "images": "./images/" },
"hash": "i05EldfljpjLC64I/kHnNrqzJ5A",
"spine": "3.5.03-beta",
"width": 1333.78,
"height": 1112.91,
"fps": 30,
"images": "./images/"
},
"bones": [ "bones": [
{ "name": "root", "x": 28.68, "y": -105.7 }, { "name": "root", "x": 28.68, "y": -105.71 },
{ "name": "attachment", "parent": "root", "x": -267.7, "y": -366.61 }, { "name": "attachment", "parent": "root", "x": -267.71, "y": -366.62 },
{ "name": "color", "parent": "root", "x": -298.29, "y": 44.09 }, { "name": "color", "parent": "root", "x": -298.3, "y": 44.1 },
{ "name": "draworder", "parent": "root", "x": 283.52, "y": -356.26 }, { "name": "draworder", "parent": "root", "x": 283.53, "y": -356.27 },
{ "name": "mesh", "parent": "root", "x": -320.73, "y": 413.7 }, { "name": "mesh", "parent": "root", "x": -320.74, "y": 413.7 },
{ "name": "meshweighted", "parent": "root", "rotation": -11.22, "x": -353.27, "y": 627.53 }, { "name": "meshweighted", "parent": "root", "rotation": -11.22, "x": -353.28, "y": 627.53 },
{ "name": "pathfollower", "parent": "root", "x": 177.52, "y": 56.61 }, { "name": "pathfollower", "parent": "root", "x": 177.52, "y": 56.62 },
{ "name": "rotate", "parent": "root", "x": -305, "y": 201 }, { "name": "rotate", "parent": "root", "x": -305, "y": 201 },
{ "name": "scale", "parent": "root", "x": 183.99, "y": -138 }, { "name": "scale", "parent": "root", "x": 183.99, "y": -138 },
{ "name": "shear", "parent": "root", "x": -304, "y": -146 }, { "name": "shear", "parent": "root", "x": -304, "y": -146 },
@ -81,7 +74,7 @@
"path": "spine", "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 ], "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 ], "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, "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 ], "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, "width": 377,
@ -114,9 +107,9 @@
"images/spine": { "images/spine": {
"type": "mesh", "type": "mesh",
"path": "spine", "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 ], "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, "hull": 10,
"edges": [ 10, 12, 12, 14, 14, 16, 16, 18, 2, 0, 0, 18, 6, 8, 8, 10, 2, 4, 4, 6 ], "edges": [ 10, 12, 12, 14, 14, 16, 16, 18, 2, 0, 0, 18, 6, 8, 8, 10, 2, 4, 4, 6 ],
"width": 377, "width": 377,
@ -127,9 +120,9 @@
"path": { "path": {
"type": "path", "type": "path",
"closed": true, "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, "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": [ "color": [
{ "time": 0, "color": "ffffffff" }, { "time": 0, "color": "ffffffff" },
{ "time": 0.4333, "color": "ff0901ff" }, { "time": 0.4333, "color": "ff0901ff" },
{ "time": 0.8999, "color": "2dff00ff" }, { "time": 0.9, "color": "2dff00ff" },
{ "time": 1.3333, "color": "ffffffff" } { "time": 1.3333, "color": "ffffffff" }
] ]
}, },
"images/spine10": { "images/spine10": {
"attachment": [ "attachment": [
{ "time": 0, "name": "images/spine" }, { "time": 0, "name": "images/spine" },
{ "time": 0.6666, "name": "images/logo" }, { "time": 0.6667, "name": "images/logo" },
{ "time": 1.3333, "name": "images/spine" } { "time": 1.3333, "name": "images/spine" }
] ]
}, },
"images/spine12": { "images/spine12": {
"attachment": [ "attachment": [
{ "time": 0, "name": "images/spine" }, { "time": 0, "name": "images/spine" },
{ "time": 0.6666, "name": "linkedmesh" } { "time": 0.6667, "name": "linkedmesh" }
] ]
} }
}, },
@ -168,50 +161,50 @@
"y": 0, "y": 0,
"curve": [ 1, 0, 0, 1 ] "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 } { "time": 1.3333, "x": 0, "y": 0 }
] ]
}, },
"scale": { "scale": {
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1.3333, "x": 1, "y": 1 }
] ]
}, },
"rotate": { "rotate": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.6666, "angle": -125.33 }, { "time": 0.6667, "angle": -125.34 },
{ "time": 1.3333, "angle": 0 } { "time": 1.3333, "angle": 0 }
] ]
}, },
"shear": { "shear": {
"shear": [ "shear": [
{ "time": 0, "x": 0, "y": 0 }, { "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 } { "time": 1.3333, "x": 0, "y": 0 }
] ]
}, },
"transformconstrainttarget": { "transformconstrainttarget": {
"rotate": [ "rotate": [
{ "time": 0, "angle": 0 }, { "time": 0, "angle": 0 },
{ "time": 0.6666, "angle": -74.59 }, { "time": 0.6667, "angle": -74.6 },
{ "time": 1.3333, "angle": 0 } { "time": 1.3333, "angle": 0 }
], ],
"translate": [ "translate": [
{ "time": 0, "x": 0, "y": 0 }, { "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 } { "time": 1.3333, "x": 0, "y": 0 }
], ],
"scale": [ "scale": [
{ "time": 0, "x": 1, "y": 1 }, { "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 } { "time": 1.3333, "x": 1, "y": 1 }
], ],
"shear": [ "shear": [
{ "time": 0, "x": 0, "y": 0 }, { "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 } { "time": 1.3333, "x": 0, "y": 0 }
] ]
} }
@ -219,7 +212,7 @@
"transform": { "transform": {
"transformconstraint": [ "transformconstraint": [
{ "time": 0, "rotateMix": 0.509, "translateMix": 0.509, "scaleMix": 0.509, "shearMix": 0.509 }, { "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 } { "time": 1.3333, "rotateMix": 0.5, "translateMix": 0.5, "scaleMix": 0.5, "shearMix": 0.5 }
] ]
}, },
@ -230,11 +223,11 @@
{ "time": 1.3333, "position": 1 } { "time": 1.3333, "position": 1 }
], ],
"spacing": [ "spacing": [
{ "time": 0, "spacing": 40.0999 }, { "time": 0, "spacing": 40.1 },
{ "time": 1.3333 } { "time": 1.3333 }
], ],
"mix": [ "mix": [
{ "time": 0.6666, "rotateMix": 0.4729, "translateMix": 0.4729 }, { "time": 0.6667, "rotateMix": 0.473, "translateMix": 0.473 },
{ "time": 1.3333 } { "time": 1.3333 }
] ]
} }
@ -245,8 +238,8 @@
"images/spine": [ "images/spine": [
{ "time": 0 }, { "time": 0 },
{ {
"time": 0.6666, "time": 0.6667,
"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 ] "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 } { "time": 1.3333 }
] ]
@ -257,16 +250,16 @@
{ {
"time": 0.3333, "time": 0.3333,
"offset": 4, "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, "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, "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": [ "drawOrder": [
{ "time": 0 }, { "time": 0 },
{ {
"time": 0.6666, "time": 0.6667,
"offsets": [ "offsets": [
{ "slot": "draworder2", "offset": 1 } { "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 eclipse.preferences.version=1
encoding//src/spine/animation/TwoColorTimeline.as=UTF-8
encoding//src/spine/attachments/PointAttachment.as=UTF-8
encoding/<project>=UTF-8 encoding/<project>=UTF-8

View File

@ -53,12 +53,12 @@ public class Bone implements Updatable {
public var ashearY:Number; public var ashearY:Number;
public var appliedValid:Boolean; public var appliedValid:Boolean;
internal var _a:Number; public var a:Number;
internal var _b:Number; public var b:Number;
internal var _c:Number; public var c:Number;
internal var _d:Number; public var d:Number;
internal var _worldX:Number; public var worldX:Number;
internal var _worldY:Number; public var worldY:Number;
internal var _sorted:Boolean; internal var _sorted:Boolean;
@ -115,38 +115,38 @@ public class Bone implements Updatable {
lc = -lc; lc = -lc;
ld = -ld; ld = -ld;
} }
_a = la; this.a = la;
_b = lb; this.b = lb;
_c = lc; this.c = lc;
_d = ld; this.d = ld;
_worldX = x + skeleton.x; worldX = x + skeleton.x;
_worldY = y + skeleton.y; worldY = y + skeleton.y;
return; return;
} }
var pa:Number = parent._a, pb:Number = parent._b, pc:Number = parent._c, pd:Number = parent._d; var pa:Number = parent.a, pb:Number = parent.b, pc:Number = parent.c, pd:Number = parent.d;
_worldX = pa * x + pb * y + parent._worldX; worldX = pa * x + pb * y + parent.worldX;
_worldY = pc * x + pd * y + parent._worldY; worldY = pc * x + pd * y + parent.worldY;
switch (_data.transformMode) { switch (this.data.transformMode) {
case TransformMode.normal: { case TransformMode.normal: {
rotationY = rotation + 90 + shearY; rotationY = rotation + 90 + shearY;
la = MathUtils.cosDeg(rotation + shearX) * scaleX; la = MathUtils.cosDeg(rotation + shearX) * scaleX;
lb = MathUtils.cosDeg(rotationY) * scaleY; lb = MathUtils.cosDeg(rotationY) * scaleY;
lc = MathUtils.sinDeg(rotation + shearX) * scaleX; lc = MathUtils.sinDeg(rotation + shearX) * scaleX;
ld = MathUtils.sinDeg(rotationY) * scaleY; ld = MathUtils.sinDeg(rotationY) * scaleY;
_a = pa * la + pb * lc; this.a = pa * la + pb * lc;
_b = pa * lb + pb * ld; this.b = pa * lb + pb * ld;
_c = pc * la + pd * lc; this.c = pc * la + pd * lc;
_d = pc * lb + pd * ld; this.d = pc * lb + pd * ld;
return; return;
} }
case TransformMode.onlyTranslation: { case TransformMode.onlyTranslation: {
rotationY = rotation + 90 + shearY; rotationY = rotation + 90 + shearY;
_a = MathUtils.cosDeg(rotation + shearX) * scaleX; this.a = MathUtils.cosDeg(rotation + shearX) * scaleX;
_b = MathUtils.cosDeg(rotationY) * scaleY; this.b = MathUtils.cosDeg(rotationY) * scaleY;
_c = MathUtils.sinDeg(rotation + shearX) * scaleX; this.c = MathUtils.sinDeg(rotation + shearX) * scaleX;
_d = MathUtils.sinDeg(rotationY) * scaleY; this.d = MathUtils.sinDeg(rotationY) * scaleY;
break; break;
} }
case TransformMode.noRotationOrReflection: { case TransformMode.noRotationOrReflection: {
@ -168,10 +168,10 @@ public class Bone implements Updatable {
lb = MathUtils.cosDeg(ry) * scaleY; lb = MathUtils.cosDeg(ry) * scaleY;
lc = MathUtils.sinDeg(rx) * scaleX; lc = MathUtils.sinDeg(rx) * scaleX;
ld = MathUtils.sinDeg(ry) * scaleY; ld = MathUtils.sinDeg(ry) * scaleY;
_a = pa * la - pb * lc; this.a = pa * la - pb * lc;
_b = pa * lb - pb * ld; this.b = pa * lb - pb * ld;
_c = pc * la + pd * lc; this.c = pc * la + pd * lc;
_d = pc * lb + pd * ld; this.d = pc * lb + pd * ld;
break; break;
} }
case TransformMode.noScale: case TransformMode.noScale:
@ -192,35 +192,35 @@ public class Bone implements Updatable {
lb = MathUtils.cosDeg(90 + shearY) * scaleY; lb = MathUtils.cosDeg(90 + shearY) * scaleY;
lc = MathUtils.sinDeg(shearX) * scaleX; lc = MathUtils.sinDeg(shearX) * scaleX;
ld = MathUtils.sinDeg(90 + shearY) * scaleY; ld = MathUtils.sinDeg(90 + shearY) * scaleY;
_a = za * la + zb * lc; this.a = za * la + zb * lc;
_b = za * lb + zb * ld; this.b = za * lb + zb * ld;
_c = zc * la + zd * lc; this.c = zc * la + zd * lc;
_d = zc * lb + zd * ld; this.d = zc * lb + zd * ld;
if (_data.transformMode != TransformMode.noScaleOrReflection ? pa * pd - pb * pc < 0 : skeleton.flipX != skeleton.flipY) { if (this.data.transformMode != TransformMode.noScaleOrReflection ? pa * pd - pb * pc < 0 : skeleton.flipX != skeleton.flipY) {
_b = -_b; this.b = -this.b;
_d = -_d; this.d = -this.d;
} }
return; return;
} }
} }
if (_skeleton.flipX) { if (_skeleton.flipX) {
_a = -_a; this.a = -this.a;
_b = -_b; this.b = -this.b;
} }
if (_skeleton.flipY != yDown) { if (_skeleton.flipY != yDown) {
_c = -_c; this.c = -this.c;
_d = -_d; this.d = -this.d;
} }
} }
public function setToSetupPose () : void { public function setToSetupPose () : void {
x = _data.x; x = this.data.x;
y = _data.y; y = this.data.y;
rotation = _data.rotation; rotation = this.data.rotation;
scaleX = _data.scaleX; scaleX = this.data.scaleX;
scaleY = _data.scaleY; scaleY = this.data.scaleY;
shearX = _data.shearX; shearX = this.data.shearX;
shearY = _data.shearY; shearY = this.data.shearY;
} }
public function get data () : BoneData { public function get data () : BoneData {
@ -237,70 +237,22 @@ public class Bone implements Updatable {
public function get children () : Vector.<Bone> {; public function get children () : Vector.<Bone> {;
return _children; 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 { 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 { 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 { 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 { public function get worldScaleY () : Number {
return Math.sqrt(_b * _b + _d * _d); return Math.sqrt(this.b * this.b + this.d * this.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;
} }
/** Computes the individual applied transform values from the world transform. This can be useful to perform processing using /** 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 { 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 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[0] = (x * d * invDet - y * b * invDet);
world[1] = (y * a * invDet - x * c * invDet); world[1] = (y * a * invDet - x * c * invDet);
} }
public function localToWorld (local:Vector.<Number>) : void { public function localToWorld (local:Vector.<Number>) : void {
var localX:Number = local[0], localY:Number = local[1]; var localX:Number = local[0], localY:Number = local[1];
local[0] = localX * _a + localY * _b + _worldX; local[0] = localX * this.a + localY * this.b + this.worldX;
local[1] = localX * _c + localY * _d + _worldY; 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 { 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 { public function update () : void {
switch (bones.length) { switch (bones.length) {
case 1: case 1:
apply1(bones[0], target._worldX, target._worldY, mix); apply1(bones[0], target.worldX, target.worldY, mix);
break; break;
case 2: 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; break;
} }
} }

View File

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

View File

@ -29,6 +29,8 @@
*****************************************************************************/ *****************************************************************************/
package spine { package spine {
import spine.attachments.MeshAttachment;
import spine.attachments.RegionAttachment;
import flash.utils.Dictionary; import flash.utils.Dictionary;
import spine.attachments.PathAttachment; import spine.attachments.PathAttachment;
import spine.attachments.Attachment; import spine.attachments.Attachment;
@ -44,7 +46,7 @@ public class Skeleton {
private var _updateCache:Vector.<Updatable> = new Vector.<Updatable>(); private var _updateCache:Vector.<Updatable> = new Vector.<Updatable>();
private var _updateCacheReset:Vector.<Bone> = new Vector.<Bone>(); private var _updateCacheReset:Vector.<Bone> = new Vector.<Bone>();
private var _skin:Skin; 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 time:Number = 0;
public var flipX:Boolean, flipY:Boolean; public var flipX:Boolean, flipY:Boolean;
public var x:Number = 0, y:Number = 0; public var x:Number = 0, y:Number = 0;
@ -96,6 +98,7 @@ public class Skeleton {
public function updateCache () : void { public function updateCache () : void {
var updateCache:Vector.<Updatable> = this._updateCache; var updateCache:Vector.<Updatable> = this._updateCache;
updateCache.length = 0; updateCache.length = 0;
this._updateCacheReset.length = 0;
var bones:Vector.<Bone> = this.bones; var bones:Vector.<Bone> = this.bones;
var i:Number = 0; var i:Number = 0;
@ -166,25 +169,25 @@ public class Skeleton {
if (skin != null) sortPathConstraintAttachment(skin, slotIndex, slotBone); if (skin != null) sortPathConstraintAttachment(skin, slotIndex, slotBone);
if (data.defaultSkin != null && data.defaultSkin != skin) if (data.defaultSkin != null && data.defaultSkin != skin)
sortPathConstraintAttachment(data.defaultSkin, slotIndex, slotBone); sortPathConstraintAttachment(data.defaultSkin, slotIndex, slotBone);
var ii:Number = 0; var i:Number = 0;
var nn:Number = 0; var n:Number = 0;
for (ii = 0, nn = data.skins.length; ii < nn; ii++) for (i = 0, n = data.skins.length; i < n; i++)
sortPathConstraintAttachment(data.skins[ii], slotIndex, slotBone); sortPathConstraintAttachment(data.skins[i], slotIndex, slotBone);
var attachment:Attachment = slot.attachment; var attachment:Attachment = slot.attachment;
if (attachment is PathAttachment) sortPathConstraintAttachment2(attachment, slotBone); if (attachment is PathAttachment) sortPathConstraintAttachment2(attachment, slotBone);
var constrained:Vector.<Bone> = constraint.bones; var constrained:Vector.<Bone> = constraint.bones;
var boneCount:Number = constrained.length; var boneCount:Number = constrained.length;
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
sortBone(constrained[ii]); sortBone(constrained[i]);
_updateCache.push(constraint); _updateCache.push(constraint);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
sortReset(constrained[ii].children); sortReset(constrained[i].children);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
constrained[ii]._sorted = true; constrained[i]._sorted = true;
} }
private function sortTransformConstraint (constraint:TransformConstraint): void { private function sortTransformConstraint (constraint:TransformConstraint): void {
@ -192,16 +195,24 @@ public class Skeleton {
var constrained:Vector.<Bone> = constraint.bones; var constrained:Vector.<Bone> = constraint.bones;
var boneCount:Number = constrained.length; var boneCount:Number = constrained.length;
var ii:Number = 0; var i:Number = 0;
for (ii = 0; ii < boneCount; ii++) if (constraint.data.local) {
sortBone(constrained[ii]); 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); _updateCache.push(constraint);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
sortReset(constrained[ii].children); sortReset(constrained[i].children);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
constrained[ii]._sorted = true; constrained[i]._sorted = true;
} }
private function sortPathConstraintAttachment (skin:Skin, slotIndex:int, slotBone:Bone) : void { private function sortPathConstraintAttachment (skin:Skin, slotIndex:int, slotBone:Bone) : void {
@ -463,6 +474,44 @@ public class Skeleton {
public function toString () : String { public function toString () : String {
return _data.name != null ? _data.name : super.toString(); 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; polygons[polygons.length] = polygon;
polygon.vertices.length = boundingBox.worldVerticesLength; polygon.vertices.length = boundingBox.worldVerticesLength;
boundingBox.computeWorldVertices(slot, polygon.vertices); boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon.vertices, 0, 2);
} }
if (updateAabb) if (updateAabb)

View File

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

View File

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

View File

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

View File

@ -57,8 +57,23 @@ public class TransformConstraint implements Constraint {
public function apply () : void { public function apply () : void {
update(); update();
} }
public function update () : void { 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 rotateMix:Number = this.rotateMix, translateMix:Number = this.translateMix, scaleMix:Number = this.scaleMix, shearMix:Number = this.shearMix;
var target:Bone = this.target; var target:Bone = this.target;
var ta:Number = target.a, tb:Number = target.b, tc:Number = target.c, td:Number = target.d; 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; else if (r < -Math.PI) r += Math.PI * 2;
r *= rotateMix; r *= rotateMix;
var cos:Number = Math.cos(r), sin:Number = Math.sin(r); var cos:Number = Math.cos(r), sin:Number = Math.sin(r);
bone._a = cos * a - sin * c; bone.a = cos * a - sin * c;
bone._b = cos * b - sin * d; bone.b = cos * b - sin * d;
bone._c = sin * a + cos * c; bone.c = sin * a + cos * c;
bone._d = sin * b + cos * d; bone.d = sin * b + cos * d;
modified = true; modified = true;
} }
@ -89,8 +104,8 @@ public class TransformConstraint implements Constraint {
_temp[0] = data.offsetX; _temp[0] = data.offsetX;
_temp[1] = data.offsetY; _temp[1] = data.offsetY;
target.localToWorld(_temp); target.localToWorld(_temp);
bone._worldX += (_temp[0] - bone.worldX) * translateMix; bone.worldX += (_temp[0] - bone.worldX) * translateMix;
bone._worldY += (_temp[1] - bone.worldY) * translateMix; bone.worldY += (_temp[1] - bone.worldY) * translateMix;
modified = true; 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 s:Number = Math.sqrt(bone.a * bone.a + bone.c * bone.c);
var ts:Number = Math.sqrt(ta * ta + tc * tc); var ts:Number = Math.sqrt(ta * ta + tc * tc);
if (s > 0.00001) s = (s + (ts - s + data.offsetScaleX) * scaleMix) / s; if (s > 0.00001) s = (s + (ts - s + data.offsetScaleX) * scaleMix) / s;
bone._a *= s; bone.a *= s;
bone._c *= s; bone.c *= s;
s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);
ts = Math.sqrt(tb * tb + td * td); ts = Math.sqrt(tb * tb + td * td);
if (s > 0.00001) s = (s + (ts - s + data.offsetScaleY) * scaleMix) / s; if (s > 0.00001) s = (s + (ts - s + data.offsetScaleY) * scaleMix) / s;
bone._b *= s; bone.b *= s;
bone._d *= s; bone.d *= s;
modified = true; modified = true;
} }
@ -117,8 +132,8 @@ public class TransformConstraint implements Constraint {
else if (r < -Math.PI) r += Math.PI * 2; else if (r < -Math.PI) r += Math.PI * 2;
r = by + (r + offsetShearY) * shearMix; r = by + (r + offsetShearY) * shearMix;
s = Math.sqrt(b * b + d * d); s = Math.sqrt(b * b + d * d);
bone._b = Math.cos(r) * s; bone.b = Math.cos(r) * s;
bone._d = Math.sin(r) * s; bone.d = Math.sin(r) * s;
modified = true; 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 { public function getOrder () : Number {
return _data.order; return _data.order;
} }

View File

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

View File

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

View File

@ -66,10 +66,7 @@ public class ColorTimeline extends CurveTimeline {
if (time < frames[0]) { if (time < frames[0]) {
if (setupPose) { if (setupPose) {
slot.r = slot.data.r; slot.color.setFromColor(slot.data.color);
slot.g = slot.data.g;
slot.b = slot.data.b;
slot.a = slot.data.a;
} }
return; return;
} }
@ -98,21 +95,15 @@ public class ColorTimeline extends CurveTimeline {
a += (frames[frame + A] - a) * percent; a += (frames[frame + A] - a) * percent;
} }
if (alpha == 1) { if (alpha == 1) {
slot.r = r; slot.color.setFrom(r, g, b, a);
slot.g = g;
slot.b = b;
slot.a = a;
} else { } else {
if (setupPose) { if (setupPose) {
slot.r = slot.data.r; slot.color.setFromColor(slot.data.color);
slot.g = slot.data.g;
slot.b = slot.data.b;
slot.a = slot.data.a;
} }
slot.r += (r - slot.r) * alpha; slot.color.r += (r - slot.color.r) * alpha;
slot.g += (g - slot.g) * alpha; slot.color.g += (g - slot.color.g) * alpha;
slot.b += (b - slot.b) * alpha; slot.color.b += (b - slot.color.b) * alpha;
slot.a += (a - slot.a) * 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 pathConstraintPosition:TimelineType = new TimelineType(11);
public static const pathConstraintSpacing:TimelineType = new TimelineType(12); public static const pathConstraintSpacing:TimelineType = new TimelineType(12);
public static const pathConstraintMix:TimelineType = new TimelineType(13); 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 { public function newPathAttachment(skin:Skin, name:String) : PathAttachment {
return new PathAttachment(name); return new PathAttachment(name);
} }
public function newPointAttachment(skin:Skin, name:String) : PointAttachment {
return new PointAttachment(name);
}
static public function nextPOT (value:int) : int { static public function nextPOT (value:int) : int {
value--; value--;

View File

@ -43,6 +43,9 @@ public interface AttachmentLoader {
/** @return May be null to not load an attachment */ /** @return May be null to not load an attachment */
function newPathAttachment(skin:Skin, name:String): PathAttachment; 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 mesh:AttachmentType = new AttachmentType(3, "mesh");
public static const linkedmesh:AttachmentType = new AttachmentType(3, "linkedmesh"); public static const linkedmesh:AttachmentType = new AttachmentType(3, "linkedmesh");
public static const path:AttachmentType = new AttachmentType(4, "path"); public static const path:AttachmentType = new AttachmentType(4, "path");
public static const point:AttachmentType = new AttachmentType(5, "point");
public var ordinal:int; public var ordinal:int;
public var name:String; public var name:String;

View File

@ -29,16 +29,13 @@
*****************************************************************************/ *****************************************************************************/
package spine.attachments { package spine.attachments {
import spine.Color;
public dynamic class MeshAttachment extends VertexAttachment { public dynamic class MeshAttachment extends VertexAttachment {
public var worldVertices:Vector.<Number>;
public var uvs:Vector.<Number>; public var uvs:Vector.<Number>;
public var regionUVs:Vector.<Number>; public var regionUVs:Vector.<Number>;
public var triangles:Vector.<uint>; public var triangles:Vector.<uint>;
public var r:Number = 1; public var color:Color = new Color(1, 1, 1, 1);
public var g:Number = 1;
public var b:Number = 1;
public var a:Number = 1;
public var hullLength:int; public var hullLength:int;
private var _parentMesh:MeshAttachment; private var _parentMesh:MeshAttachment;
public var inheritDeform:Boolean; 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 { package spine.attachments {
import spine.Color;
import spine.Bone; import spine.Bone;
public dynamic class RegionAttachment extends Attachment { public dynamic class RegionAttachment extends Attachment {
@ -48,10 +49,7 @@ public dynamic class RegionAttachment extends Attachment {
public var rotation:Number; public var rotation:Number;
public var width:Number; public var width:Number;
public var height:Number; public var height:Number;
public var r:Number = 1; public var color:Color = new Color(1, 1, 1, 1);
public var g:Number = 1;
public var b:Number = 1;
public var a:Number = 1;
public var path:String; public var path:String;
public var rendererObject:Object; public var rendererObject:Object;
@ -71,28 +69,6 @@ public dynamic class RegionAttachment extends Attachment {
uvs.length = 8; 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 { public function updateOffset () : void {
var regionScaleX:Number = width / regionOriginalWidth * scaleX; var regionScaleX:Number = width / regionOriginalWidth * scaleX;
var regionScaleY:Number = height / regionOriginalHeight * scaleY; var regionScaleY:Number = height / regionOriginalHeight * scaleY;
@ -120,30 +96,58 @@ public dynamic class RegionAttachment extends Attachment {
offset[X4] = localX2Cos - localYSin; offset[X4] = localX2Cos - localYSin;
offset[Y4] = localYCos + localX2Sin; 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 { public function computeWorldVertices (bone:Bone, worldVertices:Vector.<Number>, offset:int, stride:int) : void {
x += bone.worldX; var vertexOffset:Vector.<Number> = this.offset;
y += bone.worldY; var x:Number = bone.worldX, y:Number = bone.worldY;
var m00:Number = bone.a; var a:Number = bone.a, b:Number = bone.b, c:Number = bone.c, d:Number = bone.d;
var m01:Number = bone.b; var offsetX:Number = 0, offsetY:Number = 0;
var m10:Number = bone.c;
var m11:Number = bone.d; offsetX = vertexOffset[X1];
var x1:Number = offset[X1]; offsetY = vertexOffset[Y1];
var y1:Number = offset[Y1]; worldVertices[offset] = offsetX * a + offsetY * b + x; // br
var x2:Number = offset[X2]; worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
var y2:Number = offset[Y2]; offset += stride;
var x3:Number = offset[X3];
var y3:Number = offset[Y3]; offsetX = vertexOffset[X2];
var x4:Number = offset[X4]; offsetY = vertexOffset[Y2];
var y4:Number = offset[Y4]; worldVertices[offset] = offsetX * a + offsetY * b + x; // bl
worldVertices[X1] = x1 * m00 + y1 * m01 + x; worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
worldVertices[Y1] = x1 * m10 + y1 * m11 + y; offset += stride;
worldVertices[X2] = x2 * m00 + y2 * m01 + x;
worldVertices[Y2] = x2 * m10 + y2 * m11 + y; offsetX = vertexOffset[X3];
worldVertices[X3] = x3 * m00 + y3 * m01 + x; offsetY = vertexOffset[Y3];
worldVertices[Y3] = x3 * m10 + y3 * m11 + y; worldVertices[offset] = offsetX * a + offsetY * b + x; // ul
worldVertices[X4] = x4 * m00 + y4 * m01 + x; worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
worldVertices[Y4] = x4 * m10 + y4 * m11 + 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); super(name);
} }
public function computeWorldVertices (slot:Slot, worldVertices:Vector.<Number>): void {
computeWorldVertices2(slot, 0, worldVerticesLength, worldVertices, 0);
}
/** Transforms local vertices to world coordinates. /** 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 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 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 worldVertices The output world vertices. Must have a length >= offset + count.
* @param offset The worldVertices index to begin writing values. */ * @param offset The worldVertices index to begin writing values. */
public function computeWorldVertices2 (slot:Slot, start:int, count:int, worldVertices:Vector.<Number>, offset:int): void { public function computeWorldVertices (slot:Slot, start:int, count:int, worldVertices:Vector.<Number>, offset:int, stride:int): void {
count += offset; count = offset + (count >> 1) * stride;
var skeleton:Skeleton = slot.skeleton; var skeleton:Skeleton = slot.skeleton;
var deformArray:Vector.<Number> = slot.attachmentVertices; var deformArray:Vector.<Number> = slot.attachmentVertices;
var vertices:Vector.<Number> = this.vertices; var vertices:Vector.<Number> = this.vertices;
@ -70,7 +66,7 @@ public dynamic class VertexAttachment extends Attachment {
var x:Number = bone.worldX; var x:Number = bone.worldX;
var y:Number = bone.worldY; var y:Number = bone.worldY;
var a:Number = bone.a, bb:Number = bone.b, c:Number = bone.c, d:Number = bone.d; 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]; vx = vertices[v], vy = vertices[v + 1];
worldVertices[w] = vx * a + vy * bb + x; worldVertices[w] = vx * a + vy * bb + x;
worldVertices[w + 1] = vx * c + vy * d + y; worldVertices[w + 1] = vx * c + vy * d + y;
@ -85,7 +81,7 @@ public dynamic class VertexAttachment extends Attachment {
} }
var skeletonBones:Vector.<Bone> = skeleton.bones; var skeletonBones:Vector.<Bone> = skeleton.bones;
if (deformArray.length == 0) { 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; wx = 0, wy = 0;
n = bones[v++]; n = bones[v++];
n += v; n += v;
@ -100,7 +96,7 @@ public dynamic class VertexAttachment extends Attachment {
} }
} else { } else {
deform = deformArray; 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; wx = 0; wy = 0;
n = bones[v++]; n = bones[v++];
n += v; n += v;

View File

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

View File

@ -3,7 +3,7 @@ project(spine_unit_test)
set(CMAKE_INSTALL_PREFIX "./") set(CMAKE_INSTALL_PREFIX "./")
set(CMAKE_VERBOSE_MAKEFILE ON) 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 # set includes
@ -55,4 +55,4 @@ add_custom_command(TARGET spine_unit_test PRE_BUILD
add_custom_command(TARGET spine_unit_test PRE_BUILD add_custom_command(TARGET spine_unit_test PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory 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 <ctime>
#include "KString.h" #include "KString.h"
#include <stdio.h>
#include "spine/extension.h" #include "spine/extension.h"
#include "spine/spine.h" #include "spine/spine.h"
@ -63,7 +64,7 @@ int main(int argc, char* argv[])
extern "C" { // probably unnecessary extern "C" { // probably unnecessary
void _spAtlasPage_createTexture(spAtlasPage* self, const char* path) { void _spAtlasPage_createTexture(spAtlasPage* self, const char* path) {
self->rendererObject = nullptr; self->rendererObject = 0;
self->width = 2048; self->width = 2048;
self->height = 2048; self->height = 2048;
} }
@ -74,4 +75,4 @@ extern "C" { // probably unnecessary
char* _spUtil_readFile(const char* path, int* length) { char* _spUtil_readFile(const char* path, int* length) {
return _readFile(path, length); return _readFile(path, length);
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -90,7 +90,8 @@ typedef enum {
SP_TIMELINE_TRANSFORMCONSTRAINT, SP_TIMELINE_TRANSFORMCONSTRAINT,
SP_TIMELINE_PATHCONSTRAINTPOSITION, SP_TIMELINE_PATHCONSTRAINTPOSITION,
SP_TIMELINE_PATHCONSTRAINTSPACING, SP_TIMELINE_PATHCONSTRAINTSPACING,
SP_TIMELINE_PATHCONSTRAINTMIX SP_TIMELINE_PATHCONSTRAINTMIX,
SP_TIMELINE_TWOCOLOR
} spTimelineType; } spTimelineType;
struct spTimeline { 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 { typedef struct spAttachmentTimeline {
spTimeline super; spTimeline super;
int const framesCount; int const framesCount;

View File

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

View File

@ -90,13 +90,13 @@ float spBone_getWorldRotationY (spBone* self);
float spBone_getWorldScaleX (spBone* self); float spBone_getWorldScaleX (spBone* self);
float spBone_getWorldScaleY (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_updateAppliedTransform (spBone* self);
void spBone_worldToLocal (spBone* self, float worldX, float worldY, float* localX, float* localY); 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); 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 #ifdef SPINE_SHORT_NAMES
typedef spBone Bone; typedef spBone Bone;
@ -111,12 +111,12 @@ typedef spBone Bone;
#define Bone_getWorldRotationY(...) spBone_getWorldRotationY(__VA_ARGS__) #define Bone_getWorldRotationY(...) spBone_getWorldRotationY(__VA_ARGS__)
#define Bone_getWorldScaleX(...) spBone_getWorldScaleX(__VA_ARGS__) #define Bone_getWorldScaleX(...) spBone_getWorldScaleX(__VA_ARGS__)
#define Bone_getWorldScaleY(...) spBone_getWorldScaleY(__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_updateAppliedTransform(...) spBone_updateAppliedTransform(__VA_ARGS__)
#define Bone_worldToLocal(...) spBone_worldToLocal(__VA_ARGS__) #define Bone_worldToLocal(...) spBone_worldToLocal(__VA_ARGS__)
#define Bone_localToWorld(...) spBone_localToWorld(__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 #endif
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -45,12 +45,10 @@ typedef struct spBoundingBoxAttachment {
} spBoundingBoxAttachment; } spBoundingBoxAttachment;
spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name); spBoundingBoxAttachment* spBoundingBoxAttachment_create (const char* name);
void spBoundingBoxAttachment_computeWorldVertices (spBoundingBoxAttachment* self, spSlot* slot, float* worldVertices);
#ifdef SPINE_SHORT_NAMES #ifdef SPINE_SHORT_NAMES
typedef spBoundingBoxAttachment BoundingBoxAttachment; typedef spBoundingBoxAttachment BoundingBoxAttachment;
#define BoundingBoxAttachment_create(...) spBoundingBoxAttachment_create(__VA_ARGS__) #define BoundingBoxAttachment_create(...) spBoundingBoxAttachment_create(__VA_ARGS__)
#define BoundingBoxAttachment_computeWorldVertices(...) spBoundingBoxAttachment_computeWorldVertices(__VA_ARGS__)
#endif #endif
#ifdef __cplusplus #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; int trianglesCount;
unsigned short* triangles; unsigned short* triangles;
float r, g, b, a; spColor color;
int hullLength; int hullLength;
@ -74,14 +74,12 @@ struct spMeshAttachment {
spMeshAttachment* spMeshAttachment_create (const char* name); spMeshAttachment* spMeshAttachment_create (const char* name);
void spMeshAttachment_updateUVs (spMeshAttachment* self); void spMeshAttachment_updateUVs (spMeshAttachment* self);
void spMeshAttachment_computeWorldVertices (spMeshAttachment* self, spSlot* slot, float* worldVertices);
void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* parentMesh); void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* parentMesh);
#ifdef SPINE_SHORT_NAMES #ifdef SPINE_SHORT_NAMES
typedef spMeshAttachment MeshAttachment; typedef spMeshAttachment MeshAttachment;
#define MeshAttachment_create(...) spMeshAttachment_create(__VA_ARGS__) #define MeshAttachment_create(...) spMeshAttachment_create(__VA_ARGS__)
#define MeshAttachment_updateUVs(...) spMeshAttachment_updateUVs(__VA_ARGS__) #define MeshAttachment_updateUVs(...) spMeshAttachment_updateUVs(__VA_ARGS__)
#define MeshAttachment_computeWorldVertices(...) spMeshAttachment_computeWorldVertices(__VA_ARGS__)
#define MeshAttachment_setParentMesh(...) spMeshAttachment_setParentMesh(__VA_ARGS__) #define MeshAttachment_setParentMesh(...) spMeshAttachment_setParentMesh(__VA_ARGS__)
#endif #endif

View File

@ -48,8 +48,6 @@ typedef struct spPathAttachment {
} spPathAttachment; } spPathAttachment;
spPathAttachment* spPathAttachment_create (const char* name); 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 #ifdef SPINE_SHORT_NAMES
typedef spPathAttachment PathAttachment; 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; spAttachment super;
const char* path; const char* path;
float x, y, scaleX, scaleY, rotation, width, height; float x, y, scaleX, scaleY, rotation, width, height;
float r, g, b, a; spColor color;
void* rendererObject; void* rendererObject;
int regionOffsetX, regionOffsetY; /* Pixels stripped from the bottom left, unrotated. */ int regionOffsetX, regionOffsetY; /* Pixels stripped from the bottom left, unrotated. */
@ -61,7 +61,7 @@ typedef struct spRegionAttachment {
spRegionAttachment* spRegionAttachment_create (const char* name); spRegionAttachment* spRegionAttachment_create (const char* name);
void spRegionAttachment_setUVs (spRegionAttachment* self, float u, float v, float u2, float v2, int/*bool*/rotate); void spRegionAttachment_setUVs (spRegionAttachment* self, float u, float v, float u2, float v2, int/*bool*/rotate);
void spRegionAttachment_updateOffset (spRegionAttachment* self); 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 #ifdef SPINE_SHORT_NAMES
typedef spVertexIndex VertexIndex; typedef spVertexIndex VertexIndex;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -44,6 +44,7 @@
#include <spine/VertexAttachment.h> #include <spine/VertexAttachment.h>
#include <spine/MeshAttachment.h> #include <spine/MeshAttachment.h>
#include <spine/BoundingBoxAttachment.h> #include <spine/BoundingBoxAttachment.h>
#include <spine/PointAttachment.h>
#include <spine/Skeleton.h> #include <spine/Skeleton.h>
#include <spine/SkeletonBounds.h> #include <spine/SkeletonBounds.h>
#include <spine/SkeletonData.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 (time < self->frames[0]) {
if (setupPose) { if (setupPose) {
slot->r = slot->data->r; spColor_setFromColor(&slot->color, &slot->data->color);
slot->g = slot->data->g;
slot->b = slot->data->b;
slot->a = slot->data->a;
} }
return; return;
} }
@ -561,21 +558,12 @@ void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f
a += (self->frames[frame + COLOR_A] - a) * percent; a += (self->frames[frame + COLOR_A] - a) * percent;
} }
if (alpha == 1) { if (alpha == 1) {
slot->r = r; spColor_setFromFloats(&slot->color, r, g, b, a);
slot->g = g;
slot->b = b;
slot->a = a;
} else { } else {
if (setupPose) { if (setupPose) {
slot->r = slot->data->r; spColor_setFromColor(&slot->color, &slot->data->color);
slot->g = slot->data->g;
slot->b = slot->data->b;
slot->a = slot->data->a;
} }
slot->r += (r - slot->r) * 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);
slot->g += (g - slot->g) * alpha;
slot->b += (b - slot->b) * alpha;
slot->a += (a - slot->a) * alpha;
} }
UNUSED(lastTime); 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, void _spAttachmentTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time,
spEvent** firedEvents, int* eventsCount, float alpha, int setupPose, int mixingOut) { spEvent** firedEvents, int* eventsCount, float alpha, int setupPose, int mixingOut) {
const char* attachmentName; const char* attachmentName;

View File

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

View File

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

View File

@ -218,29 +218,6 @@ float spBone_getWorldScaleY (spBone* self) {
return SQRT(self->b * self->b + self->d * self->d); 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 /** 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). * the applied transform after the world transform has been modified directly (eg, by a constraint).
* <p> * <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; *worldX = x * self->a + y * self->b + self->worldX;
*worldY = x * self->c + y * self->d + self->worldY; *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); _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_BOUNDING_BOX, _spBoundingBoxAttachment_dispose);
return self; 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* spMeshAttachment_create (const char* name) {
spMeshAttachment* self = NEW(spMeshAttachment); spMeshAttachment* self = NEW(spMeshAttachment);
self->r = 1; spColor_setFromFloats(&self->color, 1, 1, 1, 1);
self->g = 1;
self->b = 1;
self->a = 1;
_spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_MESH, _spMeshAttachment_dispose); _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_MESH, _spMeshAttachment_dispose);
return self; 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) { void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* parentMesh) {
CONST_CAST(spMeshAttachment*, self->parentMesh) = parentMesh; CONST_CAST(spMeshAttachment*, self->parentMesh) = parentMesh;
if (parentMesh) { if (parentMesh) {
self->super.worldVerticesLength = parentMesh->super.worldVerticesLength;
self->super.bones = parentMesh->super.bones; self->super.bones = parentMesh->super.bones;
self->super.bonesCount = parentMesh->super.bonesCount; self->super.bonesCount = parentMesh->super.bonesCount;
@ -95,6 +87,8 @@ void spMeshAttachment_setParentMesh (spMeshAttachment* self, spMeshAttachment* p
self->trianglesCount = parentMesh->trianglesCount; self->trianglesCount = parentMesh->trianglesCount;
self->hullLength = parentMesh->hullLength; self->hullLength = parentMesh->hullLength;
self->super.worldVerticesLength = parentMesh->super.worldVerticesLength;
self->edges = parentMesh->edges; self->edges = parentMesh->edges;
self->edgesCount = parentMesh->edgesCount; 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); _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_PATH, _spPathAttachment_dispose);
return self; 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) { void spPathConstraint_apply (spPathConstraint* self) {
int i, p, n; int i, p, n;
float length, x, y, dx, dy, s; float length, setupLength, x, y, dx, dy, s;
float* spaces, *lengths, *positions; float* spaces, *lengths, *positions;
float spacing; float spacing;
float boneX, boneY, offsetRotation; float boneX, boneY, offsetRotation;
@ -114,10 +114,10 @@ void spPathConstraint_apply (spPathConstraint* self) {
} }
for (i = 0, n = spacesCount - 1; i < n;) { for (i = 0, n = spacesCount - 1; i < n;) {
spBone* bone = bones[i]; 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); length = SQRT(x * x + y * y);
if (scale) lengths[i] = length; if (scale) lengths[i] = length;
spaces[++i] = lengthSpacing ? MAX(0, length + spacing) : spacing; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
} }
} else { } else {
for (i = 1; i < spacesCount; i++) { for (i = 1; i < spacesCount; i++) {
@ -256,14 +256,14 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
} else if (p < 0) { } else if (p < 0) {
if (prevCurve != PATHCONSTRAINT_BEFORE) { if (prevCurve != PATHCONSTRAINT_BEFORE) {
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); _addBeforePosition(p, world, 0, out, o);
continue; continue;
} else if (p > pathLength) { } else if (p > pathLength) {
if (prevCurve != PATHCONSTRAINT_AFTER) { if (prevCurve != PATHCONSTRAINT_AFTER) {
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); _addAfterPosition(p - pathLength, world, 0, out, o);
continue; continue;
@ -284,10 +284,10 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
if (curve != prevCurve) { if (curve != prevCurve) {
prevCurve = curve; prevCurve = curve;
if (closed && curve == curveCount) { if (closed && curve == curveCount) {
spPathAttachment_computeWorldVertices1(path, target, verticesLength - 4, 4, world, 0); spVertexAttachment_computeWorldVertices(SUPER(path), target, verticesLength - 4, 4, world, 0, 2);
spPathAttachment_computeWorldVertices1(path, target, 0, 4, world, 4); spVertexAttachment_computeWorldVertices(SUPER(path), target, 0, 4, world, 4, 2);
} else } 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, _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)); tangents || (i > 0 && space == 0));
@ -304,8 +304,8 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
self->worldCount = verticesLength; self->worldCount = verticesLength;
} }
world = self->world; world = self->world;
spPathAttachment_computeWorldVertices1(path, target, 2, verticesLength - 4, world, 0); spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, verticesLength - 4, world, 0, 2);
spPathAttachment_computeWorldVertices1(path, target, 0, 2, world, verticesLength - 4); spVertexAttachment_computeWorldVertices(SUPER(path), target, 0, 2, world, verticesLength - 4, 2);
world[verticesLength - 2] = world[0]; world[verticesLength - 2] = world[0];
world[verticesLength - 1] = world[1]; world[verticesLength - 1] = world[1];
} else { } else {
@ -317,7 +317,7 @@ float* spPathConstraint_computeWorldPositions(spPathConstraint* self, spPathAtta
self->worldCount = verticesLength; self->worldCount = verticesLength;
} }
world = self->world; world = self->world;
spPathAttachment_computeWorldVertices1(path, target, 2, verticesLength, world, 0); spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, verticesLength, world, 0, 2);
} }
/* Curve lengths. */ /* 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); spRegionAttachment* self = NEW(spRegionAttachment);
self->scaleX = 1; self->scaleX = 1;
self->scaleY = 1; self->scaleY = 1;
self->r = 1; spColor_setFromFloats(&self->color, 1, 1, 1, 1);
self->g = 1;
self->b = 1;
self->a = 1;
_spAttachment_init(SUPER(self), name, SP_ATTACHMENT_REGION, _spRegionAttachment_dispose); _spAttachment_init(SUPER(self), name, SP_ATTACHMENT_REGION, _spRegionAttachment_dispose);
return self; return self;
} }
@ -99,15 +96,22 @@ void spRegionAttachment_updateOffset (spRegionAttachment* self) {
self->offset[SP_VERTEX_Y4] = localYCos + localX2Sin; self->offset[SP_VERTEX_Y4] = localYCos + localX2Sin;
} }
void spRegionAttachment_computeWorldVertices (spRegionAttachment* self, spBone* bone, float* vertices) { void spRegionAttachment_computeWorldVertices (spRegionAttachment* self, spBone* bone, float* vertices, int offset, int stride) {
const float* offset = self->offset; const float* offsets = self->offset;
float x = bone->worldX, y = bone->worldY; 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[offset] = offsets[SP_VERTEX_X1] * bone->a + offsets[SP_VERTEX_Y1] * bone->b + x; /* br */
vertices[SP_VERTEX_X2] = offset[SP_VERTEX_X2] * bone->a + offset[SP_VERTEX_Y2] * bone->b + x; vertices[offset + 1] = offsets[SP_VERTEX_X1] * bone->c + offsets[SP_VERTEX_Y1] * bone->d + y;
vertices[SP_VERTEX_Y2] = offset[SP_VERTEX_X2] * bone->c + offset[SP_VERTEX_Y2] * bone->d + y; offset += stride;
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[offset] = offsets[SP_VERTEX_X2] * bone->a + offsets[SP_VERTEX_Y2] * bone->b + x; /* bl */
vertices[SP_VERTEX_X4] = offset[SP_VERTEX_X4] * bone->a + offset[SP_VERTEX_Y4] * bone->b + x; vertices[offset + 1] = offsets[SP_VERTEX_X2] * bone->c + offsets[SP_VERTEX_Y2] * bone->d + y;
vertices[SP_VERTEX_Y4] = offset[SP_VERTEX_X4] * bone->c + offset[SP_VERTEX_Y4] * 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++) for (i = 0; i < self->data->pathConstraintsCount; i++)
self->pathConstraints[i] = spPathConstraint_create(self->data->pathConstraints[i], self); 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); spSkeleton_updateCache(self);
@ -161,7 +161,7 @@ static void _addToUpdateCache(_spSkeleton* const internal, _spUpdateType type, v
_spUpdate* update; _spUpdate* update;
if (internal->updateCacheCount == internal->updateCacheCapacity) { if (internal->updateCacheCount == internal->updateCacheCapacity) {
internal->updateCacheCapacity *= 2; 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 = internal->updateCache + internal->updateCacheCount;
update->type = type; update->type = type;
@ -172,7 +172,7 @@ static void _addToUpdateCache(_spSkeleton* const internal, _spUpdateType type, v
static void _addToUpdateCacheReset(_spSkeleton* const internal, spBone* bone) { static void _addToUpdateCacheReset(_spSkeleton* const internal, spBone* bone) {
if (internal->updateCacheResetCount == internal->updateCacheResetCapacity) { if (internal->updateCacheResetCount == internal->updateCacheResetCapacity) {
internal->updateCacheResetCapacity *= 2; 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->updateCacheReset[internal->updateCacheResetCount] = bone;
++internal->updateCacheResetCount; ++internal->updateCacheResetCount;
@ -258,48 +258,66 @@ static void _sortPathConstraint(_spSkeleton* const internal, spPathConstraint* c
spSlot* slot = constraint->target; spSlot* slot = constraint->target;
int slotIndex = slot->data->index; int slotIndex = slot->data->index;
spBone* slotBone = slot->bone; spBone* slotBone = slot->bone;
int ii, nn, boneCount; int i, n, boneCount;
spAttachment* attachment; spAttachment* attachment;
spBone** constrained; spBone** constrained;
spSkeleton* skeleton = SUPER_CAST(spSkeleton, internal); spSkeleton* skeleton = SUPER_CAST(spSkeleton, internal);
if (skeleton->skin) _sortPathConstraintAttachment(internal, skeleton->skin, slotIndex, slotBone); if (skeleton->skin) _sortPathConstraintAttachment(internal, skeleton->skin, slotIndex, slotBone);
if (skeleton->data->defaultSkin && skeleton->data->defaultSkin != skeleton->skin) if (skeleton->data->defaultSkin && skeleton->data->defaultSkin != skeleton->skin)
_sortPathConstraintAttachment(internal, skeleton->data->defaultSkin, slotIndex, slotBone); _sortPathConstraintAttachment(internal, skeleton->data->defaultSkin, slotIndex, slotBone);
for (ii = 0, nn = skeleton->data->skinsCount; ii < nn; ii++) for (i = 0, n = skeleton->data->skinsCount; i < n; i++)
_sortPathConstraintAttachment(internal, skeleton->data->skins[ii], slotIndex, slotBone); _sortPathConstraintAttachment(internal, skeleton->data->skins[i], slotIndex, slotBone);
attachment = slot->attachment; attachment = slot->attachment;
if (attachment->type == SP_ATTACHMENT_PATH) _sortPathConstraintAttachmentBones(internal, attachment, slotBone); if (attachment->type == SP_ATTACHMENT_PATH) _sortPathConstraintAttachmentBones(internal, attachment, slotBone);
constrained = constraint->bones; constrained = constraint->bones;
boneCount = constraint->bonesCount; boneCount = constraint->bonesCount;
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
_sortBone(internal, constrained[ii]); _sortBone(internal, constrained[i]);
_addToUpdateCache(internal, SP_UPDATE_PATH_CONSTRAINT, constraint); _addToUpdateCache(internal, SP_UPDATE_PATH_CONSTRAINT, constraint);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
_sortReset(constrained[ii]->children, constrained[ii]->childrenCount); _sortReset(constrained[i]->children, constrained[i]->childrenCount);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
constrained[ii]->sorted = 1; constrained[i]->sorted = 1;
} }
static void _sortTransformConstraint(_spSkeleton* const internal, spTransformConstraint* constraint) { static void _sortTransformConstraint(_spSkeleton* const internal, spTransformConstraint* constraint) {
int ii, boneCount; int i, boneCount;
spBone** constrained; spBone** constrained;
spBone* child;
int /*boolean*/ contains = 0;
_sortBone(internal, constraint->target); _sortBone(internal, constraint->target);
constrained = constraint->bones; constrained = constraint->bones;
boneCount = constraint->bonesCount; boneCount = constraint->bonesCount;
for (ii = 0; ii < boneCount; ii++) if (constraint->data->local) {
_sortBone(internal, constrained[ii]); 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); _addToUpdateCache(internal, SP_UPDATE_TRANSFORM_CONSTRAINT, constraint);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
_sortReset(constrained[ii]->children, constrained[ii]->childrenCount); _sortReset(constrained[i]->children, constrained[i]->childrenCount);
for (ii = 0; ii < boneCount; ii++) for (i = 0; i < boneCount; i++)
constrained[ii]->sorted = 1; constrained[i]->sorted = 1;
} }
void spSkeleton_updateCache (spSkeleton* self) { void spSkeleton_updateCache (spSkeleton* self) {

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