diff --git a/examples/stretchyman/export/stretchyman-pro.json b/examples/stretchyman/export/stretchyman-pro.json index ff70ea461..9bbcc0aca 100644 --- a/examples/stretchyman/export/stretchyman-pro.json +++ b/examples/stretchyman/export/stretchyman-pro.json @@ -1 +1,1585 @@ -{"skeleton":{"hash":"9WvcFuoaTkaI6rWxoYDw3hFQ8LY","spine":"3.7.23-beta","width":264.5,"height":573.31,"images":"./images/","audio":""},"bones":[{"name":"root"},{"name":"hip","parent":"root","x":28.61,"y":289.9,"color":"ffbd00ff"},{"name":"spine1","parent":"hip","length":34.66,"rotation":86.69,"x":-4.48,"y":12.66,"color":"ffbd00ff"},{"name":"spine2","parent":"spine1","length":41.42,"rotation":16.48,"x":34.66,"color":"ffbd00ff"},{"name":"spine3","parent":"spine2","length":34.45,"rotation":16.17,"x":41.42,"y":0.01,"color":"ffbd00ff"},{"name":"spine4","parent":"spine3","length":37.53,"rotation":-13.63,"x":34.45,"y":0.01,"color":"ffbd00ff"},{"name":"back-arm1","parent":"spine4","length":32.43,"rotation":-154.36,"x":16,"y":-4.58,"transform":"noScale","color":"ff0000ff"},{"name":"back-arm2","parent":"back-arm1","length":34.16,"rotation":3.11,"x":31.88,"y":0.02,"color":"ff0000ff"},{"name":"back-arm3","parent":"back-arm2","length":31.27,"rotation":9.59,"x":34.16,"color":"ff0000ff"},{"name":"back-arm4","parent":"back-arm3","length":33.3,"rotation":14.61,"x":32.04,"y":0.82,"color":"ff0000ff"},{"name":"back-arm5","parent":"back-arm4","length":37.41,"rotation":11.31,"x":33.82,"y":0.02,"color":"ff0000ff"},{"name":"back-arm-ik-target","parent":"root","x":103.52,"y":345.27,"color":"ff3f00ff"},{"name":"back-arm-ik1","parent":"spine4","length":66.57,"rotation":-152.7,"x":16.34,"y":-4.46,"color":"ff0000ff"},{"name":"back-arm-ik2","parent":"back-arm-ik1","length":66.01,"rotation":19.36,"x":66.57,"color":"ff0000ff"},{"name":"back-foot1","parent":"hip","length":33.24,"rotation":-6.56,"x":-34.01,"y":-279.68,"transform":"onlyTranslation","color":"ff0000ff"},{"name":"back-foot2","parent":"back-foot1","length":32.29,"rotation":4.34,"x":33.24,"transform":"noScale","color":"ff0000ff"},{"name":"back-foot3","parent":"back-foot2","length":15.87,"rotation":10.06,"x":32.29,"transform":"noScale","color":"ff0000ff"},{"name":"back-leg1","parent":"hip","length":41,"rotation":-83.66,"x":10.41,"y":1.04,"color":"ff0000ff"},{"name":"back-leg2","parent":"back-leg1","length":41,"rotation":-4.07,"x":34.57,"color":"ff0000ff"},{"name":"back-leg3","parent":"back-leg1","length":41,"rotation":-5.24,"x":81.79,"y":-2.29,"color":"ff0000ff"},{"name":"back-leg4","parent":"back-leg1","length":41,"rotation":-16.6,"x":121.21,"y":-11.27,"color":"ff0000ff"},{"name":"back-leg5","parent":"back-leg1","length":41,"rotation":-32.36,"x":160.16,"y":-24.86,"color":"ff0000ff"},{"name":"back-leg6","parent":"back-leg1","length":41,"rotation":-30.76,"x":197.04,"y":-39.98,"color":"ff0000ff"},{"name":"back-leg7","parent":"back-leg1","length":41,"rotation":-30.63,"x":233.19,"y":-57.32,"color":"ff0000ff"},{"name":"back-leg8","parent":"back-leg1","length":41,"rotation":-33.79,"x":267.29,"y":-77.39,"color":"ff0000ff"},{"name":"back-leg-ik-target","parent":"root","x":46.15,"y":8.68,"color":"ff3f00ff"},{"name":"back-leg-ik1","parent":"hip","length":140.17,"rotation":-88.1,"x":9.63,"y":-0.38,"color":"ff0000ff"},{"name":"back-leg-ik2","parent":"back-leg-ik1","length":148.96,"rotation":-21.32,"x":140.17,"y":-0.01,"color":"ff0000ff"},{"name":"belly","parent":"spine1","x":35.94,"y":-37.69,"color":"ffbd00ff"},{"name":"butt","parent":"hip","x":-32.67,"y":-1.88,"color":"ffbd00ff"},{"name":"front-arm1","parent":"spine4","length":38.33,"rotation":118.58,"x":27.13,"y":4.9,"transform":"noScale","color":"4eff00ff"},{"name":"front-arm2","parent":"front-arm1","length":35.67,"rotation":-0.44,"x":38.33,"y":0.01,"color":"4eff00ff"},{"name":"front-arm3","parent":"front-arm2","length":32.65,"rotation":14.45,"x":35.67,"y":-0.02,"color":"4eff00ff"},{"name":"front-arm4","parent":"front-arm3","length":29.18,"rotation":13.89,"x":32.65,"color":"4eff00ff"},{"name":"front-arm5","parent":"front-arm4","length":46.32,"rotation":16.09,"x":29.18,"transform":"noScale","color":"4eff00ff"},{"name":"front-arm-ik","parent":"root","x":-92.44,"y":331.78,"color":"ff3f00ff"},{"name":"front-arm-ik1","parent":"spine4","length":69.56,"rotation":117.86,"x":27.36,"y":4.22,"color":"50ff00ff"},{"name":"front-arm-ik2","parent":"front-arm-ik1","length":66.72,"rotation":20.13,"x":69.56,"color":"50ff00ff"},{"name":"front-foot1","parent":"hip","length":26.3,"rotation":-10.98,"x":-77.05,"y":-285.04,"transform":"onlyTranslation","color":"50ff00ff"},{"name":"front-foot2","parent":"front-foot1","length":29.12,"rotation":9.61,"x":26.3,"color":"50ff00ff"},{"name":"front-foot3","parent":"front-foot2","length":23.49,"rotation":8.91,"x":29.12,"color":"50ff00ff"},{"name":"front-leg1","parent":"hip","length":37.2,"rotation":-88.97,"x":-23.57,"y":-2,"color":"4fff00ff"},{"name":"front-leg2","parent":"front-leg1","length":37.2,"rotation":3.45,"x":33.75,"y":0.01,"color":"4fff00ff"},{"name":"front-leg3","parent":"front-leg1","length":37.2,"rotation":-6.12,"x":74.4,"y":-1.08,"color":"4fff00ff"},{"name":"front-leg4","parent":"front-leg1","length":37.2,"rotation":-10.02,"x":111.4,"y":-5.28,"color":"4fff00ff"},{"name":"front-leg5","parent":"front-leg1","length":37.2,"rotation":-28.4,"x":147.76,"y":-14.99,"color":"4fff00ff"},{"name":"front-leg6","parent":"front-leg1","length":37.2,"rotation":-24.33,"x":182.41,"y":-27.57,"color":"4fff00ff"},{"name":"front-leg7","parent":"front-leg1","length":37.2,"rotation":-23,"x":216.44,"y":-42.55,"color":"4fff00ff"},{"name":"front-leg8","parent":"front-leg1","length":37.2,"rotation":-31.81,"x":248.61,"y":-61.03,"color":"4fff00ff"},{"name":"front-leg-ik-target","parent":"root","x":-37.74,"y":5.03,"color":"ff3f00ff"},{"name":"front-leg-ik1","parent":"hip","length":140.67,"rotation":-89.23,"x":-23.99,"y":1.89,"color":"50ff00ff"},{"name":"front-leg-ik2","parent":"front-leg-ik1","length":155.95,"rotation":-21.5,"x":140.67,"y":0.03,"color":"50ff00ff"},{"name":"neck1","parent":"spine4","length":13.45,"rotation":-30.66,"x":38.97,"y":-0.83,"color":"ffbd00ff"},{"name":"neck2","parent":"neck1","length":14.13,"rotation":-11.41,"x":13.45,"color":"ffbd00ff"},{"name":"head","parent":"neck2","length":89.06,"rotation":6.98,"x":15.82,"y":0.22,"transform":"noScale","color":"ffbd00ff"}],"slots":[{"name":"back-arm","bone":"root","attachment":"back-arm"},{"name":"back-leg","bone":"root","attachment":"back-leg"},{"name":"body","bone":"root","attachment":"body"},{"name":"head","bone":"head","attachment":"head"},{"name":"front-arm","bone":"root","attachment":"front-arm"},{"name":"back-leg-path","bone":"hip","attachment":"back-leg-path"},{"name":"front-leg-path","bone":"hip","attachment":"front-leg-path"},{"name":"front-arm-path","bone":"spine4"},{"name":"rear-arm-path","bone":"spine4"}],"ik":[{"name":"back-arm-ik","order":3,"bones":["back-arm-ik1","back-arm-ik2"],"target":"back-arm-ik-target","mix":0},{"name":"back-leg-ik","order":0,"bones":["back-leg-ik1","back-leg-ik2"],"target":"back-leg-ik-target","bendPositive":false},{"name":"front-arm-ik","order":2,"bones":["front-arm-ik1","front-arm-ik2"],"target":"front-arm-ik","mix":0},{"name":"front-leg-ik","order":1,"bones":["front-leg-ik1","front-leg-ik2"],"target":"front-leg-ik-target","bendPositive":false}],"transform":[{"name":"back-foot-position","order":8,"bones":["back-foot1"],"target":"back-leg8","rotation":108.8,"x":41.2,"y":-0.03,"scaleX":5.0E-4,"scaleY":-3.0E-4,"shearY":0.1,"rotateMix":0,"scaleMix":0},{"name":"front-foot-position","order":9,"bones":["front-foot1"],"target":"front-leg8","rotation":101.55,"x":38.92,"y":-0.02,"scaleX":4.0E-4,"scaleY":-3.0E-4,"shearY":0.1,"rotateMix":0,"scaleMix":0}],"path":[{"name":"back-arm-path","order":7,"bones":["back-arm1","back-arm2","back-arm3","back-arm4"],"target":"rear-arm-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.25,"rotateMix":0,"translateMix":0},{"name":"back-leg-path","order":4,"bones":["back-leg1","back-leg2","back-leg3","back-leg4","back-leg5","back-leg6","back-leg7","back-leg8"],"target":"back-leg-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.125},{"name":"front-arm-path","order":6,"bones":["front-arm1","front-arm2","front-arm3","front-arm4"],"target":"front-arm-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.25,"rotateMix":0,"translateMix":0},{"name":"front-leg-path","order":5,"bones":["front-leg1","front-leg2","front-leg3","front-leg4","front-leg5","front-leg6","front-leg7","front-leg8"],"target":"front-leg-path","spacingMode":"percent","rotateMode":"chainScale","spacing":0.125}],"skins":{"default":{"back-arm":{"back-arm":{"type":"mesh","uvs":[0.74522,0.00989,0.64111,0.05762,0.56303,0.1559,0.42509,0.25886,0.28974,0.359,0.22988,0.49565,0.21166,0.60797,0.21166,0.69782,0.16481,0.78674,0.14139,0.84757,0.02427,0.88501,0.0529,0.91871,0.37824,0.98797,0.60468,0.98235,0.6307,0.9056,0.73481,0.87752,0.63591,0.81762,0.55262,0.74181,0.38084,0.69876,0.37824,0.60797,0.39906,0.50876,0.51358,0.38521,0.66194,0.28881,0.85454,0.18398,0.97687,0.07541,0.9144,0.00989],"triangles":[11,9,12,9,8,12,12,8,18,13,12,14,12,18,17,18,8,7,14,12,17,11,10,9,14,16,15,14,17,16,7,19,18,7,6,19,6,5,19,19,5,20,5,4,20,20,4,21,4,3,21,21,3,22,3,2,22,22,2,23,2,1,23,23,1,24,1,0,24,0,25,24],"vertices":[1,6,-7.68,-11.48,1,1,6,4.09,-13.63,1,1,6,23.49,-9.36,1,1,7,13.44,-9.23,1,2,7,35.2,-9.62,0.50649,8,-0.58,-9.66,0.49351,1,8,26.04,-6.39,1,1,9,14.15,-6.11,1,2,9,31.54,-5.57,0.66493,10,-3.33,-5.03,0.33507,1,10,13.08,-11.25,1,1,10,24.41,-14.89,1,1,10,30.15,-24.52,1,1,10,36.93,-23.54,1,1,10,54.08,-2.33,1,1,10,55.73,14.15,1,1,10,41.39,18.48,1,1,10,37.29,26.87,1,1,10,24.66,21.67,1,1,10,9.18,18.1,1,2,9,31.33,6.78,0.47881,10,-1.11,7.12,0.52119,1,9,13.77,6.04,1,2,8,24.98,6.17,0.89218,9,-5.48,6.96,0.10782,2,7,32.6,7.29,0.59842,8,-0.32,7.45,0.40158,1,7,11.08,8.85,1,1,6,17.89,11.88,1,1,6,-4.82,9.46,1,1,6,-13.69,-0.69,1],"hull":26,"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,32,32,34,34,36,36,38,38,40,40,42,42,44,44,46,46,48,48,50,0,50,2,48,4,46,6,44,8,42,10,40,12,38,14,36],"width":72,"height":202}},"back-leg":{"back-leg":{"type":"mesh","uvs":[0.502,0.01179,0.36076,0.06379,0.4057,0.15046,0.44743,0.23916,0.47953,0.32991,0.51163,0.42269,0.52127,0.50629,0.48274,0.58888,0.41212,0.66025,0.3126,0.74182,0.2163,0.81625,0.1232,0.89272,0.00763,0.97429,0.29655,0.98958,0.47407,0.99222,0.64004,0.99468,0.80989,0.9896,0.91291,0.98652,1,0.95797,0.8333,0.94681,0.71067,0.9386,0.57123,0.92031,0.41533,0.89986,0.3447,0.89272,0.36885,0.87178,0.42817,0.82033,0.502,0.74794,0.58226,0.66943,0.6593,0.59092,0.72993,0.50528,0.76524,0.42167,0.78129,0.32481,0.78771,0.23406,0.78771,0.13924,0.72351,0.03728,0.60152,0.00567,0.82117,0.96898,0.67873,0.96396,0.52111,0.9574,0.35936,0.94214,0.19388,0.92922,0.25375,0.88159,0.32792,0.8184],"triangles":[36,20,19,17,19,18,16,37,36,17,16,36,17,36,19,38,22,21,37,21,20,38,21,37,37,20,36,15,38,37,14,38,15,15,37,16,39,23,22,40,23,39,39,22,38,13,40,39,12,40,13,14,39,38,13,39,14,9,8,26,25,42,9,10,9,42,26,25,9,24,42,25,41,10,42,41,42,24,11,10,41,23,41,24,40,11,41,40,41,23,12,11,40,26,8,27,6,5,29,28,6,29,7,6,28,27,7,28,8,7,27,29,5,30,31,5,4,30,5,31,32,4,3,31,4,32,34,1,0,34,0,35,2,1,34,2,34,33,3,2,33,32,3,33],"vertices":[1,17,-19.79,-5.67,1,2,17,-5.62,-22.28,0.83363,18,-41.07,-23.3,0.16637,2,17,22.31,-21.98,0.65187,18,-13.17,-21.89,0.34813,3,17,50.83,-22.11,0.3172,18,15.33,-20.87,0.43086,19,-19.67,-21.09,0.25193,4,17,79.85,-23.29,0.10792,18,44.37,-20.89,0.35417,19,9.3,-19.2,0.3192,20,-25.22,-20.06,0.21872,4,18,74.06,-20.98,0.16486,19,38.93,-17.34,0.32776,20,4.09,-15.38,0.29831,21,-30.1,-17.16,0.20907,3,19,65.54,-17.61,0.17523,20,30.6,-13.11,0.39173,21,-4.12,-11.42,0.43304,3,20,57.03,-15.71,0.19718,21,22.43,-10.53,0.52971,22,-12.97,-9.81,0.27311,3,21,46.05,-13.47,0.40991,22,10.84,-10.17,0.34747,23,-24.93,-10.51,0.24261,3,21,73.39,-18.69,0.19432,22,38.58,-12.41,0.37177,23,2.9,-10.99,0.43391,3,22,64.06,-14.98,0.16664,23,28.49,-11.94,0.56756,24,-7.53,-11.48,0.2658,3,23,54.58,-12.37,0.52114,24,18.56,-10.93,0.36168,14,-3.08,24.95,0.11718,4,23,82.97,-14.36,0.35144,24,47.01,-11.86,0.29521,14,-13.07,-1.67,0.25118,15,-46.3,1.83,0.10216,1,14,16.37,-4.67,1,2,14,34.32,-4.37,0.53487,15,0.74,-4.44,0.46513,3,14,51.1,-4.08,0.14611,15,17.5,-5.42,0.54314,16,-15.51,-2.75,0.31075,2,15,34.67,-4.01,0.40714,16,1.65,-4.36,0.59286,2,15,45.09,-3.16,0.25726,16,12.05,-5.34,0.74274,2,15,53.99,5.81,0.25311,16,22.38,1.94,0.74689,2,15,37.19,9.56,0.4029,16,6.5,8.57,0.5971,3,14,57.07,14.17,0.13352,15,24.84,12.33,0.54644,16,-5.18,13.44,0.32004,4,23,47.09,33.11,0.13131,14,42.64,19.08,0.26349,15,10.82,18.31,0.49746,16,-17.94,21.78,0.10773,4,23,46.46,16.09,0.21159,24,9.37,17.21,0.1068,14,26.51,24.57,0.44951,15,-4.85,25.01,0.23211,3,23,46.8,8.62,0.40111,24,10,9.75,0.24543,14,19.24,26.38,0.35346,3,23,39.71,8.61,0.5825,24,2.91,9.47,0.30792,14,21.25,33.18,0.10958,3,22,59.17,5.89,0.21955,23,22.27,8.58,0.57946,24,-14.51,8.8,0.20099,3,21,71.84,0.47,0.21583,22,34.96,6.47,0.32263,23,-1.92,7.63,0.46154,3,21,45.81,3.96,0.40554,22,8.71,7.12,0.38602,23,-28.17,6.61,0.20845,3,20,56.79,2.13,0.25409,21,19.83,7.12,0.53006,22,-17.46,7.46,0.21585,3,19,66.18,3.45,0.22414,20,29.23,7.92,0.34135,21,-8.25,9.24,0.43451,4,18,76.6,4.51,0.19364,19,39.78,8.26,0.28887,20,2.49,10.19,0.33579,21,-35.06,7.97,0.1817,4,17,82.88,7.08,0.11658,18,46.18,9.58,0.35727,19,9.09,11.32,0.35745,20,-28.36,10.3,0.16869,3,17,54.46,12.11,0.35357,18,17.57,13.46,0.44494,19,-19.71,13.32,0.20149,2,17,24.65,16.69,0.65438,18,-12.4,16.85,0.34562,2,17,-8.38,15.21,0.85331,18,-45.34,14.05,0.14669,1,17,-20.19,4.56,1,2,15,35.89,2.53,0.4051,16,3.99,1.87,0.5949,3,14,54.38,5.92,0.13921,15,21.52,4.3,0.54495,16,-9.85,6.12,0.31584,2,14,37.79,7.63,0.44939,15,5.1,7.27,0.55061,3,23,65.39,20.7,0.11858,14,20.6,11.35,0.75134,15,-11.76,12.27,0.13008,3,23,65.41,1.81,0.3968,24,24.3,0.23,0.28258,14,2.07,14.98,0.32063,3,23,48.01,0.08,0.55395,24,6.94,-0.33,0.33293,14,3.38,30.47,0.11312,3,22,65.95,-2.97,0.19447,23,24.96,-1.58,0.57382,24,-15.99,-0.43,0.23171],"hull":36,"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,34,36,44,46,50,52,52,54,54,56,56,58,58,60,60,62,62,64,64,66,66,68,68,70,0,70,4,66,2,68,40,42,42,44,26,28,28,30,46,48,48,50,36,38,38,40,30,32,32,34,18,52,16,54,14,56,12,58,10,60,8,62,6,64,32,72,72,38,30,74,74,40,72,74,28,76,76,42,74,76,26,78,78,44,76,78,24,80,80,46,78,80,22,82,82,48,80,82,20,84,84,50,82,84],"width":100,"height":318}},"back-leg-path":{"back-leg-path":{"type":"path","lengths":[137.84,291.79,641.23],"vertexCount":9,"vertices":[1,26,-43.15,0.61,1,1,26,-1.31,0.44,1,1,26,63.08,-0.19,1,2,26,72.07,13.66,0.5,27,-69.12,-16.08,0.5,2,26,135.75,0.27,0.5,27,-3.96,-2.03,0.5,2,26,202.92,-15.14,0.5,27,65,14.1,0.5,1,27,71.09,-2.04,1,1,27,149.06,-1.74,1,1,26,368.48,-1.81,1]}},"body":{"body":{"type":"mesh","uvs":[0.35966,0.01351,0.26864,0.04108,0.26204,0.0954,0.34119,0.14478,0.39792,0.19457,0.40451,0.24272,0.38077,0.27893,0.3597,0.3004,0.34119,0.31926,0.34989,0.34326,0.35834,0.36658,0.36552,0.40164,0.37234,0.43499,0.38397,0.4944,0.3956,0.55971,0.39884,0.59858,0.40142,0.62955,0.40216,0.65662,0.3461,0.71564,0.27077,0.78176,0.2201,0.82128,0.17618,0.85553,0.13115,0.88833,0.08238,0.92385,0.00342,0.9796,0.18836,0.99127,0.32172,0.99284,0.46266,0.99451,0.61643,0.98608,0.71618,0.97182,0.61851,0.95821,0.48967,0.95043,0.39458,0.94083,0.27772,0.92904,0.23408,0.9232,0.26692,0.89774,0.30681,0.86681,0.34203,0.83415,0.38369,0.7955,0.45642,0.72874,0.52708,0.66845,0.56032,0.63345,0.57541,0.60109,0.59357,0.56214,0.61643,0.49732,0.63513,0.43963,0.64345,0.40462,0.77081,0.39011,0.84585,0.37025,0.90983,0.35331,0.9674,0.31915,0.97302,0.28585,0.96448,0.23351,0.8952,0.1681,0.79346,0.12643,0.75179,0.10879,0.71799,0.09448,0.66817,0.07237,0.61343,0.04807,0.47868,0.01411,0.49846,0.38826,0.66315,0.34728,0.67333,0.30664,0.8188,0.29655,0.80971,0.24505,0.72829,0.17902,0.68147,0.13902,0.59191,0.09711,0.3904,0.09012,0.53695,0.14981,0.57563,0.19616,0.64483,0.25077,0.79855,0.33476,0.61751,0.97167,0.4773,0.97061,0.23795,0.95673,0.15272,0.92355,0.14158,0.94886,0.23861,0.86092,0.51732,0.30354,0.50696,0.34527,0.50634,0.43735,0.50334,0.4959,0.51086,0.32558,0.50355,0.41057,0.19543,0.89241,0.36492,0.9641],"triangles":[2,1,68,68,1,58,58,1,59,1,0,59,69,67,66,3,68,69,69,68,67,3,2,68,66,56,55,66,67,56,67,57,56,67,58,57,67,68,58,5,70,71,71,70,65,5,4,70,70,66,65,4,69,70,70,69,66,4,3,69,65,54,53,65,66,54,66,55,54,46,61,47,46,80,61,80,83,61,61,62,72,61,83,62,80,9,83,9,8,83,83,79,62,8,7,83,83,7,79,71,6,5,7,6,79,79,6,62,6,71,62,47,72,48,47,61,72,48,72,49,49,72,50,72,63,50,72,62,63,50,63,51,62,64,63,63,52,51,63,64,52,71,65,64,64,53,52,64,65,53,62,71,64,26,86,27,27,74,28,27,86,74,28,73,29,28,74,73,73,30,29,74,31,73,73,31,30,86,32,74,74,32,31,25,75,26,26,75,86,24,77,25,25,77,75,24,23,77,75,33,86,86,33,32,75,77,33,77,34,33,77,76,34,77,23,76,23,22,76,76,85,34,76,22,85,34,85,35,85,78,35,22,21,85,35,78,36,85,21,78,37,36,20,21,20,78,36,78,20,20,19,37,37,19,38,19,18,38,38,18,39,18,17,39,39,17,40,41,40,16,40,17,16,42,41,15,41,16,15,43,42,14,42,15,14,14,82,43,43,82,44,14,13,82,82,81,44,44,81,45,82,13,81,13,12,81,46,45,84,12,84,81,45,81,84,12,11,84,11,60,84,84,60,46,60,80,46,11,10,60,60,10,80,10,9,80],"vertices":[1,5,30.85,2.45,1,2,4,60.42,12.42,0.24859,5,22.32,18.18,0.75141,2,4,39.47,25.25,0.44332,5,-1.06,25.72,0.55668,3,3,48.03,29.46,0.37431,4,14.55,26.45,0.47619,5,-25.57,21.02,0.1495,3,2,50.36,32.58,0.11243,3,24.29,26.8,0.64611,4,-8.99,30.5,0.24146,3,41,-45.22,-8.81,0.10611,2,28.69,30.4,0.49533,3,2.89,30.85,0.39856,3,41,-28.91,-12.45,0.25802,2,12.15,32.8,0.60894,3,-12.29,37.84,0.13304,3,41,-18.5,-14.05,0.28714,2,2.34,35.98,0.51935,29,-7.6,18.95,0.19351,4,41,-10.79,-18.35,0.28478,28,-42.03,75.56,0.10295,2,-6.36,37.32,0.37494,29,-10.2,10.26,0.23733,3,41,0.92,-16.96,0.34087,2,-17.28,35.45,0.32141,29,-8.2,-0.67,0.33772,4,41,10.64,-16.32,0.32691,42,-24.05,-14.9,0.16082,2,-27.58,33.67,0.14432,29,-6.37,-11.05,0.36794,4,41,28.5,-15.63,0.24237,42,-9.55,-15.11,0.27028,43,-45.51,-19.12,0.12132,29,-3.65,-27.88,0.36603,4,41,41.59,-14.89,0.21761,42,6.93,-15.35,0.33285,43,-26.85,-17.49,0.20377,29,-1.3,-43.28,0.24577,3,42,33.83,-15.81,0.47179,43,0,-15.85,0.42627,44,-31.79,-17.82,0.10194,3,42,63.39,-16.48,0.2126,43,29.52,-14.22,0.42737,44,-2.43,-14.39,0.36002,3,43,49.79,-15.51,0.30179,44,14.85,-13.08,0.47127,45,-21.15,-15.64,0.22695,3,43,61.1,-13.41,0.15443,44,29.03,-11.65,0.50848,45,-3.27,-12.45,0.33708,2,44,41.24,-10.8,0.28079,45,8.41,-8.79,0.71921,2,45,36.24,-8.59,0.56513,46,-3.02,-8.84,0.43487,3,45,67.93,-10.06,0.16322,46,28.69,-7.82,0.53712,47,-8.12,-7.7,0.29966,3,46,47.76,-8.47,0.40201,47,10.97,-7.9,0.45131,48,-26.34,-6.21,0.14668,3,46,64.62,-8.06,0.25017,47,27.8,-8.4,0.46039,48,-12.77,-8.82,0.28944,4,46,79.13,-10.24,0.11858,47,42.33,-8.03,0.26981,48,4.53,-8.38,0.48104,38,-1.56,35.6,0.13057,2,48,20.84,-9.2,0.728,38,-5.38,19.56,0.272,1,38,-11.5,-7.3,1,4,48,43.23,16.27,0.2746,38,15.1,-7.51,0.48158,39,-12.29,-5.54,0.12942,40,-41.77,0.94,0.11439,4,48,37,33.94,0.18804,38,33.71,-4.58,0.34252,39,6.54,-5.76,0.18297,40,-23.2,-2.19,0.28647,3,38,53.35,-1.59,0.21646,39,26.41,-6.09,0.26516,40,-3.62,-5.59,0.51838,2,39,47.99,-1.76,0.15753,40,18.37,-4.66,0.84247,1,40,33.16,-0.12,1,2,39,47.98,10.84,0.17387,40,20.32,7.79,0.82613,4,48,9.83,48.43,0.17572,38,53.29,18.7,0.17038,39,29.73,13.92,0.136,40,2.77,13.66,0.5179,4,48,11.45,34.58,0.26313,38,39.26,20.56,0.23037,39,16.21,18.1,0.15679,40,-9.94,19.88,0.3497,4,48,12.41,17.13,0.37057,38,22.11,22.5,0.30409,39,-0.38,22.88,0.18235,40,-25.59,27.17,0.14299,3,48,12.34,10.44,0.4464,38,15.56,23.92,0.2976,39,-6.59,25.37,0.256,5,46,75.96,9.07,0.10563,47,38.15,11.09,0.25495,48,1.65,10.97,0.33578,38,17.99,34.75,0.16323,39,-2.39,35.65,0.14041,3,46,62.62,10.94,0.26064,47,26.05,10.62,0.49792,48,-15.15,10.14,0.24144,3,46,47.27,9.67,0.40348,47,9.53,10.2,0.4787,48,-26.59,11.94,0.11781,3,45,69.23,6.98,0.16044,46,28.64,9.27,0.53936,47,-7.95,9.39,0.3002,2,45,37.36,8.01,0.57649,46,-3.21,7.8,0.42351,2,44,45.49,7.11,0.2935,45,8.38,9.61,0.7065,3,43,62.85,9,0.15446,44,29.41,10.82,0.49324,45,-8.13,9.49,0.3523,3,43,52.15,9.28,0.30575,44,12.84,11.74,0.46742,45,-26.12,8.77,0.22683,3,42,66.66,11.26,0.21798,43,30.62,13.69,0.42844,44,-3.05,13.54,0.35358,3,42,37.7,16.76,0.48246,43,1.32,16.92,0.41752,44,-32.5,14.97,0.10002,4,41,44.35,22.12,0.2346,42,11.91,21.43,0.43853,43,-24.76,19.57,0.2068,2,-58.29,-7.2,0.12007,4,41,28.55,23.57,0.31081,42,-3.77,23.84,0.19158,28,-76.76,29.23,0.21531,2,-42.43,-7.46,0.28231,3,41,22.31,41.64,0.18196,28,-69.84,12.47,0.43955,2,-34.84,-25,0.37848,3,41,19.78,51.42,0.1392,28,-59.84,2.53,0.47896,2,-23.9,-35.17,0.38184,3,41,6.03,61.54,0.10543,28,-52.71,-5.88,0.51007,2,-17.11,-43.61,0.38449,2,28,-37.16,-13.14,0.67427,2,-1.22,-50.83,0.32573,1,28,-22.09,-13.06,1,2,28,1.45,-10.49,0.89019,2,37.4,-48.18,0.10981,3,28,30.41,0.97,0.4302,2,66.35,-36.73,0.16237,3,19.98,-44.2,0.40743,2,3,41.58,-34.52,0.68165,4,-9.45,-33.21,0.31835,2,3,50.69,-30.62,0.51066,4,0.38,-31.99,0.48934,3,3,58.07,-27.45,0.26484,4,8.35,-31.01,0.61475,5,-18.05,-36.28,0.12041,3,3,69.4,-22.88,0.17396,4,20.51,-29.78,0.5644,5,-6.53,-32.23,0.26164,2,4,33.86,-28.42,0.29085,5,6.13,-27.77,0.70915,2,4,56.55,-19.38,0.17381,5,26.05,-13.63,0.82619,5,41,20.79,3.26,0.38867,42,-12.74,4.03,0.17698,28,-69.84,50.18,0.10105,2,-36.22,13.38,0.19581,29,13.98,-19.25,0.13749,4,41,2.69,26.81,0.26409,28,-50.86,29.21,0.2337,2,-16.39,-8.73,0.34628,29,35.79,-0.49,0.15592,3,41,-15.65,28.57,0.15678,28,-33.54,28.78,0.2916,2,2.03,-9.11,0.55162,1,28,-28.18,8.37,1,1,28,-5.01,11,1,3,28,24.12,24.18,0.12052,2,60.07,-13.52,0.21384,3,20.53,-20.16,0.66564,2,3,39.64,-17.85,0.59513,4,-6.68,-16.66,0.40487,3,3,60.96,-9.87,0.26252,4,16.02,-14.92,0.55541,5,-14.39,-18.85,0.18206,2,4,32.69,8.3,0.58729,5,-3.66,7.65,0.41271,2,3,39.53,3.1,0.47136,4,-0.95,3.5,0.52864,1,3,17.89,2.56,1,2,2,27.01,-3.64,0.67245,3,-8.37,-1.32,0.32755,3,41,-2.63,46,0.10033,28,-45.42,10.27,0.52612,2,-9.64,-27.47,0.37356,2,39,47.98,4.75,0.16598,40,19.38,1.78,0.83402,4,48,19.56,50.48,0.12624,38,53.31,9.51,0.16908,39,28.22,4.86,0.24846,40,-0.13,4.94,0.45621,4,48,26.31,16.82,0.32786,38,18.97,9.25,0.38308,39,-5.69,10.34,0.1588,40,-32.78,15.61,0.13026,2,48,16.97,-0.03,0.66865,38,4.23,21.71,0.33135,3,48,28.1,2.86,0.4826,38,4.92,10.15,0.31302,39,-19.39,13.57,0.20437,3,46,63.22,-0.58,0.21069,47,25.96,0.79,0.49387,48,-11.02,1.48,0.29545,3,41,-14.84,8.09,0.24448,28,-33.35,51.23,0.16325,2,2.6,13.54,0.59227,4,41,3.38,4.96,0.28616,28,-51.81,51.13,0.16477,2,-15.87,13.44,0.31892,29,13.85,-0.53,0.23015,4,41,46.09,3.59,0.2409,42,9.06,3.1,0.41152,43,-28.46,0.64,0.21862,29,17.5,-43.07,0.12896,3,42,37.23,1.25,0.47745,43,-0.08,1.26,0.42163,44,-36.26,-5.26,0.10093,4,41,-5.23,6.3,0.25594,28,-43.11,51.32,0.15579,2,-7.17,13.63,0.42092,29,14.17,8.17,0.16735,4,41,33.04,3.37,0.36685,42,-3.97,3.61,0.31093,2,-45.33,9.83,0.17307,29,15.76,-30.15,0.14915,4,46,77.51,-1.16,0.11479,47,40.24,0.95,0.26889,48,3.05,0.72,0.44973,38,7.66,35.33,0.16659,4,48,22.73,34.68,0.22091,38,37.18,9.39,0.26956,39,12.3,7.43,0.20636,40,-15.46,9.95,0.30317],"hull":60,"edges":[0,2,2,4,4,6,6,8,8,10,10,12,24,26,26,28,32,34,34,36,36,38,46,48,48,50,54,56,56,58,58,60,60,62,66,68,76,78,78,80,80,82,86,88,88,90,90,92,92,94,98,100,100,102,102,104,104,106,106,108,116,118,0,118,92,120,120,20,28,86,82,32,34,80,78,36,76,38,12,124,102,126,126,124,126,128,128,130,130,132,132,134,112,134,134,136,136,4,2,116,6,138,138,132,8,140,140,130,10,142,142,128,128,104,130,106,132,108,122,92,100,144,144,122,126,144,144,94,112,114,114,116,108,110,110,112,16,18,18,20,20,22,22,24,12,14,14,16,122,124,94,96,96,98,56,146,146,60,54,148,148,62,146,148,50,150,150,66,46,152,152,68,154,152,154,48,42,156,156,72,14,158,158,124,18,160,160,122,160,120,24,162,162,90,26,164,164,88,162,164,16,166,160,166,166,158,166,124,162,168,168,120,168,22,168,92,38,40,40,42,72,74,74,76,40,74,42,44,44,46,152,170,170,156,44,170,68,70,70,72,170,70,62,64,64,66,148,172,172,150,64,172,50,52,52,54,172,52,154,66,150,154,28,30,30,32,82,84,84,86,30,84],"width":141,"height":452}},"front-arm":{"front-arm":{"type":"mesh","uvs":[0.71401,0.00566,0.67108,0.08129,0.60222,0.15434,0.53633,0.21683,0.44558,0.28705,0.34898,0.35134,0.29097,0.38941,0.25238,0.41472,0.22423,0.44271,0.19483,0.47193,0.15998,0.50658,0.09138,0.59568,0.05498,0.70866,0.02988,0.81366,0.01049,0.94262,0.10495,0.98985,0.25391,0.97421,0.31482,0.88907,0.28834,0.82869,0.13607,0.74572,0.14335,0.71488,0.18317,0.62253,0.25217,0.54221,0.29538,0.50981,0.33787,0.47795,0.38452,0.45013,0.43581,0.41953,0.54711,0.3655,0.68845,0.29832,0.74855,0.35527,0.85874,0.38229,0.99674,0.37645,0.95354,0.33244,0.91356,0.29172,0.87464,0.25208,0.83759,0.21434,0.78083,0.12598,0.78194,0.0683,0.6322,0.23719,0.66925,0.15784,0.75533,0.20967,0.7161,0.11137],"triangles":[30,29,33,30,32,31,40,41,36,39,41,40,40,36,35,38,39,40,28,38,40,34,28,40,34,40,35,28,34,33,29,28,33,30,33,32,41,1,0,37,41,0,36,41,37,39,1,41,39,2,1,19,12,20,13,12,19,18,15,19,16,18,17,15,13,19,15,14,13,15,18,16,21,10,22,11,10,21,20,11,21,12,11,20,9,8,23,22,9,23,10,9,22,26,5,4,25,5,26,6,5,25,24,6,25,7,6,24,23,7,24,8,7,23,38,2,39,3,2,38,27,3,38,27,38,28,4,3,27,26,4,27],"vertices":[1,53,21.67,6.08,1,2,52,18.13,3.37,0.16553,53,3.92,4.24,0.83447,3,30,-6.12,-15.24,0.20965,52,-0.05,8.86,0.53629,5,43.44,6.81,0.25406,1,30,10.36,-12.02,1,2,30,30.62,-10.09,0.88822,31,-7.63,-10.15,0.11178,2,30,50.57,-9.69,0.30996,31,12.31,-9.61,0.69004,2,31,24.21,-9.37,0.86563,32,-13.43,-6.2,0.13437,2,31,32.12,-9.22,0.73143,32,-5.73,-8.02,0.26857,2,31,39.35,-7.59,0.54007,32,1.68,-8.25,0.45993,2,31,46.9,-5.88,0.29037,32,9.42,-8.48,0.70963,2,32,18.59,-8.76,0.66539,33,-15.76,-5.13,0.33461,1,33,6.03,-8.58,1,2,33,31.42,-5.98,0.39257,34,0.49,-6.36,0.60743,1,34,23.8,-9.31,1,1,34,52.37,-11.28,1,1,34,62.39,2.72,1,1,34,58.29,24.21,1,1,34,39.22,32.48,1,1,34,26,28.25,1,1,34,8.33,5.63,1,2,33,28.81,6.64,0.48313,34,1.49,6.49,0.51687,1,33,7.61,5.9,1,3,31,51.67,11.07,0.10767,32,18.26,6.75,0.559,33,-12.35,10.01,0.33333,2,31,42.19,10.25,0.31464,32,8.88,8.32,0.68536,2,31,32.87,9.45,0.59184,32,-0.35,9.86,0.40816,2,31,23.73,9.7,0.83036,32,-9.14,12.39,0.16964,2,30,52.08,9.88,0.29921,31,13.68,9.98,0.70079,2,30,32.19,12.6,0.84687,31,-6.24,12.55,0.15313,1,5,9.42,3.39,1,2,5,-5.05,-1.59,0.472,4,29.16,-0.35,0.528,1,4,16.13,-11.36,1,1,4,7.46,-29.44,1,2,5,-8.23,-31.57,0.5193,4,19,-28.74,0.4807,1,5,2,-28.43,1,1,5,11.96,-25.37,1,1,5,21.44,-22.45,1,3,52,12.7,-14.55,0.25482,53,2.14,-14.4,0.32231,5,42.47,-19.82,0.42287,1,53,13.64,-8.89,1,1,30,3.55,0.91,1,2,52,1.72,-0.73,0.5001,5,40.07,-2.34,0.4999,1,5,25.66,-11.25,1,3,52,13.4,-4.65,0.33234,53,0.86,-4.56,0.48165,5,48.12,-11.66,0.18601],"hull":38,"edges":[0,2,8,10,20,22,22,24,24,26,26,28,28,30,30,32,32,34,34,36,36,38,38,40,40,42,42,44,52,54,54,56,56,58,58,60,60,62,70,72,72,74,0,74,56,76,6,8,76,6,4,6,4,78,78,80,80,70,2,82,82,72,82,78,78,76,2,4,56,80,56,66,62,64,64,66,66,68,68,70,44,46,46,48,18,20,46,18,10,12,12,14,48,50,50,52,12,50,14,16,16,18],"width":145,"height":221}},"front-arm-path":{"front-arm-path":{"type":"path","lengths":[73.64,135.97,291.4],"vertexCount":9,"vertices":[1,36,-21.12,-1.6,1,1,36,0.92,-0.29,1,1,36,16.41,0.79,1,2,36,53.26,-1.74,0.504,37,-15.94,3.84,0.496,2,36,74.54,0.19,0.504,37,4.75,-1.5,0.496,2,36,94.74,2.31,0.504,37,24.5,-6.3,0.496,1,37,46.12,-4.58,1,1,37,66.56,-0.12,1,1,36,147.94,32.21,1]}},"front-leg-path":{"front-leg-path":{"type":"path","lengths":[140.44,297.38,652.13],"vertexCount":9,"vertices":[1,50,-40.7,-0.42,1,1,50,1.49,-0.27,1,1,50,75.42,0.33,1,2,50,82.92,8.5,0.5,51,-58.75,-8.54,0.5,2,50,141.35,0.53,0.5,51,0.45,0.71,0.5,2,50,208.27,-14.84,0.5,51,68.84,18.53,0.5,1,51,73.81,1.42,1,1,51,156.58,0.99,1,1,50,380.6,0.76,1]}},"head":{"head":{"x":45.65,"y":-7.92,"rotation":-70.44,"width":87,"height":102}},"rear-arm-path":{"rear-arm-path":{"type":"path","lengths":[66.62,131.77,281.13],"vertexCount":9,"vertices":[1,12,-19.59,1.53,1,1,12,0.28,-0.13,1,1,12,17.08,-1.7,1,2,12,47.35,-3.26,0.504,13,-19.18,3.46,0.496,2,12,66.76,0.15,0.504,13,0.23,0.07,0.496,2,12,86.18,3.55,0.504,13,19.65,-3.32,0.496,1,13,46.48,-3.02,1,1,13,65.15,0.11,1,1,12,144.73,31.88,1]}}}},"animations":{"sneak":{"bones":{"hip":{"rotate":[{"time":0,"angle":30.27,"curve":"stepped"},{"time":0.1667,"angle":30.27},{"time":0.3333,"angle":-31.29},{"time":0.5333,"angle":-44.75},{"time":0.7333,"angle":-25.5},{"time":0.9,"angle":-9.45},{"time":1.0667,"angle":30.27},{"time":1.2333,"angle":-10.1},{"time":1.6333,"angle":-41.48},{"time":1.8,"angle":30.27}],"translate":[{"time":0,"x":-57.44,"y":-40.93},{"time":0.1667,"x":-16.16,"y":-96.56,"curve":[0.245,0,0.637,0.56]},{"time":0.2667,"x":86,"y":-143.07,"curve":[0.381,0.55,0.742,1]},{"time":0.3333,"x":145.45,"y":-159.28},{"time":0.4333,"x":344.29,"y":-134.95},{"time":0.5333,"x":543.14,"y":-81.1},{"time":0.7333,"x":569.69,"y":-62.13},{"time":0.9,"x":591.81,"y":-46.32},{"time":1.0667,"x":653.14,"y":-96.6,"curve":[0.381,0.55,0.742,1]},{"time":1.1333,"x":710.17,"y":-143.1},{"time":1.2333,"x":795.7,"y":-159.3},{"time":1.3333,"x":986.95,"y":-153.35},{"time":1.4333,"x":1178.2,"y":-111.89},{"time":1.6333,"x":1195.1,"y":-62.1},{"time":1.8,"x":1246.53,"y":-40.93}]},"front-leg-ik-target":{"translate":[{"time":0,"x":-50.43,"y":44.62},{"time":0.1667,"x":-50.43,"y":46.55},{"time":0.3333,"x":-50.43,"y":47},{"time":0.5333,"x":-26.43,"y":50.21,"curve":[0.532,0,0.75,1]},{"time":0.7333,"x":566.44,"y":107.27},{"time":0.9,"x":1215.9,"y":68.21},{"time":1.0667,"x":1235.47,"y":15.8},{"time":1.2333,"x":1235.47,"y":0.97},{"time":1.5667,"x":1230.16,"y":3.76},{"time":1.7,"x":1244,"y":26.77},{"time":1.8,"x":1253.54,"y":44.62}]},"front-foot1":{"rotate":[{"time":0,"angle":-48.39,"curve":"stepped"},{"time":0.3333,"angle":-48.39},{"time":0.7,"angle":-121.35},{"time":0.8,"angle":-80.19},{"time":0.9,"angle":45.59},{"time":1.0667,"angle":2.11},{"time":1.2333,"angle":4.65},{"time":1.5667,"angle":5.67},{"time":1.8,"angle":-48.39}],"scale":[{"time":0.6,"x":1,"y":1},{"time":0.6333,"x":0.955,"y":1},{"time":0.7667,"x":0.821,"y":1},{"time":0.9,"x":1,"y":1},{"time":1.0667,"x":0.851,"y":1},{"time":1.3667,"x":1,"y":1}]},"front-foot3":{"rotate":[{"time":0,"angle":36.33},{"time":0.3333,"angle":28.46},{"time":0.5,"angle":34.85},{"time":0.5333,"angle":30.32},{"time":0.5667,"angle":61.67},{"time":0.7,"angle":-19.47},{"time":0.9,"angle":-0.12},{"time":1.0667,"angle":-7.21},{"time":1.2333,"angle":-11.35},{"time":1.5667,"angle":-11.24},{"time":1.8,"angle":36.33}]},"back-leg-ik-target":{"translate":[{"time":0,"x":516.79,"y":86.68},{"time":0.1667,"x":523.72,"y":16.64},{"time":0.3333,"x":523.03,"y":-5,"curve":"stepped"},{"time":0.7,"x":523.03,"y":-5},{"time":0.9,"x":551.32,"y":41.87},{"time":1.0667,"x":554.24,"y":44.45},{"time":1.1333,"x":555.44,"y":44.75},{"time":1.2,"x":556.61,"y":46.19,"curve":"stepped"},{"time":1.4333,"x":556.61,"y":46.19},{"time":1.5,"x":746.97,"y":74.82},{"time":1.6333,"x":1127.69,"y":103.62},{"time":1.8,"x":1820.76,"y":86.68}]},"back-foot1":{"rotate":[{"time":0,"angle":74.18},{"time":0.1667,"angle":-17.01},{"time":0.3333,"angle":5.06},{"time":0.7,"angle":3.74},{"time":0.9,"angle":-65.56},{"time":1.6333,"angle":-92.53},{"time":1.8,"angle":74.18}],"scale":[{"time":0,"x":0.824,"y":1},{"time":0.1667,"x":0.754,"y":1},{"time":0.3333,"x":0.589,"y":1},{"time":0.5667,"x":0.91,"y":1},{"time":0.9,"x":1,"y":1,"curve":"stepped"},{"time":1.4,"x":1,"y":1},{"time":1.5,"x":0.845,"y":1},{"time":1.8,"x":0.824,"y":1}]},"back-foot2":{"rotate":[{"time":0,"angle":8.14},{"time":0.1667,"angle":-3.21},{"time":0.7,"angle":-1.14},{"time":0.9,"angle":34.12},{"time":1.4333,"angle":46.69},{"time":1.5333,"angle":-15.6},{"time":1.6333,"angle":-11.91},{"time":1.8,"angle":8.14}],"scale":[{"time":0,"x":1,"y":1},{"time":0.1667,"x":0.835,"y":1},{"time":0.3333,"x":1,"y":1}]},"front-arm1":{"rotate":[{"time":0,"angle":-39.72},{"time":0.1667,"angle":-37.3},{"time":0.3333,"angle":30.67},{"time":0.9,"angle":-53.28,"curve":[0.708,0.01,0.75,1]},{"time":1.2333,"angle":36},{"time":1.8,"angle":-39.72}]},"neck1":{"rotate":[{"time":0,"angle":21.95,"curve":"stepped"},{"time":0.1667,"angle":21.95},{"time":0.2667,"angle":30.61},{"time":0.3333,"angle":36.37},{"time":0.7333,"angle":33.6},{"time":1.1667,"angle":23.95},{"time":1.2333,"angle":36.37},{"time":1.6333,"angle":41.16},{"time":1.8,"angle":21.95}]},"neck2":{"rotate":[{"time":0,"angle":-22.93},{"time":0.1667,"angle":-23.96},{"time":0.2667,"angle":8.84},{"time":0.3333,"angle":30.71},{"time":0.7333,"angle":-3.37},{"time":0.9,"angle":-17.57},{"time":1.1667,"angle":2.19},{"time":1.2333,"angle":15.26},{"time":1.6333,"angle":4.42},{"time":1.8,"angle":-22.93}]},"head":{"rotate":[{"time":0,"angle":-22.93},{"time":0.1667,"angle":-13.04},{"time":0.2667,"angle":2.65},{"time":0.3333,"angle":13.1},{"time":0.5,"angle":13.1},{"time":0.7333,"angle":-18.91},{"time":0.9,"angle":-41.78},{"time":1.1667,"angle":-4},{"time":1.2333,"angle":-2.35},{"time":1.6333,"angle":-22.89},{"time":1.8,"angle":-22.93}]},"back-arm1":{"rotate":[{"time":0,"angle":-17.24},{"time":0.1667,"angle":-18.66},{"time":0.3333,"angle":324.99},{"time":0.5667,"angle":-6.42},{"time":0.9,"angle":-14.83},{"time":1.0667,"angle":-16.91},{"time":1.2333,"angle":1.49},{"time":1.4,"angle":2.56},{"time":1.8,"angle":-17.24}],"translate":[{"time":0,"x":-14.26,"y":-6.6}]},"back-leg-ik1":{"scale":[{"time":0,"x":2.186,"y":1},{"time":0.1667,"x":2.229,"y":1},{"time":0.3333,"x":1.532,"y":1},{"time":0.4333,"x":0.947,"y":1},{"time":0.5333,"x":1,"y":1,"curve":"stepped"},{"time":1.0667,"x":1,"y":1},{"time":1.1333,"x":0.893,"y":1},{"time":1.2333,"x":0.957,"y":1},{"time":1.4333,"x":2.315,"y":1},{"time":1.6333,"x":0.774,"y":1},{"time":1.8,"x":2.186,"y":1}]},"front-leg1":{"scale":[{"time":0,"x":1,"y":1.118}]},"back-leg1":{"scale":[{"time":0,"x":1,"y":1.039}]},"front-leg-ik1":{"scale":[{"time":0,"x":1,"y":1},{"time":0.2667,"x":0.859,"y":1},{"time":0.3333,"x":0.972,"y":1},{"time":0.5333,"x":2.356,"y":1,"curve":[0.532,0,0.75,1]},{"time":0.7,"x":1,"y":1},{"time":0.9,"x":2.248,"y":1},{"time":1.0667,"x":2.003,"y":1},{"time":1.2333,"x":1.496,"y":1},{"time":1.3,"x":1.048,"y":1,"curve":[0.34,0.59,0.765,1]},{"time":1.4333,"x":0.779,"y":0.763},{"time":1.8,"x":1,"y":1}]},"front-arm3":{"rotate":[{"time":0,"angle":0},{"time":0.1667,"angle":17.37},{"time":0.3333,"angle":31.94},{"time":0.9,"angle":4.76,"curve":[0.708,0.01,0.75,1]},{"time":1.2333,"angle":39.97},{"time":1.8,"angle":0}]},"spine2":{"rotate":[{"time":0,"angle":-3.49},{"time":0.2667,"angle":-11.58},{"time":0.3333,"angle":-9.03},{"time":0.5,"angle":-2.66},{"time":0.7333,"angle":-5.78},{"time":1.1667,"angle":-11.58},{"time":1.2333,"angle":-6.7},{"time":1.6333,"angle":-2.5},{"time":1.8,"angle":-3.49}]},"spine3":{"rotate":[{"time":0,"angle":-20.41},{"time":0.2667,"angle":-11.58},{"time":0.3333,"angle":-9.03},{"time":0.5,"angle":-2.66},{"time":0.7333,"angle":-10.54},{"time":0.9,"angle":-16.17},{"time":1.1667,"angle":-11.58},{"time":1.2333,"angle":-9.03},{"time":1.6333,"angle":-7.26},{"time":1.8,"angle":-20.41}]},"back-arm3":{"rotate":[{"time":0,"angle":26.23},{"time":0.1667,"angle":53.15},{"time":0.3333,"angle":116.26},{"time":0.5667,"angle":35.72},{"time":0.9,"angle":39.33},{"time":1.0667,"angle":41.19},{"time":1.2333,"angle":78.1},{"time":1.4,"angle":36.16},{"time":1.8,"angle":26.23}]},"back-foot3":{"rotate":[{"time":0,"angle":11.35},{"time":0.7,"angle":-4.24},{"time":0.9,"angle":25.49,"curve":"stepped"},{"time":1.4333,"angle":25.49},{"time":1.5333,"angle":-30.52},{"time":1.6333,"angle":-20.54},{"time":1.8,"angle":11.35}],"scale":[{"time":0,"x":1,"y":1},{"time":0.1667,"x":0.835,"y":1},{"time":0.3333,"x":1,"y":1}]},"spine1":{"rotate":[{"time":0,"angle":10.81},{"time":0.2667,"angle":-28.7},{"time":0.3333,"angle":-24.32},{"time":0.5,"angle":-13.38},{"time":0.7333,"angle":21.62},{"time":0.9,"angle":46.61},{"time":1.1667,"angle":-28.7},{"time":1.2333,"angle":-43.34},{"time":1.6333,"angle":24.89},{"time":1.8,"angle":10.81}]},"spine4":{"rotate":[{"time":0,"angle":0},{"time":0.2667,"angle":-2.8},{"time":0.3333,"angle":-0.82},{"time":0.5,"angle":4.14},{"time":0.7333,"angle":-3.74},{"time":0.9,"angle":-9.37},{"time":1.1667,"angle":-9.02},{"time":1.2333,"angle":-0.82},{"time":1.6333,"angle":3.82},{"time":1.8,"angle":0}]},"front-foot2":{"rotate":[{"time":0,"angle":0},{"time":0.2667,"angle":-1.24},{"time":0.3333,"angle":-0.2},{"time":0.5,"angle":22.72},{"time":0.5333,"angle":26.87},{"time":0.7,"angle":-39.26},{"time":0.9,"angle":11.27},{"time":1.0667,"angle":-18.18},{"time":1.2333,"angle":-2.64},{"time":1.5667,"angle":-5.84},{"time":1.8,"angle":0}]},"belly":{"translate":[{"time":0,"x":3.66,"y":-3.77},{"time":0.2667,"x":13.83,"y":-3.82},{"time":0.6333,"x":-4.11,"y":-3.9},{"time":0.7667,"x":10.21,"y":-2.92},{"time":0.8667,"x":10.3,"y":-7.39},{"time":1.1,"x":-0.45,"y":-1.46},{"time":1.2333,"x":12.38,"y":2.33},{"time":1.3667,"x":11.51,"y":5.53},{"time":1.8,"x":0,"y":0}]},"butt":{"translate":[{"time":0,"x":0,"y":0},{"time":0.7667,"x":9.88,"y":-25.41},{"time":0.8333,"x":15.89,"y":-41.89},{"time":1.2333,"x":-12.49,"y":-33},{"time":1.8,"x":0,"y":0}]}},"deform":{"default":{"back-leg":{"back-leg":[{"time":0.3},{"time":0.3333,"offset":68,"vertices":[-1.72897,2.75446,-1.5253,2.94189,0.0625,3.6552,0.01776,3.65398,0,0,0,0,0,0,0.0625,3.6552,0.01776,3.65398,0.90137,3.54112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.98724,-1.57397,-0.03339,-2.08873,-0.0108,-2.08799,-0.51434,-2.02362,0.98724,-1.57397,0.87167,-1.68002,-0.03339,-2.08873,-0.0108,-2.08799]},{"time":0.4667,"curve":"stepped"},{"time":1.3333},{"time":1.4333,"offset":110,"vertices":[2.52802,0.00428,-0.03569,-4.90118,-3.71692,-3.19397,-4.88019,-0.43807,5.17279,-0.0625,5.1499,-0.4769,-0.07238,-10.06842,-7.6351,-6.56073,6.64206,-0.09958,6.61151,-0.62643,-0.09275,-12.93915,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.01242,-1.65533,-1.25543,-1.0787,0.86096,0.02682,-0.01242,-1.65533,-1.25543,-1.0787]},{"time":1.5}]},"back-leg-path":{"back-leg-path":[{"time":1.4333},{"time":1.5,"vertices":[4.67719,-35.44354,0,0,-11.37146,49.53738,-20.9989,-109.72336,65.45837,-90.53627,-9.56653,-24.74756,11.45203,-23.93552,-19.0719,47.32281,-47.53955,18.58409,34.69244,-51.5341,0,0,13.30164,-100.17206]},{"time":1.5667,"vertices":[-0.9635,-22.43964,0,0,-13.80389,27.61459,-41.00647,-55.1597,7.62653,-96.25755,-24.12604,-24.11285,7.19531,-37.87421,-31.47302,7.7796,-12.34546,-3.32329,26.55981,-38.73888,0,0,-13.62085,-280.84912]},{"time":1.6667}]},"body":{"body":[{"time":0},{"time":0.3333,"offset":164,"vertices":[-0.01179,0.02892,0.00917,0.0298,0,0,1.17781,0.89836,1.48063,-0.04942,-6.68858,-1.30629,4.38938,4.03926,4.59584,3.27733,5.6365,-0.11035,-4.92264,-0.8036,4.54263,1.06504,3.29334,0.58414,2.94214,-1.40272,-4.28855,-0.56444,5.07103,-0.2119,2.95891,-0.75666,1.83514,-2.22984,-4.31062,0.6261,6.11538,-0.87569,3.7923,-1.67126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.17404,0.22007,0.27404,0.06016]},{"time":0.5333,"offset":164,"vertices":[-0.01887,0.04627,0.01467,0.04768,0,0,1.8845,1.43737,2.369,-0.07908,1.46056,-1.33223,-0.75053,-3.7334,-2.8232,-2.55492,-3.80252,-0.19385,2.81923,-1.5031,-0.33163,-6.75651,-4.28408,-5.23484,-6.6292,-1.34549,3.83379,-1.12045,0.51382,-8.79961,-4.81918,-7.38011,-8.4004,-2.66889,3.83379,-1.12045,0.51382,-8.79961,-4.81918,-7.38011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.27846,0.35212,0.43846,0.09625]},{"time":0.6333,"offset":170,"vertices":[-2.09907,0.04961,-1.94301,1.46154,1.74966,0.25744,0.3765,-3.44555,-2.34343,-2.73069,-3.66285,-0.53693,0,0,0,0,0,0,0,0,1.91689,-0.56022,0.25691,-4.39981,-2.40959,-3.69006,-4.2002,-1.33444,1.91689,-0.56022,0.25691,-4.39981,-2.40959,-3.69006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0.66468,1.25351,0.05177,1.41789]},{"time":0.7333},{"time":0.7667,"offset":264,"vertices":[-2.27499,-1.60417,-2.23926,-1.61371,-2.2196,-1.74294,-1.80919,2.86346,-1.11118,2.362,-1.14221,2.35901,2.63101,1.41101,2.63216,1.41742,-0.8147,8.46568,9.45621,1.07874,9.45622,1.08002,-1.00012,6.23984,6.96738,1.29987,6.96741,1.30219,-0.68823,4.24005,4.73441,0.89532,4.73448,0.89594,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.05484,2.78093,0.01666,2.78223,3.10776,-0.05573,3.10799,-0.05426,-1.17972,2.87598,-0.99005,3.55937,3.97198,1.27319,3.97208,1.27423,-2.74237,3.14401]},{"time":0.8333,"curve":"stepped"},{"time":1.0667},{"time":1.3333,"offset":142,"vertices":[4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0,0,0,0,0,0,0,0,0,0,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4.02271,-1.7984,0.00684,-4.47887,-0.46118,-4.45537,-0.27441,-4.47041]},{"time":1.4333}]},"front-leg-path":{"front-leg-path":[{"time":0.5667},{"time":0.6333,"vertices":[0.16366,-9.90768,0,0,-1.90419,16.9905,16.55858,-93.6721,21.4361,-76.03695,-0.72391,-31.37989,8.2138,-30.29725,-24.90733,16.177,-28.83566,5.62576,82.90022,-63.82897,0,0,-39.50021,-13.99933]},{"time":0.7,"vertices":[0.20398,-12.34892,0,0,-2.37338,21.17692,20.63858,-116.75269,26.71791,-94.77228,-0.90228,-39.11182,10.23766,-37.76243,-31.04443,20.16298,-35.9407,7.01193,22.68159,24.72715,0,0,-292.39255,-342.79443]},{"time":0.8}]}}}}}} \ No newline at end of file +{ +"skeleton": { "hash": "HX2RPdDLCZelec3Vt4z5nIYUOhI", "spine": "3.7.24-beta", "width": 264.5, "height": 573.31, "images": "./images/", "audio": "" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "x": 28.61, "y": 289.9, "color": "ffbd00ff" }, + { + "name": "spine1", + "parent": "hip", + "length": 34.66, + "rotation": 86.69, + "x": -4.48, + "y": 12.66, + "color": "ffbd00ff" + }, + { "name": "spine2", "parent": "spine1", "length": 41.42, "rotation": 16.48, "x": 34.66, "color": "ffbd00ff" }, + { + "name": "spine3", + "parent": "spine2", + "length": 34.45, + "rotation": 16.17, + "x": 41.42, + "y": 0.01, + "color": "ffbd00ff" + }, + { + "name": "spine4", + "parent": "spine3", + "length": 37.53, + "rotation": -13.63, + "x": 34.45, + "y": 0.01, + "color": "ffbd00ff" + }, + { + "name": "back-arm1", + "parent": "spine4", + "length": 32.43, + "rotation": -154.36, + "x": 16, + "y": -4.58, + "transform": "noScale", + "color": "ff0000ff" + }, + { + "name": "back-arm2", + "parent": "back-arm1", + "length": 34.16, + "rotation": 3.11, + "x": 31.88, + "y": 0.02, + "color": "ff0000ff" + }, + { "name": "back-arm3", "parent": "back-arm2", "length": 31.27, "rotation": 9.59, "x": 34.16, "color": "ff0000ff" }, + { + "name": "back-arm4", + "parent": "back-arm3", + "length": 33.3, + "rotation": 14.61, + "x": 32.04, + "y": 0.82, + "color": "ff0000ff" + }, + { + "name": "back-arm5", + "parent": "back-arm4", + "length": 37.41, + "rotation": 11.31, + "x": 33.82, + "y": 0.02, + "color": "ff0000ff" + }, + { "name": "back-arm-ik-target", "parent": "root", "x": 103.52, "y": 345.27, "color": "ff3f00ff" }, + { + "name": "back-arm-ik1", + "parent": "spine4", + "length": 66.57, + "rotation": -152.7, + "x": 16.34, + "y": -4.46, + "color": "ff0000ff" + }, + { "name": "back-arm-ik2", "parent": "back-arm-ik1", "length": 66.01, "rotation": 19.36, "x": 66.57, "color": "ff0000ff" }, + { + "name": "back-foot1", + "parent": "hip", + "length": 33.24, + "rotation": -6.56, + "x": -34.01, + "y": -279.68, + "transform": "onlyTranslation", + "color": "ff0000ff" + }, + { + "name": "back-foot2", + "parent": "back-foot1", + "length": 32.29, + "rotation": 4.34, + "x": 33.24, + "transform": "noScale", + "color": "ff0000ff" + }, + { + "name": "back-foot3", + "parent": "back-foot2", + "length": 15.87, + "rotation": 10.06, + "x": 32.29, + "transform": "noScale", + "color": "ff0000ff" + }, + { + "name": "back-leg1", + "parent": "hip", + "length": 41, + "rotation": -83.66, + "x": 10.41, + "y": 1.04, + "color": "ff0000ff" + }, + { "name": "back-leg2", "parent": "back-leg1", "length": 41, "rotation": -4.07, "x": 34.57, "color": "ff0000ff" }, + { + "name": "back-leg3", + "parent": "back-leg1", + "length": 41, + "rotation": -5.24, + "x": 81.79, + "y": -2.29, + "color": "ff0000ff" + }, + { + "name": "back-leg4", + "parent": "back-leg1", + "length": 41, + "rotation": -16.6, + "x": 121.21, + "y": -11.27, + "color": "ff0000ff" + }, + { + "name": "back-leg5", + "parent": "back-leg1", + "length": 41, + "rotation": -32.36, + "x": 160.16, + "y": -24.86, + "color": "ff0000ff" + }, + { + "name": "back-leg6", + "parent": "back-leg1", + "length": 41, + "rotation": -30.76, + "x": 197.04, + "y": -39.98, + "color": "ff0000ff" + }, + { + "name": "back-leg7", + "parent": "back-leg1", + "length": 41, + "rotation": -30.63, + "x": 233.19, + "y": -57.32, + "color": "ff0000ff" + }, + { + "name": "back-leg8", + "parent": "back-leg1", + "length": 41, + "rotation": -33.79, + "x": 267.29, + "y": -77.39, + "color": "ff0000ff" + }, + { "name": "back-leg-ik-target", "parent": "root", "x": 46.15, "y": 8.68, "color": "ff3f00ff" }, + { + "name": "back-leg-ik1", + "parent": "hip", + "length": 140.17, + "rotation": -88.1, + "x": 9.63, + "y": -0.38, + "color": "ff0000ff" + }, + { + "name": "back-leg-ik2", + "parent": "back-leg-ik1", + "length": 148.96, + "rotation": -21.32, + "x": 140.17, + "y": -0.01, + "color": "ff0000ff" + }, + { "name": "belly", "parent": "spine1", "x": 35.94, "y": -37.69, "color": "ffbd00ff" }, + { "name": "butt", "parent": "hip", "x": -32.67, "y": -1.88, "color": "ffbd00ff" }, + { + "name": "front-arm1", + "parent": "spine4", + "length": 38.33, + "rotation": 118.58, + "x": 27.13, + "y": 4.9, + "transform": "noScale", + "color": "4eff00ff" + }, + { + "name": "front-arm2", + "parent": "front-arm1", + "length": 35.67, + "rotation": -0.44, + "x": 38.33, + "y": 0.01, + "color": "4eff00ff" + }, + { + "name": "front-arm3", + "parent": "front-arm2", + "length": 32.65, + "rotation": 14.45, + "x": 35.67, + "y": -0.02, + "color": "4eff00ff" + }, + { "name": "front-arm4", "parent": "front-arm3", "length": 29.18, "rotation": 13.89, "x": 32.65, "color": "4eff00ff" }, + { + "name": "front-arm5", + "parent": "front-arm4", + "length": 46.32, + "rotation": 16.09, + "x": 29.18, + "transform": "noScale", + "color": "4eff00ff" + }, + { "name": "front-arm-ik", "parent": "root", "x": -92.44, "y": 331.78, "color": "ff3f00ff" }, + { + "name": "front-arm-ik1", + "parent": "spine4", + "length": 69.56, + "rotation": 117.86, + "x": 27.36, + "y": 4.22, + "color": "50ff00ff" + }, + { "name": "front-arm-ik2", "parent": "front-arm-ik1", "length": 66.72, "rotation": 20.13, "x": 69.56, "color": "50ff00ff" }, + { + "name": "front-foot1", + "parent": "hip", + "length": 26.3, + "rotation": -10.98, + "x": -77.05, + "y": -285.04, + "transform": "onlyTranslation", + "color": "50ff00ff" + }, + { "name": "front-foot2", "parent": "front-foot1", "length": 29.12, "rotation": 9.61, "x": 26.3, "color": "50ff00ff" }, + { "name": "front-foot3", "parent": "front-foot2", "length": 23.49, "rotation": 8.91, "x": 29.12, "color": "50ff00ff" }, + { + "name": "front-leg1", + "parent": "hip", + "length": 37.2, + "rotation": -88.97, + "x": -23.57, + "y": -2, + "color": "4fff00ff" + }, + { + "name": "front-leg2", + "parent": "front-leg1", + "length": 37.2, + "rotation": 3.45, + "x": 33.75, + "y": 0.01, + "color": "4fff00ff" + }, + { + "name": "front-leg3", + "parent": "front-leg1", + "length": 37.2, + "rotation": -6.12, + "x": 74.4, + "y": -1.08, + "color": "4fff00ff" + }, + { + "name": "front-leg4", + "parent": "front-leg1", + "length": 37.2, + "rotation": -10.02, + "x": 111.4, + "y": -5.28, + "color": "4fff00ff" + }, + { + "name": "front-leg5", + "parent": "front-leg1", + "length": 37.2, + "rotation": -28.4, + "x": 147.76, + "y": -14.99, + "color": "4fff00ff" + }, + { + "name": "front-leg6", + "parent": "front-leg1", + "length": 37.2, + "rotation": -24.33, + "x": 182.41, + "y": -27.57, + "color": "4fff00ff" + }, + { + "name": "front-leg7", + "parent": "front-leg1", + "length": 37.2, + "rotation": -23, + "x": 216.44, + "y": -42.55, + "color": "4fff00ff" + }, + { + "name": "front-leg8", + "parent": "front-leg1", + "length": 37.2, + "rotation": -31.81, + "x": 248.61, + "y": -61.03, + "color": "4fff00ff" + }, + { "name": "front-leg-ik-target", "parent": "root", "x": -37.74, "y": 5.03, "color": "ff3f00ff" }, + { + "name": "front-leg-ik1", + "parent": "hip", + "length": 140.67, + "rotation": -89.23, + "x": -23.99, + "y": 1.89, + "color": "50ff00ff" + }, + { + "name": "front-leg-ik2", + "parent": "front-leg-ik1", + "length": 155.95, + "rotation": -21.5, + "x": 140.67, + "y": 0.03, + "color": "50ff00ff" + }, + { + "name": "neck1", + "parent": "spine4", + "length": 13.45, + "rotation": -30.66, + "x": 38.97, + "y": -0.83, + "color": "ffbd00ff" + }, + { "name": "neck2", "parent": "neck1", "length": 14.13, "rotation": -11.41, "x": 13.45, "color": "ffbd00ff" }, + { + "name": "head", + "parent": "neck2", + "length": 89.06, + "rotation": 6.98, + "x": 15.82, + "y": 0.22, + "transform": "noScale", + "color": "ffbd00ff" + } +], +"slots": [ + { "name": "back-arm", "bone": "root", "attachment": "back-arm" }, + { "name": "back-leg", "bone": "root", "attachment": "back-leg" }, + { "name": "body", "bone": "root", "attachment": "body" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "front-arm", "bone": "root", "attachment": "front-arm" }, + { "name": "back-leg-path", "bone": "hip", "attachment": "back-leg-path" }, + { "name": "front-leg-path", "bone": "hip", "attachment": "front-leg-path" }, + { "name": "front-arm-path", "bone": "spine4" }, + { "name": "rear-arm-path", "bone": "spine4" } +], +"ik": [ + { + "name": "back-arm-ik", + "order": 3, + "bones": [ "back-arm-ik1", "back-arm-ik2" ], + "target": "back-arm-ik-target", + "mix": 0 + }, + { + "name": "back-leg-ik", + "order": 0, + "bones": [ "back-leg-ik1", "back-leg-ik2" ], + "target": "back-leg-ik-target", + "bendPositive": false + }, + { + "name": "front-arm-ik", + "order": 2, + "bones": [ "front-arm-ik1", "front-arm-ik2" ], + "target": "front-arm-ik", + "mix": 0 + }, + { + "name": "front-leg-ik", + "order": 1, + "bones": [ "front-leg-ik1", "front-leg-ik2" ], + "target": "front-leg-ik-target", + "bendPositive": false + } +], +"transform": [ + { + "name": "back-foot-position", + "order": 8, + "bones": [ "back-foot1" ], + "target": "back-leg8", + "rotation": 108.8, + "x": 41.2, + "y": -0.03, + "scaleX": 5.0E-4, + "scaleY": -3.0E-4, + "shearY": 0.1, + "rotateMix": 0, + "scaleMix": 0 + }, + { + "name": "front-foot-position", + "order": 9, + "bones": [ "front-foot1" ], + "target": "front-leg8", + "rotation": 101.55, + "x": 38.92, + "y": -0.02, + "scaleX": 4.0E-4, + "scaleY": -3.0E-4, + "shearY": 0.1, + "rotateMix": 0, + "scaleMix": 0 + } +], +"path": [ + { + "name": "back-arm-path", + "order": 7, + "bones": [ "back-arm1", "back-arm2", "back-arm3", "back-arm4" ], + "target": "rear-arm-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.25, + "rotateMix": 0, + "translateMix": 0 + }, + { + "name": "back-leg-path", + "order": 4, + "bones": [ "back-leg1", "back-leg2", "back-leg3", "back-leg4", "back-leg5", "back-leg6", "back-leg7", "back-leg8" ], + "target": "back-leg-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + }, + { + "name": "front-arm-path", + "order": 6, + "bones": [ "front-arm1", "front-arm2", "front-arm3", "front-arm4" ], + "target": "front-arm-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.25, + "rotateMix": 0, + "translateMix": 0 + }, + { + "name": "front-leg-path", + "order": 5, + "bones": [ "front-leg1", "front-leg2", "front-leg3", "front-leg4", "front-leg5", "front-leg6", "front-leg7", "front-leg8" ], + "target": "front-leg-path", + "spacingMode": "percent", + "rotateMode": "chainScale", + "spacing": 0.125 + } +], +"skins": { + "default": { + "back-arm": { + "back-arm": { + "type": "mesh", + "uvs": [ 0.74522, 0.00989, 0.64111, 0.05762, 0.56303, 0.1559, 0.42509, 0.25886, 0.28974, 0.359, 0.22988, 0.49565, 0.21166, 0.60797, 0.21166, 0.69782, 0.16481, 0.78674, 0.14139, 0.84757, 0.02427, 0.88501, 0.0529, 0.91871, 0.37824, 0.98797, 0.60468, 0.98235, 0.6307, 0.9056, 0.73481, 0.87752, 0.63591, 0.81762, 0.55262, 0.74181, 0.38084, 0.69876, 0.37824, 0.60797, 0.39906, 0.50876, 0.51358, 0.38521, 0.66194, 0.28881, 0.85454, 0.18398, 0.97687, 0.07541, 0.9144, 0.00989 ], + "triangles": [ 11, 9, 12, 9, 8, 12, 12, 8, 18, 13, 12, 14, 12, 18, 17, 18, 8, 7, 14, 12, 17, 11, 10, 9, 14, 16, 15, 14, 17, 16, 7, 19, 18, 7, 6, 19, 6, 5, 19, 19, 5, 20, 5, 4, 20, 20, 4, 21, 4, 3, 21, 21, 3, 22, 3, 2, 22, 22, 2, 23, 2, 1, 23, 23, 1, 24, 1, 0, 24, 0, 25, 24 ], + "vertices": [ 1, 6, -7.68, -11.48, 1, 1, 6, 4.09, -13.63, 1, 1, 6, 23.49, -9.36, 1, 1, 7, 13.44, -9.23, 1, 2, 7, 35.2, -9.62, 0.50649, 8, -0.58, -9.66, 0.49351, 1, 8, 26.04, -6.39, 1, 1, 9, 14.15, -6.11, 1, 2, 9, 31.54, -5.57, 0.66493, 10, -3.33, -5.03, 0.33507, 1, 10, 13.08, -11.25, 1, 1, 10, 24.41, -14.89, 1, 1, 10, 30.15, -24.52, 1, 1, 10, 36.93, -23.54, 1, 1, 10, 54.08, -2.33, 1, 1, 10, 55.73, 14.15, 1, 1, 10, 41.39, 18.48, 1, 1, 10, 37.29, 26.87, 1, 1, 10, 24.66, 21.67, 1, 1, 10, 9.18, 18.1, 1, 2, 9, 31.33, 6.78, 0.47881, 10, -1.11, 7.12, 0.52119, 1, 9, 13.77, 6.04, 1, 2, 8, 24.98, 6.17, 0.89218, 9, -5.48, 6.96, 0.10782, 2, 7, 32.6, 7.29, 0.59842, 8, -0.32, 7.45, 0.40158, 1, 7, 11.08, 8.85, 1, 1, 6, 17.89, 11.88, 1, 1, 6, -4.82, 9.46, 1, 1, 6, -13.69, -0.69, 1 ], + "hull": 26, + "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, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 46, 48, 48, 50, 0, 50, 2, 48, 4, 46, 6, 44, 8, 42, 10, 40, 12, 38, 14, 36 ], + "width": 72, + "height": 202 + } + }, + "back-leg": { + "back-leg": { + "type": "mesh", + "uvs": [ 0.502, 0.01179, 0.36076, 0.06379, 0.4057, 0.15046, 0.44743, 0.23916, 0.47953, 0.32991, 0.51163, 0.42269, 0.52127, 0.50629, 0.48274, 0.58888, 0.41212, 0.66025, 0.3126, 0.74182, 0.2163, 0.81625, 0.1232, 0.89272, 0.00763, 0.97429, 0.29655, 0.98958, 0.47407, 0.99222, 0.64004, 0.99468, 0.80989, 0.9896, 0.91291, 0.98652, 1, 0.95797, 0.8333, 0.94681, 0.71067, 0.9386, 0.57123, 0.92031, 0.41533, 0.89986, 0.3447, 0.89272, 0.36885, 0.87178, 0.42817, 0.82033, 0.502, 0.74794, 0.58226, 0.66943, 0.6593, 0.59092, 0.72993, 0.50528, 0.76524, 0.42167, 0.78129, 0.32481, 0.78771, 0.23406, 0.78771, 0.13924, 0.72351, 0.03728, 0.60152, 0.00567, 0.82117, 0.96898, 0.67873, 0.96396, 0.52111, 0.9574, 0.35936, 0.94214, 0.19388, 0.92922, 0.25375, 0.88159, 0.32792, 0.8184 ], + "triangles": [ 36, 20, 19, 17, 19, 18, 16, 37, 36, 17, 16, 36, 17, 36, 19, 38, 22, 21, 37, 21, 20, 38, 21, 37, 37, 20, 36, 15, 38, 37, 14, 38, 15, 15, 37, 16, 39, 23, 22, 40, 23, 39, 39, 22, 38, 13, 40, 39, 12, 40, 13, 14, 39, 38, 13, 39, 14, 9, 8, 26, 25, 42, 9, 10, 9, 42, 26, 25, 9, 24, 42, 25, 41, 10, 42, 41, 42, 24, 11, 10, 41, 23, 41, 24, 40, 11, 41, 40, 41, 23, 12, 11, 40, 26, 8, 27, 6, 5, 29, 28, 6, 29, 7, 6, 28, 27, 7, 28, 8, 7, 27, 29, 5, 30, 31, 5, 4, 30, 5, 31, 32, 4, 3, 31, 4, 32, 34, 1, 0, 34, 0, 35, 2, 1, 34, 2, 34, 33, 3, 2, 33, 32, 3, 33 ], + "vertices": [ 1, 17, -19.79, -5.67, 1, 2, 17, -5.62, -22.28, 0.83363, 18, -41.07, -23.3, 0.16637, 2, 17, 22.31, -21.98, 0.65187, 18, -13.17, -21.89, 0.34813, 3, 17, 50.83, -22.11, 0.3172, 18, 15.33, -20.87, 0.43086, 19, -19.67, -21.09, 0.25193, 4, 17, 79.85, -23.29, 0.10792, 18, 44.37, -20.89, 0.35417, 19, 9.3, -19.2, 0.3192, 20, -25.22, -20.06, 0.21872, 4, 18, 74.06, -20.98, 0.16486, 19, 38.93, -17.34, 0.32776, 20, 4.09, -15.38, 0.29831, 21, -30.1, -17.16, 0.20907, 3, 19, 65.54, -17.61, 0.17523, 20, 30.6, -13.11, 0.39173, 21, -4.12, -11.42, 0.43304, 3, 20, 57.03, -15.71, 0.19718, 21, 22.43, -10.53, 0.52971, 22, -12.97, -9.81, 0.27311, 3, 21, 46.05, -13.47, 0.40991, 22, 10.84, -10.17, 0.34747, 23, -24.93, -10.51, 0.24261, 3, 21, 73.39, -18.69, 0.19432, 22, 38.58, -12.41, 0.37177, 23, 2.9, -10.99, 0.43391, 3, 22, 64.06, -14.98, 0.16664, 23, 28.49, -11.94, 0.56756, 24, -7.53, -11.48, 0.2658, 3, 23, 54.58, -12.37, 0.52114, 24, 18.56, -10.93, 0.36168, 14, -3.08, 24.95, 0.11718, 4, 23, 82.97, -14.36, 0.35144, 24, 47.01, -11.86, 0.29521, 14, -13.07, -1.67, 0.25118, 15, -46.3, 1.83, 0.10216, 1, 14, 16.37, -4.67, 1, 2, 14, 34.32, -4.37, 0.53487, 15, 0.74, -4.44, 0.46513, 3, 14, 51.1, -4.08, 0.14611, 15, 17.5, -5.42, 0.54314, 16, -15.51, -2.75, 0.31075, 2, 15, 34.67, -4.01, 0.40714, 16, 1.65, -4.36, 0.59286, 2, 15, 45.09, -3.16, 0.25726, 16, 12.05, -5.34, 0.74274, 2, 15, 53.99, 5.81, 0.25311, 16, 22.38, 1.94, 0.74689, 2, 15, 37.19, 9.56, 0.4029, 16, 6.5, 8.57, 0.5971, 3, 14, 57.07, 14.17, 0.13352, 15, 24.84, 12.33, 0.54644, 16, -5.18, 13.44, 0.32004, 4, 23, 47.09, 33.11, 0.13131, 14, 42.64, 19.08, 0.26349, 15, 10.82, 18.31, 0.49746, 16, -17.94, 21.78, 0.10773, 4, 23, 46.46, 16.09, 0.21159, 24, 9.37, 17.21, 0.1068, 14, 26.51, 24.57, 0.44951, 15, -4.85, 25.01, 0.23211, 3, 23, 46.8, 8.62, 0.40111, 24, 10, 9.75, 0.24543, 14, 19.24, 26.38, 0.35346, 3, 23, 39.71, 8.61, 0.5825, 24, 2.91, 9.47, 0.30792, 14, 21.25, 33.18, 0.10958, 3, 22, 59.17, 5.89, 0.21955, 23, 22.27, 8.58, 0.57946, 24, -14.51, 8.8, 0.20099, 3, 21, 71.84, 0.47, 0.21583, 22, 34.96, 6.47, 0.32263, 23, -1.92, 7.63, 0.46154, 3, 21, 45.81, 3.96, 0.40554, 22, 8.71, 7.12, 0.38602, 23, -28.17, 6.61, 0.20845, 3, 20, 56.79, 2.13, 0.25409, 21, 19.83, 7.12, 0.53006, 22, -17.46, 7.46, 0.21585, 3, 19, 66.18, 3.45, 0.22414, 20, 29.23, 7.92, 0.34135, 21, -8.25, 9.24, 0.43451, 4, 18, 76.6, 4.51, 0.19364, 19, 39.78, 8.26, 0.28887, 20, 2.49, 10.19, 0.33579, 21, -35.06, 7.97, 0.1817, 4, 17, 82.88, 7.08, 0.11658, 18, 46.18, 9.58, 0.35727, 19, 9.09, 11.32, 0.35745, 20, -28.36, 10.3, 0.16869, 3, 17, 54.46, 12.11, 0.35357, 18, 17.57, 13.46, 0.44494, 19, -19.71, 13.32, 0.20149, 2, 17, 24.65, 16.69, 0.65438, 18, -12.4, 16.85, 0.34562, 2, 17, -8.38, 15.21, 0.85331, 18, -45.34, 14.05, 0.14669, 1, 17, -20.19, 4.56, 1, 2, 15, 35.89, 2.53, 0.4051, 16, 3.99, 1.87, 0.5949, 3, 14, 54.38, 5.92, 0.13921, 15, 21.52, 4.3, 0.54495, 16, -9.85, 6.12, 0.31584, 2, 14, 37.79, 7.63, 0.44939, 15, 5.1, 7.27, 0.55061, 3, 23, 65.39, 20.7, 0.11858, 14, 20.6, 11.35, 0.75134, 15, -11.76, 12.27, 0.13008, 3, 23, 65.41, 1.81, 0.3968, 24, 24.3, 0.23, 0.28258, 14, 2.07, 14.98, 0.32063, 3, 23, 48.01, 0.08, 0.55395, 24, 6.94, -0.33, 0.33293, 14, 3.38, 30.47, 0.11312, 3, 22, 65.95, -2.97, 0.19447, 23, 24.96, -1.58, 0.57382, 24, -15.99, -0.43, 0.23171 ], + "hull": 36, + "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, 34, 36, 44, 46, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 62, 64, 64, 66, 66, 68, 68, 70, 0, 70, 4, 66, 2, 68, 40, 42, 42, 44, 26, 28, 28, 30, 46, 48, 48, 50, 36, 38, 38, 40, 30, 32, 32, 34, 18, 52, 16, 54, 14, 56, 12, 58, 10, 60, 8, 62, 6, 64, 32, 72, 72, 38, 30, 74, 74, 40, 72, 74, 28, 76, 76, 42, 74, 76, 26, 78, 78, 44, 76, 78, 24, 80, 80, 46, 78, 80, 22, 82, 82, 48, 80, 82, 20, 84, 84, 50, 82, 84 ], + "width": 100, + "height": 318 + } + }, + "back-leg-path": { + "back-leg-path": { + "type": "path", + "lengths": [ 137.84, 291.79, 641.23 ], + "vertexCount": 9, + "vertices": [ 1, 26, -43.15, 0.61, 1, 1, 26, -1.31, 0.44, 1, 1, 26, 63.08, -0.19, 1, 2, 26, 72.07, 13.66, 0.5, 27, -69.12, -16.08, 0.5, 2, 26, 135.75, 0.27, 0.5, 27, -3.96, -2.03, 0.5, 2, 26, 202.92, -15.14, 0.5, 27, 65, 14.1, 0.5, 1, 27, 71.09, -2.04, 1, 1, 27, 149.06, -1.74, 1, 1, 26, 368.48, -1.81, 1 ] + } + }, + "body": { + "body": { + "type": "mesh", + "uvs": [ 0.35966, 0.01351, 0.26864, 0.04108, 0.26204, 0.0954, 0.34119, 0.14478, 0.39792, 0.19457, 0.40451, 0.24272, 0.38077, 0.27893, 0.3597, 0.3004, 0.34119, 0.31926, 0.34989, 0.34326, 0.35834, 0.36658, 0.36552, 0.40164, 0.37234, 0.43499, 0.38397, 0.4944, 0.3956, 0.55971, 0.39884, 0.59858, 0.40142, 0.62955, 0.40216, 0.65662, 0.3461, 0.71564, 0.27077, 0.78176, 0.2201, 0.82128, 0.17618, 0.85553, 0.13115, 0.88833, 0.08238, 0.92385, 0.00342, 0.9796, 0.18836, 0.99127, 0.32172, 0.99284, 0.46266, 0.99451, 0.61643, 0.98608, 0.71618, 0.97182, 0.61851, 0.95821, 0.48967, 0.95043, 0.39458, 0.94083, 0.27772, 0.92904, 0.23408, 0.9232, 0.26692, 0.89774, 0.30681, 0.86681, 0.34203, 0.83415, 0.38369, 0.7955, 0.45642, 0.72874, 0.52708, 0.66845, 0.56032, 0.63345, 0.57541, 0.60109, 0.59357, 0.56214, 0.61643, 0.49732, 0.63513, 0.43963, 0.64345, 0.40462, 0.77081, 0.39011, 0.84585, 0.37025, 0.90983, 0.35331, 0.9674, 0.31915, 0.97302, 0.28585, 0.96448, 0.23351, 0.8952, 0.1681, 0.79346, 0.12643, 0.75179, 0.10879, 0.71799, 0.09448, 0.66817, 0.07237, 0.61343, 0.04807, 0.47868, 0.01411, 0.49846, 0.38826, 0.66315, 0.34728, 0.67333, 0.30664, 0.8188, 0.29655, 0.80971, 0.24505, 0.72829, 0.17902, 0.68147, 0.13902, 0.59191, 0.09711, 0.3904, 0.09012, 0.53695, 0.14981, 0.57563, 0.19616, 0.64483, 0.25077, 0.79855, 0.33476, 0.61751, 0.97167, 0.4773, 0.97061, 0.23795, 0.95673, 0.15272, 0.92355, 0.14158, 0.94886, 0.23861, 0.86092, 0.51732, 0.30354, 0.50696, 0.34527, 0.50634, 0.43735, 0.50334, 0.4959, 0.51086, 0.32558, 0.50355, 0.41057, 0.19543, 0.89241, 0.36492, 0.9641 ], + "triangles": [ 2, 1, 68, 68, 1, 58, 58, 1, 59, 1, 0, 59, 69, 67, 66, 3, 68, 69, 69, 68, 67, 3, 2, 68, 66, 56, 55, 66, 67, 56, 67, 57, 56, 67, 58, 57, 67, 68, 58, 5, 70, 71, 71, 70, 65, 5, 4, 70, 70, 66, 65, 4, 69, 70, 70, 69, 66, 4, 3, 69, 65, 54, 53, 65, 66, 54, 66, 55, 54, 46, 61, 47, 46, 80, 61, 80, 83, 61, 61, 62, 72, 61, 83, 62, 80, 9, 83, 9, 8, 83, 83, 79, 62, 8, 7, 83, 83, 7, 79, 71, 6, 5, 7, 6, 79, 79, 6, 62, 6, 71, 62, 47, 72, 48, 47, 61, 72, 48, 72, 49, 49, 72, 50, 72, 63, 50, 72, 62, 63, 50, 63, 51, 62, 64, 63, 63, 52, 51, 63, 64, 52, 71, 65, 64, 64, 53, 52, 64, 65, 53, 62, 71, 64, 26, 86, 27, 27, 74, 28, 27, 86, 74, 28, 73, 29, 28, 74, 73, 73, 30, 29, 74, 31, 73, 73, 31, 30, 86, 32, 74, 74, 32, 31, 25, 75, 26, 26, 75, 86, 24, 77, 25, 25, 77, 75, 24, 23, 77, 75, 33, 86, 86, 33, 32, 75, 77, 33, 77, 34, 33, 77, 76, 34, 77, 23, 76, 23, 22, 76, 76, 85, 34, 76, 22, 85, 34, 85, 35, 85, 78, 35, 22, 21, 85, 35, 78, 36, 85, 21, 78, 37, 36, 20, 21, 20, 78, 36, 78, 20, 20, 19, 37, 37, 19, 38, 19, 18, 38, 38, 18, 39, 18, 17, 39, 39, 17, 40, 41, 40, 16, 40, 17, 16, 42, 41, 15, 41, 16, 15, 43, 42, 14, 42, 15, 14, 14, 82, 43, 43, 82, 44, 14, 13, 82, 82, 81, 44, 44, 81, 45, 82, 13, 81, 13, 12, 81, 46, 45, 84, 12, 84, 81, 45, 81, 84, 12, 11, 84, 11, 60, 84, 84, 60, 46, 60, 80, 46, 11, 10, 60, 60, 10, 80, 10, 9, 80 ], + "vertices": [ 1, 5, 30.85, 2.45, 1, 2, 4, 60.42, 12.42, 0.24859, 5, 22.32, 18.18, 0.75141, 2, 4, 39.47, 25.25, 0.44332, 5, -1.06, 25.72, 0.55668, 3, 3, 48.03, 29.46, 0.37431, 4, 14.55, 26.45, 0.47619, 5, -25.57, 21.02, 0.1495, 3, 2, 50.36, 32.58, 0.11243, 3, 24.29, 26.8, 0.64611, 4, -8.99, 30.5, 0.24146, 3, 41, -45.22, -8.81, 0.10611, 2, 28.69, 30.4, 0.49533, 3, 2.89, 30.85, 0.39856, 3, 41, -28.91, -12.45, 0.25802, 2, 12.15, 32.8, 0.60894, 3, -12.29, 37.84, 0.13304, 3, 41, -18.5, -14.05, 0.28714, 2, 2.34, 35.98, 0.51935, 29, -7.6, 18.95, 0.19351, 4, 41, -10.79, -18.35, 0.28478, 28, -42.03, 75.56, 0.10295, 2, -6.36, 37.32, 0.37494, 29, -10.2, 10.26, 0.23733, 3, 41, 0.92, -16.96, 0.34087, 2, -17.28, 35.45, 0.32141, 29, -8.2, -0.67, 0.33772, 4, 41, 10.64, -16.32, 0.32691, 42, -24.05, -14.9, 0.16082, 2, -27.58, 33.67, 0.14432, 29, -6.37, -11.05, 0.36794, 4, 41, 28.5, -15.63, 0.24237, 42, -9.55, -15.11, 0.27028, 43, -45.51, -19.12, 0.12132, 29, -3.65, -27.88, 0.36603, 4, 41, 41.59, -14.89, 0.21761, 42, 6.93, -15.35, 0.33285, 43, -26.85, -17.49, 0.20377, 29, -1.3, -43.28, 0.24577, 3, 42, 33.83, -15.81, 0.47179, 43, 0, -15.85, 0.42627, 44, -31.79, -17.82, 0.10194, 3, 42, 63.39, -16.48, 0.2126, 43, 29.52, -14.22, 0.42737, 44, -2.43, -14.39, 0.36002, 3, 43, 49.79, -15.51, 0.30179, 44, 14.85, -13.08, 0.47127, 45, -21.15, -15.64, 0.22695, 3, 43, 61.1, -13.41, 0.15443, 44, 29.03, -11.65, 0.50848, 45, -3.27, -12.45, 0.33708, 2, 44, 41.24, -10.8, 0.28079, 45, 8.41, -8.79, 0.71921, 2, 45, 36.24, -8.59, 0.56513, 46, -3.02, -8.84, 0.43487, 3, 45, 67.93, -10.06, 0.16322, 46, 28.69, -7.82, 0.53712, 47, -8.12, -7.7, 0.29966, 3, 46, 47.76, -8.47, 0.40201, 47, 10.97, -7.9, 0.45131, 48, -26.34, -6.21, 0.14668, 3, 46, 64.62, -8.06, 0.25017, 47, 27.8, -8.4, 0.46039, 48, -12.77, -8.82, 0.28944, 4, 46, 79.13, -10.24, 0.11858, 47, 42.33, -8.03, 0.26981, 48, 4.53, -8.38, 0.48104, 38, -1.56, 35.6, 0.13057, 2, 48, 20.84, -9.2, 0.728, 38, -5.38, 19.56, 0.272, 1, 38, -11.5, -7.3, 1, 4, 48, 43.23, 16.27, 0.2746, 38, 15.1, -7.51, 0.48158, 39, -12.29, -5.54, 0.12942, 40, -41.77, 0.94, 0.11439, 4, 48, 37, 33.94, 0.18804, 38, 33.71, -4.58, 0.34252, 39, 6.54, -5.76, 0.18297, 40, -23.2, -2.19, 0.28647, 3, 38, 53.35, -1.59, 0.21646, 39, 26.41, -6.09, 0.26516, 40, -3.62, -5.59, 0.51838, 2, 39, 47.99, -1.76, 0.15753, 40, 18.37, -4.66, 0.84247, 1, 40, 33.16, -0.12, 1, 2, 39, 47.98, 10.84, 0.17387, 40, 20.32, 7.79, 0.82613, 4, 48, 9.83, 48.43, 0.17572, 38, 53.29, 18.7, 0.17038, 39, 29.73, 13.92, 0.136, 40, 2.77, 13.66, 0.5179, 4, 48, 11.45, 34.58, 0.26313, 38, 39.26, 20.56, 0.23037, 39, 16.21, 18.1, 0.15679, 40, -9.94, 19.88, 0.3497, 4, 48, 12.41, 17.13, 0.37057, 38, 22.11, 22.5, 0.30409, 39, -0.38, 22.88, 0.18235, 40, -25.59, 27.17, 0.14299, 3, 48, 12.34, 10.44, 0.4464, 38, 15.56, 23.92, 0.2976, 39, -6.59, 25.37, 0.256, 5, 46, 75.96, 9.07, 0.10563, 47, 38.15, 11.09, 0.25495, 48, 1.65, 10.97, 0.33578, 38, 17.99, 34.75, 0.16323, 39, -2.39, 35.65, 0.14041, 3, 46, 62.62, 10.94, 0.26064, 47, 26.05, 10.62, 0.49792, 48, -15.15, 10.14, 0.24144, 3, 46, 47.27, 9.67, 0.40348, 47, 9.53, 10.2, 0.4787, 48, -26.59, 11.94, 0.11781, 3, 45, 69.23, 6.98, 0.16044, 46, 28.64, 9.27, 0.53936, 47, -7.95, 9.39, 0.3002, 2, 45, 37.36, 8.01, 0.57649, 46, -3.21, 7.8, 0.42351, 2, 44, 45.49, 7.11, 0.2935, 45, 8.38, 9.61, 0.7065, 3, 43, 62.85, 9, 0.15446, 44, 29.41, 10.82, 0.49324, 45, -8.13, 9.49, 0.3523, 3, 43, 52.15, 9.28, 0.30575, 44, 12.84, 11.74, 0.46742, 45, -26.12, 8.77, 0.22683, 3, 42, 66.66, 11.26, 0.21798, 43, 30.62, 13.69, 0.42844, 44, -3.05, 13.54, 0.35358, 3, 42, 37.7, 16.76, 0.48246, 43, 1.32, 16.92, 0.41752, 44, -32.5, 14.97, 0.10002, 4, 41, 44.35, 22.12, 0.2346, 42, 11.91, 21.43, 0.43853, 43, -24.76, 19.57, 0.2068, 2, -58.29, -7.2, 0.12007, 4, 41, 28.55, 23.57, 0.31081, 42, -3.77, 23.84, 0.19158, 28, -76.76, 29.23, 0.21531, 2, -42.43, -7.46, 0.28231, 3, 41, 22.31, 41.64, 0.18196, 28, -69.84, 12.47, 0.43955, 2, -34.84, -25, 0.37848, 3, 41, 19.78, 51.42, 0.1392, 28, -59.84, 2.53, 0.47896, 2, -23.9, -35.17, 0.38184, 3, 41, 6.03, 61.54, 0.10543, 28, -52.71, -5.88, 0.51007, 2, -17.11, -43.61, 0.38449, 2, 28, -37.16, -13.14, 0.67427, 2, -1.22, -50.83, 0.32573, 1, 28, -22.09, -13.06, 1, 2, 28, 1.45, -10.49, 0.89019, 2, 37.4, -48.18, 0.10981, 3, 28, 30.41, 0.97, 0.4302, 2, 66.35, -36.73, 0.16237, 3, 19.98, -44.2, 0.40743, 2, 3, 41.58, -34.52, 0.68165, 4, -9.45, -33.21, 0.31835, 2, 3, 50.69, -30.62, 0.51066, 4, 0.38, -31.99, 0.48934, 3, 3, 58.07, -27.45, 0.26484, 4, 8.35, -31.01, 0.61475, 5, -18.05, -36.28, 0.12041, 3, 3, 69.4, -22.88, 0.17396, 4, 20.51, -29.78, 0.5644, 5, -6.53, -32.23, 0.26164, 2, 4, 33.86, -28.42, 0.29085, 5, 6.13, -27.77, 0.70915, 2, 4, 56.55, -19.38, 0.17381, 5, 26.05, -13.63, 0.82619, 5, 41, 20.79, 3.26, 0.38867, 42, -12.74, 4.03, 0.17698, 28, -69.84, 50.18, 0.10105, 2, -36.22, 13.38, 0.19581, 29, 13.98, -19.25, 0.13749, 4, 41, 2.69, 26.81, 0.26409, 28, -50.86, 29.21, 0.2337, 2, -16.39, -8.73, 0.34628, 29, 35.79, -0.49, 0.15592, 3, 41, -15.65, 28.57, 0.15678, 28, -33.54, 28.78, 0.2916, 2, 2.03, -9.11, 0.55162, 1, 28, -28.18, 8.37, 1, 1, 28, -5.01, 11, 1, 3, 28, 24.12, 24.18, 0.12052, 2, 60.07, -13.52, 0.21384, 3, 20.53, -20.16, 0.66564, 2, 3, 39.64, -17.85, 0.59513, 4, -6.68, -16.66, 0.40487, 3, 3, 60.96, -9.87, 0.26252, 4, 16.02, -14.92, 0.55541, 5, -14.39, -18.85, 0.18206, 2, 4, 32.69, 8.3, 0.58729, 5, -3.66, 7.65, 0.41271, 2, 3, 39.53, 3.1, 0.47136, 4, -0.95, 3.5, 0.52864, 1, 3, 17.89, 2.56, 1, 2, 2, 27.01, -3.64, 0.67245, 3, -8.37, -1.32, 0.32755, 3, 41, -2.63, 46, 0.10033, 28, -45.42, 10.27, 0.52612, 2, -9.64, -27.47, 0.37356, 2, 39, 47.98, 4.75, 0.16598, 40, 19.38, 1.78, 0.83402, 4, 48, 19.56, 50.48, 0.12624, 38, 53.31, 9.51, 0.16908, 39, 28.22, 4.86, 0.24846, 40, -0.13, 4.94, 0.45621, 4, 48, 26.31, 16.82, 0.32786, 38, 18.97, 9.25, 0.38308, 39, -5.69, 10.34, 0.1588, 40, -32.78, 15.61, 0.13026, 2, 48, 16.97, -0.03, 0.66865, 38, 4.23, 21.71, 0.33135, 3, 48, 28.1, 2.86, 0.4826, 38, 4.92, 10.15, 0.31302, 39, -19.39, 13.57, 0.20437, 3, 46, 63.22, -0.58, 0.21069, 47, 25.96, 0.79, 0.49387, 48, -11.02, 1.48, 0.29545, 3, 41, -14.84, 8.09, 0.24448, 28, -33.35, 51.23, 0.16325, 2, 2.6, 13.54, 0.59227, 4, 41, 3.38, 4.96, 0.28616, 28, -51.81, 51.13, 0.16477, 2, -15.87, 13.44, 0.31892, 29, 13.85, -0.53, 0.23015, 4, 41, 46.09, 3.59, 0.2409, 42, 9.06, 3.1, 0.41152, 43, -28.46, 0.64, 0.21862, 29, 17.5, -43.07, 0.12896, 3, 42, 37.23, 1.25, 0.47745, 43, -0.08, 1.26, 0.42163, 44, -36.26, -5.26, 0.10093, 4, 41, -5.23, 6.3, 0.25594, 28, -43.11, 51.32, 0.15579, 2, -7.17, 13.63, 0.42092, 29, 14.17, 8.17, 0.16735, 4, 41, 33.04, 3.37, 0.36685, 42, -3.97, 3.61, 0.31093, 2, -45.33, 9.83, 0.17307, 29, 15.76, -30.15, 0.14915, 4, 46, 77.51, -1.16, 0.11479, 47, 40.24, 0.95, 0.26889, 48, 3.05, 0.72, 0.44973, 38, 7.66, 35.33, 0.16659, 4, 48, 22.73, 34.68, 0.22091, 38, 37.18, 9.39, 0.26956, 39, 12.3, 7.43, 0.20636, 40, -15.46, 9.95, 0.30317 ], + "hull": 60, + "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 24, 26, 26, 28, 32, 34, 34, 36, 36, 38, 46, 48, 48, 50, 54, 56, 56, 58, 58, 60, 60, 62, 66, 68, 76, 78, 78, 80, 80, 82, 86, 88, 88, 90, 90, 92, 92, 94, 98, 100, 100, 102, 102, 104, 104, 106, 106, 108, 116, 118, 0, 118, 92, 120, 120, 20, 28, 86, 82, 32, 34, 80, 78, 36, 76, 38, 12, 124, 102, 126, 126, 124, 126, 128, 128, 130, 130, 132, 132, 134, 112, 134, 134, 136, 136, 4, 2, 116, 6, 138, 138, 132, 8, 140, 140, 130, 10, 142, 142, 128, 128, 104, 130, 106, 132, 108, 122, 92, 100, 144, 144, 122, 126, 144, 144, 94, 112, 114, 114, 116, 108, 110, 110, 112, 16, 18, 18, 20, 20, 22, 22, 24, 12, 14, 14, 16, 122, 124, 94, 96, 96, 98, 56, 146, 146, 60, 54, 148, 148, 62, 146, 148, 50, 150, 150, 66, 46, 152, 152, 68, 154, 152, 154, 48, 42, 156, 156, 72, 14, 158, 158, 124, 18, 160, 160, 122, 160, 120, 24, 162, 162, 90, 26, 164, 164, 88, 162, 164, 16, 166, 160, 166, 166, 158, 166, 124, 162, 168, 168, 120, 168, 22, 168, 92, 38, 40, 40, 42, 72, 74, 74, 76, 40, 74, 42, 44, 44, 46, 152, 170, 170, 156, 44, 170, 68, 70, 70, 72, 170, 70, 62, 64, 64, 66, 148, 172, 172, 150, 64, 172, 50, 52, 52, 54, 172, 52, 154, 66, 150, 154, 28, 30, 30, 32, 82, 84, 84, 86, 30, 84 ], + "width": 141, + "height": 452 + } + }, + "front-arm": { + "front-arm": { + "type": "mesh", + "uvs": [ 0.71401, 0.00566, 0.67108, 0.08129, 0.60222, 0.15434, 0.53633, 0.21683, 0.44558, 0.28705, 0.34898, 0.35134, 0.29097, 0.38941, 0.25238, 0.41472, 0.22423, 0.44271, 0.19483, 0.47193, 0.15998, 0.50658, 0.09138, 0.59568, 0.05498, 0.70866, 0.02988, 0.81366, 0.01049, 0.94262, 0.10495, 0.98985, 0.25391, 0.97421, 0.31482, 0.88907, 0.28834, 0.82869, 0.13607, 0.74572, 0.14335, 0.71488, 0.18317, 0.62253, 0.25217, 0.54221, 0.29538, 0.50981, 0.33787, 0.47795, 0.38452, 0.45013, 0.43581, 0.41953, 0.54711, 0.3655, 0.68845, 0.29832, 0.74855, 0.35527, 0.85874, 0.38229, 0.99674, 0.37645, 0.95354, 0.33244, 0.91356, 0.29172, 0.87464, 0.25208, 0.83759, 0.21434, 0.78083, 0.12598, 0.78194, 0.0683, 0.6322, 0.23719, 0.66925, 0.15784, 0.75533, 0.20967, 0.7161, 0.11137 ], + "triangles": [ 30, 29, 33, 30, 32, 31, 40, 41, 36, 39, 41, 40, 40, 36, 35, 38, 39, 40, 28, 38, 40, 34, 28, 40, 34, 40, 35, 28, 34, 33, 29, 28, 33, 30, 33, 32, 41, 1, 0, 37, 41, 0, 36, 41, 37, 39, 1, 41, 39, 2, 1, 19, 12, 20, 13, 12, 19, 18, 15, 19, 16, 18, 17, 15, 13, 19, 15, 14, 13, 15, 18, 16, 21, 10, 22, 11, 10, 21, 20, 11, 21, 12, 11, 20, 9, 8, 23, 22, 9, 23, 10, 9, 22, 26, 5, 4, 25, 5, 26, 6, 5, 25, 24, 6, 25, 7, 6, 24, 23, 7, 24, 8, 7, 23, 38, 2, 39, 3, 2, 38, 27, 3, 38, 27, 38, 28, 4, 3, 27, 26, 4, 27 ], + "vertices": [ 1, 53, 21.67, 6.08, 1, 2, 52, 18.13, 3.37, 0.16553, 53, 3.92, 4.24, 0.83447, 3, 30, -6.12, -15.24, 0.20965, 52, -0.05, 8.86, 0.53629, 5, 43.44, 6.81, 0.25406, 1, 30, 10.36, -12.02, 1, 2, 30, 30.62, -10.09, 0.88822, 31, -7.63, -10.15, 0.11178, 2, 30, 50.57, -9.69, 0.30996, 31, 12.31, -9.61, 0.69004, 2, 31, 24.21, -9.37, 0.86563, 32, -13.43, -6.2, 0.13437, 2, 31, 32.12, -9.22, 0.73143, 32, -5.73, -8.02, 0.26857, 2, 31, 39.35, -7.59, 0.54007, 32, 1.68, -8.25, 0.45993, 2, 31, 46.9, -5.88, 0.29037, 32, 9.42, -8.48, 0.70963, 2, 32, 18.59, -8.76, 0.66539, 33, -15.76, -5.13, 0.33461, 1, 33, 6.03, -8.58, 1, 2, 33, 31.42, -5.98, 0.39257, 34, 0.49, -6.36, 0.60743, 1, 34, 23.8, -9.31, 1, 1, 34, 52.37, -11.28, 1, 1, 34, 62.39, 2.72, 1, 1, 34, 58.29, 24.21, 1, 1, 34, 39.22, 32.48, 1, 1, 34, 26, 28.25, 1, 1, 34, 8.33, 5.63, 1, 2, 33, 28.81, 6.64, 0.48313, 34, 1.49, 6.49, 0.51687, 1, 33, 7.61, 5.9, 1, 3, 31, 51.67, 11.07, 0.10767, 32, 18.26, 6.75, 0.559, 33, -12.35, 10.01, 0.33333, 2, 31, 42.19, 10.25, 0.31464, 32, 8.88, 8.32, 0.68536, 2, 31, 32.87, 9.45, 0.59184, 32, -0.35, 9.86, 0.40816, 2, 31, 23.73, 9.7, 0.83036, 32, -9.14, 12.39, 0.16964, 2, 30, 52.08, 9.88, 0.29921, 31, 13.68, 9.98, 0.70079, 2, 30, 32.19, 12.6, 0.84687, 31, -6.24, 12.55, 0.15313, 1, 5, 9.42, 3.39, 1, 2, 5, -5.05, -1.59, 0.472, 4, 29.16, -0.35, 0.528, 1, 4, 16.13, -11.36, 1, 1, 4, 7.46, -29.44, 1, 2, 5, -8.23, -31.57, 0.5193, 4, 19, -28.74, 0.4807, 1, 5, 2, -28.43, 1, 1, 5, 11.96, -25.37, 1, 1, 5, 21.44, -22.45, 1, 3, 52, 12.7, -14.55, 0.25482, 53, 2.14, -14.4, 0.32231, 5, 42.47, -19.82, 0.42287, 1, 53, 13.64, -8.89, 1, 1, 30, 3.55, 0.91, 1, 2, 52, 1.72, -0.73, 0.5001, 5, 40.07, -2.34, 0.4999, 1, 5, 25.66, -11.25, 1, 3, 52, 13.4, -4.65, 0.33234, 53, 0.86, -4.56, 0.48165, 5, 48.12, -11.66, 0.18601 ], + "hull": 38, + "edges": [ 0, 2, 8, 10, 20, 22, 22, 24, 24, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 52, 54, 54, 56, 56, 58, 58, 60, 60, 62, 70, 72, 72, 74, 0, 74, 56, 76, 6, 8, 76, 6, 4, 6, 4, 78, 78, 80, 80, 70, 2, 82, 82, 72, 82, 78, 78, 76, 2, 4, 56, 80, 56, 66, 62, 64, 64, 66, 66, 68, 68, 70, 44, 46, 46, 48, 18, 20, 46, 18, 10, 12, 12, 14, 48, 50, 50, 52, 12, 50, 14, 16, 16, 18 ], + "width": 145, + "height": 221 + } + }, + "front-arm-path": { + "front-arm-path": { + "type": "path", + "lengths": [ 73.64, 135.97, 291.4 ], + "vertexCount": 9, + "vertices": [ 1, 36, -21.12, -1.6, 1, 1, 36, 0.92, -0.29, 1, 1, 36, 16.41, 0.79, 1, 2, 36, 53.26, -1.74, 0.504, 37, -15.94, 3.84, 0.496, 2, 36, 74.54, 0.19, 0.504, 37, 4.75, -1.5, 0.496, 2, 36, 94.74, 2.31, 0.504, 37, 24.5, -6.3, 0.496, 1, 37, 46.12, -4.58, 1, 1, 37, 66.56, -0.12, 1, 1, 36, 147.94, 32.21, 1 ] + } + }, + "front-leg-path": { + "front-leg-path": { + "type": "path", + "lengths": [ 140.44, 297.38, 652.13 ], + "vertexCount": 9, + "vertices": [ 1, 50, -40.7, -0.42, 1, 1, 50, 1.49, -0.27, 1, 1, 50, 75.42, 0.33, 1, 2, 50, 82.92, 8.5, 0.5, 51, -58.75, -8.54, 0.5, 2, 50, 141.35, 0.53, 0.5, 51, 0.45, 0.71, 0.5, 2, 50, 208.27, -14.84, 0.5, 51, 68.84, 18.53, 0.5, 1, 51, 73.81, 1.42, 1, 1, 51, 156.58, 0.99, 1, 1, 50, 380.6, 0.76, 1 ] + } + }, + "head": { + "head": { "x": 45.65, "y": -7.92, "rotation": -70.44, "width": 87, "height": 102 } + }, + "rear-arm-path": { + "rear-arm-path": { + "type": "path", + "lengths": [ 66.62, 131.77, 281.13 ], + "vertexCount": 9, + "vertices": [ 1, 12, -19.59, 1.53, 1, 1, 12, 0.28, -0.13, 1, 1, 12, 17.08, -1.7, 1, 2, 12, 47.35, -3.26, 0.504, 13, -19.18, 3.46, 0.496, 2, 12, 66.76, 0.15, 0.504, 13, 0.23, 0.07, 0.496, 2, 12, 86.18, 3.55, 0.504, 13, 19.65, -3.32, 0.496, 1, 13, 46.48, -3.02, 1, 1, 13, 65.15, 0.11, 1, 1, 12, 144.73, 31.88, 1 ] + } + } + } +}, +"animations": { + "sneak": { + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 30.27, "curve": "stepped" }, + { "time": 0.1667, "angle": 30.27 }, + { "time": 0.3333, "angle": -31.29 }, + { "time": 0.5333, "angle": -44.75 }, + { "time": 0.7333, "angle": -25.5 }, + { "time": 0.9, "angle": -9.45 }, + { "time": 1.0667, "angle": 30.27 }, + { "time": 1.2333, "angle": -10.1 }, + { "time": 1.6333, "angle": -41.48 }, + { "time": 1.8, "angle": 30.27 } + ], + "translate": [ + { "time": 0, "x": -57.44, "y": -40.93 }, + { + "time": 0.1667, + "x": -16.16, + "y": -96.56, + "curve": [ 0.245, 0, 0.637, 0.56 ] + }, + { + "time": 0.2667, + "x": 86, + "y": -143.07, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 0.3333, "x": 145.45, "y": -159.28 }, + { "time": 0.4333, "x": 344.29, "y": -134.95 }, + { "time": 0.5333, "x": 543.14, "y": -81.1 }, + { "time": 0.7333, "x": 569.69, "y": -62.13 }, + { "time": 0.9, "x": 591.81, "y": -46.32 }, + { + "time": 1.0667, + "x": 653.14, + "y": -96.6, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 1.1333, "x": 710.17, "y": -143.1 }, + { "time": 1.2333, "x": 795.7, "y": -159.3 }, + { "time": 1.3333, "x": 986.95, "y": -153.35 }, + { "time": 1.4333, "x": 1178.2, "y": -111.89 }, + { "time": 1.6333, "x": 1195.1, "y": -62.1 }, + { "time": 1.8, "x": 1246.53, "y": -40.93 } + ] + }, + "front-leg-ik-target": { + "translate": [ + { "time": 0, "x": -50.43, "y": 44.62 }, + { "time": 0.1667, "x": -50.43, "y": 46.55 }, + { "time": 0.3333, "x": -50.43, "y": 47 }, + { + "time": 0.5333, + "x": -26.43, + "y": 50.21, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7333, "x": 566.44, "y": 107.27 }, + { "time": 0.9, "x": 1215.9, "y": 68.21 }, + { "time": 1.0667, "x": 1235.47, "y": 15.8 }, + { "time": 1.2333, "x": 1235.47, "y": 0.97 }, + { "time": 1.5667, "x": 1230.16, "y": 3.76 }, + { "time": 1.7, "x": 1244, "y": 26.77 }, + { "time": 1.8, "x": 1253.54, "y": 44.62 } + ] + }, + "front-foot1": { + "rotate": [ + { "time": 0, "angle": -48.39, "curve": "stepped" }, + { "time": 0.3333, "angle": -48.39 }, + { "time": 0.7, "angle": -121.35 }, + { "time": 0.8, "angle": -80.19 }, + { "time": 0.9, "angle": 45.59 }, + { "time": 1.0667, "angle": 2.11 }, + { "time": 1.2333, "angle": 4.65 }, + { "time": 1.5667, "angle": 5.67 }, + { "time": 1.8, "angle": -48.39 } + ], + "scale": [ + { "time": 0.6, "x": 1, "y": 1 }, + { "time": 0.6333, "x": 0.955, "y": 1 }, + { "time": 0.7667, "x": 0.821, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 1.0667, "x": 0.851, "y": 1 }, + { "time": 1.3667, "x": 1, "y": 1 } + ] + }, + "front-foot3": { + "rotate": [ + { "time": 0, "angle": 36.33 }, + { "time": 0.3333, "angle": 28.46 }, + { "time": 0.5, "angle": 34.85 }, + { "time": 0.5333, "angle": 30.32 }, + { "time": 0.5667, "angle": 61.67 }, + { "time": 0.7, "angle": -19.47 }, + { "time": 0.9, "angle": -0.12 }, + { "time": 1.0667, "angle": -7.21 }, + { "time": 1.2333, "angle": -11.35 }, + { "time": 1.5667, "angle": -11.24 }, + { "time": 1.8, "angle": 36.33 } + ] + }, + "back-leg-ik-target": { + "translate": [ + { "time": 0, "x": 516.79, "y": 86.68 }, + { "time": 0.1667, "x": 523.72, "y": 16.64 }, + { "time": 0.3333, "x": 523.03, "y": -5, "curve": "stepped" }, + { "time": 0.7, "x": 523.03, "y": -5 }, + { "time": 0.9, "x": 551.32, "y": 41.87 }, + { "time": 1.0667, "x": 554.24, "y": 44.45 }, + { "time": 1.1333, "x": 555.44, "y": 44.75 }, + { "time": 1.2, "x": 556.61, "y": 46.19, "curve": "stepped" }, + { "time": 1.4333, "x": 556.61, "y": 46.19 }, + { "time": 1.5, "x": 746.97, "y": 74.82 }, + { "time": 1.6333, "x": 1127.69, "y": 103.62 }, + { "time": 1.8, "x": 1820.76, "y": 86.68 } + ] + }, + "back-foot1": { + "rotate": [ + { "time": 0, "angle": 74.18 }, + { "time": 0.1667, "angle": -17.01 }, + { "time": 0.3333, "angle": 5.06 }, + { "time": 0.7, "angle": 3.74 }, + { "time": 0.9, "angle": -65.56 }, + { "time": 1.6333, "angle": -92.53 }, + { "time": 1.8, "angle": 74.18 } + ], + "scale": [ + { "time": 0, "x": 0.824, "y": 1 }, + { "time": 0.1667, "x": 0.754, "y": 1 }, + { "time": 0.3333, "x": 0.589, "y": 1 }, + { "time": 0.5667, "x": 0.91, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.4, "x": 1, "y": 1 }, + { "time": 1.5, "x": 0.845, "y": 1 }, + { "time": 1.8, "x": 0.824, "y": 1 } + ] + }, + "back-foot2": { + "rotate": [ + { "time": 0, "angle": 8.14 }, + { "time": 0.1667, "angle": -3.21 }, + { "time": 0.7, "angle": -1.14 }, + { "time": 0.9, "angle": 34.12 }, + { "time": 1.4333, "angle": 46.69 }, + { "time": 1.5333, "angle": -15.6 }, + { "time": 1.6333, "angle": -11.91 }, + { "time": 1.8, "angle": 8.14 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "front-arm1": { + "rotate": [ + { "time": 0, "angle": -39.72 }, + { "time": 0.1667, "angle": -37.3 }, + { "time": 0.3333, "angle": 30.67 }, + { + "time": 0.9, + "angle": -53.28, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 36 }, + { "time": 1.8, "angle": -39.72 } + ] + }, + "neck1": { + "rotate": [ + { "time": 0, "angle": 21.95, "curve": "stepped" }, + { "time": 0.1667, "angle": 21.95 }, + { "time": 0.2667, "angle": 30.61 }, + { "time": 0.3333, "angle": 36.37 }, + { "time": 0.7333, "angle": 33.6 }, + { "time": 1.1667, "angle": 23.95 }, + { "time": 1.2333, "angle": 36.37 }, + { "time": 1.6333, "angle": 41.16 }, + { "time": 1.8, "angle": 21.95 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -23.96 }, + { "time": 0.2667, "angle": 8.84 }, + { "time": 0.3333, "angle": 30.71 }, + { "time": 0.7333, "angle": -3.37 }, + { "time": 0.9, "angle": -17.57 }, + { "time": 1.1667, "angle": 2.19 }, + { "time": 1.2333, "angle": 15.26 }, + { "time": 1.6333, "angle": 4.42 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -13.04 }, + { "time": 0.2667, "angle": 2.65 }, + { "time": 0.3333, "angle": 13.1 }, + { "time": 0.5, "angle": 13.1 }, + { "time": 0.7333, "angle": -18.91 }, + { "time": 0.9, "angle": -41.78 }, + { "time": 1.1667, "angle": -4 }, + { "time": 1.2333, "angle": -2.35 }, + { "time": 1.6333, "angle": -22.89 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "back-arm1": { + "rotate": [ + { "time": 0, "angle": -17.24 }, + { "time": 0.1667, "angle": -18.66 }, + { "time": 0.3333, "angle": 324.99 }, + { "time": 0.5667, "angle": -6.42 }, + { "time": 0.9, "angle": -14.83 }, + { "time": 1.0667, "angle": -16.91 }, + { "time": 1.2333, "angle": 1.49 }, + { "time": 1.4, "angle": 2.56 }, + { "time": 1.8, "angle": -17.24 } + ], + "translate": [ + { "time": 0, "x": -14.26, "y": -6.6 } + ] + }, + "back-leg-ik1": { + "scale": [ + { "time": 0, "x": 2.186, "y": 1 }, + { "time": 0.1667, "x": 2.229, "y": 1 }, + { "time": 0.3333, "x": 1.532, "y": 1 }, + { "time": 0.4333, "x": 0.947, "y": 1 }, + { "time": 0.5333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0667, "x": 1, "y": 1 }, + { "time": 1.1333, "x": 0.893, "y": 1 }, + { "time": 1.2333, "x": 0.957, "y": 1 }, + { "time": 1.4333, "x": 2.315, "y": 1 }, + { "time": 1.6333, "x": 0.774, "y": 1 }, + { "time": 1.8, "x": 2.186, "y": 1 } + ] + }, + "front-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.118 } + ] + }, + "back-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.039 } + ] + }, + "front-leg-ik1": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.2667, "x": 0.859, "y": 1 }, + { "time": 0.3333, "x": 0.972, "y": 1 }, + { + "time": 0.5333, + "x": 2.356, + "y": 1, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7, "x": 1, "y": 1 }, + { "time": 0.9, "x": 2.248, "y": 1 }, + { "time": 1.0667, "x": 2.003, "y": 1 }, + { "time": 1.2333, "x": 1.496, "y": 1 }, + { + "time": 1.3, + "x": 1.048, + "y": 1, + "curve": [ 0.34, 0.59, 0.765, 1 ] + }, + { "time": 1.4333, "x": 0.779, "y": 0.763 }, + { "time": 1.8, "x": 1, "y": 1 } + ] + }, + "front-arm3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1667, "angle": 17.37 }, + { "time": 0.3333, "angle": 31.94 }, + { + "time": 0.9, + "angle": 4.76, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 39.97 }, + { "time": 1.8, "angle": 0 } + ] + }, + "spine2": { + "rotate": [ + { "time": 0, "angle": -3.49 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -5.78 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -6.7 }, + { "time": 1.6333, "angle": -2.5 }, + { "time": 1.8, "angle": -3.49 } + ] + }, + "spine3": { + "rotate": [ + { "time": 0, "angle": -20.41 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -10.54 }, + { "time": 0.9, "angle": -16.17 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -9.03 }, + { "time": 1.6333, "angle": -7.26 }, + { "time": 1.8, "angle": -20.41 } + ] + }, + "back-arm3": { + "rotate": [ + { "time": 0, "angle": 26.23 }, + { "time": 0.1667, "angle": 53.15 }, + { "time": 0.3333, "angle": 116.26 }, + { "time": 0.5667, "angle": 35.72 }, + { "time": 0.9, "angle": 39.33 }, + { "time": 1.0667, "angle": 41.19 }, + { "time": 1.2333, "angle": 78.1 }, + { "time": 1.4, "angle": 36.16 }, + { "time": 1.8, "angle": 26.23 } + ] + }, + "back-foot3": { + "rotate": [ + { "time": 0, "angle": 11.35 }, + { "time": 0.7, "angle": -4.24 }, + { "time": 0.9, "angle": 25.49, "curve": "stepped" }, + { "time": 1.4333, "angle": 25.49 }, + { "time": 1.5333, "angle": -30.52 }, + { "time": 1.6333, "angle": -20.54 }, + { "time": 1.8, "angle": 11.35 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "spine1": { + "rotate": [ + { "time": 0, "angle": 10.81 }, + { "time": 0.2667, "angle": -28.7 }, + { "time": 0.3333, "angle": -24.32 }, + { "time": 0.5, "angle": -13.38 }, + { "time": 0.7333, "angle": 21.62 }, + { "time": 0.9, "angle": 46.61 }, + { "time": 1.1667, "angle": -28.7 }, + { "time": 1.2333, "angle": -43.34 }, + { "time": 1.6333, "angle": 24.89 }, + { "time": 1.8, "angle": 10.81 } + ] + }, + "spine4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -2.8 }, + { "time": 0.3333, "angle": -0.82 }, + { "time": 0.5, "angle": 4.14 }, + { "time": 0.7333, "angle": -3.74 }, + { "time": 0.9, "angle": -9.37 }, + { "time": 1.1667, "angle": -9.02 }, + { "time": 1.2333, "angle": -0.82 }, + { "time": 1.6333, "angle": 3.82 }, + { "time": 1.8, "angle": 0 } + ] + }, + "front-foot2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -1.24 }, + { "time": 0.3333, "angle": -0.2 }, + { "time": 0.5, "angle": 22.72 }, + { "time": 0.5333, "angle": 26.87 }, + { "time": 0.7, "angle": -39.26 }, + { "time": 0.9, "angle": 11.27 }, + { "time": 1.0667, "angle": -18.18 }, + { "time": 1.2333, "angle": -2.64 }, + { "time": 1.5667, "angle": -5.84 }, + { "time": 1.8, "angle": 0 } + ] + }, + "belly": { + "translate": [ + { "time": 0, "x": 3.66, "y": -3.77 }, + { "time": 0.2667, "x": 13.83, "y": -3.82 }, + { "time": 0.6333, "x": -4.11, "y": -3.9 }, + { "time": 0.7667, "x": 10.21, "y": -2.92 }, + { "time": 0.8667, "x": 10.3, "y": -7.39 }, + { "time": 1.1, "x": -0.45, "y": -1.46 }, + { "time": 1.2333, "x": 12.38, "y": 2.33 }, + { "time": 1.3667, "x": 11.51, "y": 5.53 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "butt": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.7667, "x": 9.88, "y": -25.41 }, + { "time": 0.8333, "x": 15.89, "y": -41.89 }, + { "time": 1.2333, "x": -12.49, "y": -33 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + } + }, + "deform": { + "default": { + "back-leg": { + "back-leg": [ + { "time": 0.3 }, + { + "time": 0.3333, + "offset": 68, + "vertices": [ -1.72897, 2.75446, -1.5253, 2.94189, 0.0625, 3.6552, 0.01776, 3.65398, 0, 0, 0, 0, 0, 0, 0.0625, 3.6552, 0.01776, 3.65398, 0.90137, 3.54112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.98724, -1.57397, -0.03339, -2.08873, -0.0108, -2.08799, -0.51434, -2.02362, 0.98724, -1.57397, 0.87167, -1.68002, -0.03339, -2.08873, -0.0108, -2.08799 ] + }, + { "time": 0.4667, "curve": "stepped" }, + { "time": 1.3333 }, + { + "time": 1.4333, + "offset": 110, + "vertices": [ 2.52802, 0.00428, -0.03569, -4.90118, -3.71692, -3.19397, -4.88019, -0.43807, 5.17279, -0.0625, 5.1499, -0.4769, -0.07238, -10.06842, -7.6351, -6.56073, 6.64206, -0.09958, 6.61151, -0.62643, -0.09275, -12.93915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.01242, -1.65533, -1.25543, -1.0787, 0.86096, 0.02682, -0.01242, -1.65533, -1.25543, -1.0787 ] + }, + { "time": 1.5 } + ] + }, + "back-leg-path": { + "back-leg-path": [ + { "time": 1.4333 }, + { + "time": 1.5, + "vertices": [ 4.67719, -35.44354, 0, 0, -11.37146, 49.53738, -20.9989, -109.72336, 65.45837, -90.53627, -9.56653, -24.74756, 11.45203, -23.93552, -19.0719, 47.32281, -47.53955, 18.58409, 34.69244, -51.5341, 0, 0, 13.30164, -100.17206 ] + }, + { + "time": 1.5667, + "vertices": [ -0.9635, -22.43964, 0, 0, -13.80389, 27.61459, -41.00647, -55.1597, 7.62653, -96.25755, -24.12604, -24.11285, 7.19531, -37.87421, -31.47302, 7.7796, -12.34546, -3.32329, 26.55981, -38.73888, 0, 0, -13.62085, -280.84912 ] + }, + { "time": 1.6667 } + ] + }, + "body": { + "body": [ + { "time": 0 }, + { + "time": 0.3333, + "offset": 164, + "vertices": [ -0.01179, 0.02892, 0.00917, 0.0298, 0, 0, 1.17781, 0.89836, 1.48063, -0.04942, -6.68858, -1.30629, 4.38938, 4.03926, 4.59584, 3.27733, 5.6365, -0.11035, -4.92264, -0.8036, 4.54263, 1.06504, 3.29334, 0.58414, 2.94214, -1.40272, -4.28855, -0.56444, 5.07103, -0.2119, 2.95891, -0.75666, 1.83514, -2.22984, -4.31062, 0.6261, 6.11538, -0.87569, 3.7923, -1.67126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17404, 0.22007, 0.27404, 0.06016 ] + }, + { + "time": 0.5333, + "offset": 164, + "vertices": [ -0.01887, 0.04627, 0.01467, 0.04768, 0, 0, 1.8845, 1.43737, 2.369, -0.07908, 1.46056, -1.33223, -0.75053, -3.7334, -2.8232, -2.55492, -3.80252, -0.19385, 2.81923, -1.5031, -0.33163, -6.75651, -4.28408, -5.23484, -6.6292, -1.34549, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, -8.4004, -2.66889, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.27846, 0.35212, 0.43846, 0.09625 ] + }, + { + "time": 0.6333, + "offset": 170, + "vertices": [ -2.09907, 0.04961, -1.94301, 1.46154, 1.74966, 0.25744, 0.3765, -3.44555, -2.34343, -2.73069, -3.66285, -0.53693, 0, 0, 0, 0, 0, 0, 0, 0, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, -4.2002, -1.33444, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.66468, 1.25351, 0.05177, 1.41789 ] + }, + { "time": 0.7333 }, + { + "time": 0.7667, + "offset": 264, + "vertices": [ -2.27499, -1.60417, -2.23926, -1.61371, -2.2196, -1.74294, -1.80919, 2.86346, -1.11118, 2.362, -1.14221, 2.35901, 2.63101, 1.41101, 2.63216, 1.41742, -0.8147, 8.46568, 9.45621, 1.07874, 9.45622, 1.08002, -1.00012, 6.23984, 6.96738, 1.29987, 6.96741, 1.30219, -0.68823, 4.24005, 4.73441, 0.89532, 4.73448, 0.89594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05484, 2.78093, 0.01666, 2.78223, 3.10776, -0.05573, 3.10799, -0.05426, -1.17972, 2.87598, -0.99005, 3.55937, 3.97198, 1.27319, 3.97208, 1.27423, -2.74237, 3.14401 ] + }, + { "time": 0.8333, "curve": "stepped" }, + { "time": 1.0667 }, + { + "time": 1.3333, + "offset": 142, + "vertices": [ 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041 ] + }, + { "time": 1.4333 } + ] + }, + "front-leg-path": { + "front-leg-path": [ + { "time": 0.5667 }, + { + "time": 0.6333, + "vertices": [ 0.16366, -9.90768, 0, 0, -1.90419, 16.9905, 16.55858, -93.6721, 21.4361, -76.03695, -0.72391, -31.37989, 8.2138, -30.29725, -24.90733, 16.177, -28.83566, 5.62576, 82.90022, -63.82897, 0, 0, -39.50021, -13.99933 ] + }, + { + "time": 0.7, + "vertices": [ 0.20398, -12.34892, 0, 0, -2.37338, 21.17692, 20.63858, -116.75269, 26.71791, -94.77228, -0.90228, -39.11182, 10.23766, -37.76243, -31.04443, 20.16298, -35.9407, 7.01193, 22.68159, 24.72715, 0, 0, -292.39255, -342.79443 ] + }, + { "time": 0.8 } + ] + } + } + } + }, + "sneak-rm": { + "bones": { + "hip": { + "rotate": [ + { "time": 0, "angle": 30.27, "curve": "stepped" }, + { "time": 0.1667, "angle": 30.27 }, + { "time": 0.3333, "angle": -31.29 }, + { "time": 0.5333, "angle": -44.75 }, + { "time": 0.7333, "angle": -25.5 }, + { "time": 0.9, "angle": -9.45 }, + { "time": 1.0667, "angle": 30.27 }, + { "time": 1.2333, "angle": -10.1 }, + { "time": 1.6333, "angle": -41.48 }, + { "time": 1.8, "angle": 30.27 } + ], + "translate": [ + { "time": 0, "x": -57.44, "y": -40.93 }, + { + "time": 0.1667, + "x": -16.16, + "y": -96.56, + "curve": [ 0.245, 0, 0.637, 0.56 ] + }, + { + "time": 0.2667, + "x": 86, + "y": -143.07, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 0.3333, "x": 145.45, "y": -159.28 }, + { "time": 0.4333, "x": 344.29, "y": -134.95 }, + { "time": 0.5333, "x": 543.14, "y": -81.1 }, + { "time": 0.7333, "x": 569.69, "y": -62.13 }, + { "time": 0.9, "x": 591.81, "y": -46.32 }, + { + "time": 1.0667, + "x": 653.14, + "y": -96.6, + "curve": [ 0.381, 0.55, 0.742, 1 ] + }, + { "time": 1.1333, "x": 710.17, "y": -143.1 }, + { "time": 1.2333, "x": 795.7, "y": -159.3 }, + { "time": 1.3333, "x": 986.95, "y": -153.35 }, + { "time": 1.4333, "x": 1178.2, "y": -111.89 }, + { "time": 1.6333, "x": 1195.1, "y": -62.1 }, + { "time": 1.8, "x": 1246.53, "y": -40.93 } + ] + }, + "front-leg-ik-target": { + "translate": [ + { "time": 0, "x": -50.43, "y": 44.62 }, + { "time": 0.1667, "x": -50.43, "y": 46.55 }, + { "time": 0.3333, "x": -50.43, "y": 47 }, + { + "time": 0.5333, + "x": -26.43, + "y": 50.21, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7333, "x": 566.44, "y": 107.27 }, + { "time": 0.9, "x": 1215.9, "y": 68.21 }, + { "time": 1.0667, "x": 1235.47, "y": 15.8 }, + { "time": 1.2333, "x": 1235.47, "y": 0.97 }, + { "time": 1.5667, "x": 1230.16, "y": 3.76 }, + { "time": 1.7, "x": 1244, "y": 26.77 }, + { "time": 1.8, "x": 1253.54, "y": 44.62 } + ] + }, + "front-foot1": { + "rotate": [ + { "time": 0, "angle": -48.39, "curve": "stepped" }, + { "time": 0.3333, "angle": -48.39 }, + { "time": 0.7, "angle": -121.35 }, + { "time": 0.8, "angle": -80.19 }, + { "time": 0.9, "angle": 45.59 }, + { "time": 1.0667, "angle": 2.11 }, + { "time": 1.2333, "angle": 4.65 }, + { "time": 1.5667, "angle": 5.67 }, + { "time": 1.8, "angle": -48.39 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.6, "x": 1, "y": 1 }, + { "time": 0.6333, "x": 0.955, "y": 1 }, + { "time": 0.7667, "x": 0.821, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1 }, + { "time": 1.0667, "x": 0.851, "y": 1 }, + { "time": 1.3667, "x": 1, "y": 1 } + ] + }, + "front-foot3": { + "rotate": [ + { "time": 0, "angle": 36.33 }, + { "time": 0.3333, "angle": 28.46 }, + { "time": 0.5, "angle": 34.85 }, + { "time": 0.5333, "angle": 30.32 }, + { "time": 0.5667, "angle": 61.67 }, + { "time": 0.7, "angle": -19.47 }, + { "time": 0.9, "angle": -0.12 }, + { "time": 1.0667, "angle": -7.21 }, + { "time": 1.2333, "angle": -11.35 }, + { "time": 1.5667, "angle": -11.24 }, + { "time": 1.8, "angle": 36.33 } + ] + }, + "back-leg-ik-target": { + "translate": [ + { "time": 0, "x": 516.79, "y": 86.68 }, + { "time": 0.1667, "x": 523.72, "y": 16.64 }, + { "time": 0.3333, "x": 523.03, "y": -5, "curve": "stepped" }, + { "time": 0.7, "x": 523.03, "y": -5 }, + { "time": 0.9, "x": 551.32, "y": 41.87 }, + { "time": 1.0667, "x": 554.24, "y": 44.45 }, + { "time": 1.1333, "x": 555.44, "y": 44.75 }, + { "time": 1.2, "x": 556.61, "y": 46.19, "curve": "stepped" }, + { "time": 1.4333, "x": 556.61, "y": 46.19 }, + { "time": 1.5, "x": 746.97, "y": 74.82 }, + { "time": 1.6333, "x": 1127.69, "y": 103.62 }, + { "time": 1.8, "x": 1820.76, "y": 86.68 } + ] + }, + "back-foot1": { + "rotate": [ + { "time": 0, "angle": 74.18 }, + { "time": 0.1667, "angle": -17.01 }, + { "time": 0.3333, "angle": 5.06 }, + { "time": 0.7, "angle": 3.74 }, + { "time": 0.9, "angle": -65.56 }, + { "time": 1.6333, "angle": -92.53 }, + { "time": 1.8, "angle": 74.18 } + ], + "scale": [ + { "time": 0, "x": 0.824, "y": 1 }, + { "time": 0.1667, "x": 0.754, "y": 1 }, + { "time": 0.3333, "x": 0.589, "y": 1 }, + { "time": 0.5667, "x": 0.91, "y": 1 }, + { "time": 0.9, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.4, "x": 1, "y": 1 }, + { "time": 1.5, "x": 0.845, "y": 1 }, + { "time": 1.8, "x": 0.824, "y": 1 } + ] + }, + "back-foot2": { + "rotate": [ + { "time": 0, "angle": 8.14 }, + { "time": 0.1667, "angle": -3.21 }, + { "time": 0.7, "angle": -1.14 }, + { "time": 0.9, "angle": 34.12 }, + { "time": 1.4333, "angle": 46.69 }, + { "time": 1.5333, "angle": -15.6 }, + { "time": 1.6333, "angle": -11.91 }, + { "time": 1.8, "angle": 8.14 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "front-arm1": { + "rotate": [ + { "time": 0, "angle": -39.72 }, + { "time": 0.1667, "angle": -37.3 }, + { "time": 0.3333, "angle": 30.67 }, + { + "time": 0.9, + "angle": -53.28, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 36 }, + { "time": 1.8, "angle": -39.72 } + ] + }, + "neck1": { + "rotate": [ + { "time": 0, "angle": 21.95, "curve": "stepped" }, + { "time": 0.1667, "angle": 21.95 }, + { "time": 0.2667, "angle": 30.61 }, + { "time": 0.3333, "angle": 36.37 }, + { "time": 0.7333, "angle": 33.6 }, + { "time": 1.1667, "angle": 23.95 }, + { "time": 1.2333, "angle": 36.37 }, + { "time": 1.6333, "angle": 41.16 }, + { "time": 1.8, "angle": 21.95 } + ] + }, + "neck2": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -23.96 }, + { "time": 0.2667, "angle": 8.84 }, + { "time": 0.3333, "angle": 30.71 }, + { "time": 0.7333, "angle": -3.37 }, + { "time": 0.9, "angle": -17.57 }, + { "time": 1.1667, "angle": 2.19 }, + { "time": 1.2333, "angle": 15.26 }, + { "time": 1.6333, "angle": 4.42 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": -22.93 }, + { "time": 0.1667, "angle": -13.04 }, + { "time": 0.2667, "angle": 2.65 }, + { "time": 0.3333, "angle": 13.1 }, + { "time": 0.5, "angle": 13.1 }, + { "time": 0.7333, "angle": -18.91 }, + { "time": 0.9, "angle": -41.78 }, + { "time": 1.1667, "angle": -4 }, + { "time": 1.2333, "angle": -2.35 }, + { "time": 1.6333, "angle": -22.89 }, + { "time": 1.8, "angle": -22.93 } + ] + }, + "back-arm1": { + "rotate": [ + { "time": 0, "angle": -17.24 }, + { "time": 0.1667, "angle": -18.66 }, + { "time": 0.3333, "angle": 324.99 }, + { "time": 0.5667, "angle": -6.42 }, + { "time": 0.9, "angle": -14.83 }, + { "time": 1.0667, "angle": -16.91 }, + { "time": 1.2333, "angle": 1.49 }, + { "time": 1.4, "angle": 2.56 }, + { "time": 1.8, "angle": -17.24 } + ], + "translate": [ + { "time": 0, "x": -14.26, "y": -6.6 } + ] + }, + "back-leg-ik1": { + "scale": [ + { "time": 0, "x": 2.186, "y": 1 }, + { "time": 0.1667, "x": 2.229, "y": 1 }, + { "time": 0.3333, "x": 1.532, "y": 1 }, + { "time": 0.4333, "x": 0.947, "y": 1 }, + { "time": 0.5333, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 1.0667, "x": 1, "y": 1 }, + { "time": 1.1333, "x": 0.893, "y": 1 }, + { "time": 1.2333, "x": 0.957, "y": 1 }, + { "time": 1.4333, "x": 2.315, "y": 1 }, + { "time": 1.6333, "x": 0.774, "y": 1 }, + { "time": 1.8, "x": 2.186, "y": 1 } + ] + }, + "front-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.118 } + ] + }, + "back-leg1": { + "scale": [ + { "time": 0, "x": 1, "y": 1.039 } + ] + }, + "front-leg-ik1": { + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.2667, "x": 0.859, "y": 1 }, + { "time": 0.3333, "x": 0.972, "y": 1 }, + { + "time": 0.5333, + "x": 2.356, + "y": 1, + "curve": [ 0.532, 0, 0.75, 1 ] + }, + { "time": 0.7, "x": 1, "y": 1 }, + { "time": 0.9, "x": 2.248, "y": 1 }, + { "time": 1.0667, "x": 2.003, "y": 1 }, + { "time": 1.2333, "x": 1.496, "y": 1 }, + { + "time": 1.3, + "x": 1.048, + "y": 1, + "curve": [ 0.34, 0.59, 0.765, 1 ] + }, + { "time": 1.4333, "x": 0.779, "y": 0.763 }, + { "time": 1.8, "x": 1, "y": 1 } + ] + }, + "front-leg-ik2": { + "scale": [ + { "time": 0, "x": 1, "y": 1 } + ] + }, + "front-arm3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1667, "angle": 17.37 }, + { "time": 0.3333, "angle": 31.94 }, + { + "time": 0.9, + "angle": 4.76, + "curve": [ 0.708, 0.01, 0.75, 1 ] + }, + { "time": 1.2333, "angle": 39.97 }, + { "time": 1.8, "angle": 0 } + ] + }, + "spine2": { + "rotate": [ + { "time": 0, "angle": -3.49 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -5.78 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -6.7 }, + { "time": 1.6333, "angle": -2.5 }, + { "time": 1.8, "angle": -3.49 } + ] + }, + "spine3": { + "rotate": [ + { "time": 0, "angle": -20.41 }, + { "time": 0.2667, "angle": -11.58 }, + { "time": 0.3333, "angle": -9.03 }, + { "time": 0.5, "angle": -2.66 }, + { "time": 0.7333, "angle": -10.54 }, + { "time": 0.9, "angle": -16.17 }, + { "time": 1.1667, "angle": -11.58 }, + { "time": 1.2333, "angle": -9.03 }, + { "time": 1.6333, "angle": -7.26 }, + { "time": 1.8, "angle": -20.41 } + ] + }, + "back-arm3": { + "rotate": [ + { "time": 0, "angle": 26.23 }, + { "time": 0.1667, "angle": 53.15 }, + { "time": 0.3333, "angle": 116.26 }, + { "time": 0.5667, "angle": 35.72 }, + { "time": 0.9, "angle": 39.33 }, + { "time": 1.0667, "angle": 41.19 }, + { "time": 1.2333, "angle": 78.1 }, + { "time": 1.4, "angle": 36.16 }, + { "time": 1.8, "angle": 26.23 } + ] + }, + "back-foot3": { + "rotate": [ + { "time": 0, "angle": 11.35 }, + { "time": 0.7, "angle": -4.24 }, + { "time": 0.9, "angle": 25.49, "curve": "stepped" }, + { "time": 1.4333, "angle": 25.49 }, + { "time": 1.5333, "angle": -30.52 }, + { "time": 1.6333, "angle": -20.54 }, + { "time": 1.8, "angle": 11.35 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1 }, + { "time": 0.1667, "x": 0.835, "y": 1 }, + { "time": 0.3333, "x": 1, "y": 1 } + ] + }, + "spine1": { + "rotate": [ + { "time": 0, "angle": 10.81 }, + { "time": 0.2667, "angle": -28.7 }, + { "time": 0.3333, "angle": -24.32 }, + { "time": 0.5, "angle": -13.38 }, + { "time": 0.7333, "angle": 21.62 }, + { "time": 0.9, "angle": 46.61 }, + { "time": 1.1667, "angle": -28.7 }, + { "time": 1.2333, "angle": -43.34 }, + { "time": 1.6333, "angle": 24.89 }, + { "time": 1.8, "angle": 10.81 } + ] + }, + "spine4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -2.8 }, + { "time": 0.3333, "angle": -0.82 }, + { "time": 0.5, "angle": 4.14 }, + { "time": 0.7333, "angle": -3.74 }, + { "time": 0.9, "angle": -9.37 }, + { "time": 1.1667, "angle": -9.02 }, + { "time": 1.2333, "angle": -0.82 }, + { "time": 1.6333, "angle": 3.82 }, + { "time": 1.8, "angle": 0 } + ] + }, + "front-foot2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.2667, "angle": -1.24 }, + { "time": 0.3333, "angle": -0.2 }, + { "time": 0.5, "angle": 22.72 }, + { "time": 0.5333, "angle": 26.87 }, + { "time": 0.7, "angle": -39.26 }, + { "time": 0.9, "angle": 11.27 }, + { "time": 1.0667, "angle": -18.18 }, + { "time": 1.2333, "angle": -2.64 }, + { "time": 1.5667, "angle": -5.84 }, + { "time": 1.8, "angle": 0 } + ] + }, + "belly": { + "translate": [ + { "time": 0, "x": 3.66, "y": -3.77 }, + { "time": 0.2667, "x": 13.83, "y": -3.82 }, + { "time": 0.6333, "x": -4.11, "y": -3.9 }, + { "time": 0.7667, "x": 10.21, "y": -2.92 }, + { "time": 0.8667, "x": 10.3, "y": -7.39 }, + { "time": 1.1, "x": -0.45, "y": -1.46 }, + { "time": 1.2333, "x": 12.38, "y": 2.33 }, + { "time": 1.3667, "x": 11.51, "y": 5.53 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "butt": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.7667, "x": 9.88, "y": -25.41 }, + { "time": 0.8333, "x": 15.89, "y": -41.89 }, + { "time": 1.2333, "x": -12.49, "y": -33 }, + { "time": 1.8, "x": 0, "y": 0 } + ] + }, + "root": { + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 1.8, "x": -1276.66, "y": 0 } + ] + } + }, + "deform": { + "default": { + "back-leg": { + "back-leg": [ + { "time": 0.3 }, + { + "time": 0.3333, + "offset": 68, + "vertices": [ -1.72897, 2.75446, -1.5253, 2.94189, 0.0625, 3.6552, 0.01776, 3.65398, 0, 0, 0, 0, 0, 0, 0.0625, 3.6552, 0.01776, 3.65398, 0.90137, 3.54112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.98724, -1.57397, -0.03339, -2.08873, -0.0108, -2.08799, -0.51434, -2.02362, 0.98724, -1.57397, 0.87167, -1.68002, -0.03339, -2.08873, -0.0108, -2.08799 ] + }, + { "time": 0.4667, "curve": "stepped" }, + { "time": 1.3333 }, + { + "time": 1.4333, + "offset": 110, + "vertices": [ 2.52802, 0.00428, -0.03569, -4.90118, -3.71692, -3.19397, -4.88019, -0.43807, 5.17279, -0.0625, 5.1499, -0.4769, -0.07238, -10.06842, -7.6351, -6.56073, 6.64206, -0.09958, 6.61151, -0.62643, -0.09275, -12.93915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.01242, -1.65533, -1.25543, -1.0787, 0.86096, 0.02682, -0.01242, -1.65533, -1.25543, -1.0787 ] + }, + { "time": 1.5 } + ] + }, + "back-leg-path": { + "back-leg-path": [ + { "time": 1.4333 }, + { + "time": 1.5, + "vertices": [ 4.67719, -35.44354, 0, 0, -11.37146, 49.53738, -20.9989, -109.72336, 65.45837, -90.53627, -9.56653, -24.74756, 11.45203, -23.93552, -19.0719, 47.32281, -47.53955, 18.58409, 34.69244, -51.5341, 0, 0, 13.30164, -100.17206 ] + }, + { + "time": 1.5667, + "vertices": [ -0.9635, -22.43964, 0, 0, -13.80389, 27.61459, -41.00647, -55.1597, 7.62653, -96.25755, -24.12604, -24.11285, 7.19531, -37.87421, -31.47302, 7.7796, -12.34546, -3.32329, 26.55981, -38.73888, 0, 0, -13.62085, -280.84912 ] + }, + { "time": 1.6667 } + ] + }, + "body": { + "body": [ + { "time": 0 }, + { + "time": 0.3333, + "offset": 164, + "vertices": [ -0.01179, 0.02892, 0.00917, 0.0298, 0, 0, 1.17781, 0.89836, 1.48063, -0.04942, -6.68858, -1.30629, 4.38938, 4.03926, 4.59584, 3.27733, 5.6365, -0.11035, -4.92264, -0.8036, 4.54263, 1.06504, 3.29334, 0.58414, 2.94214, -1.40272, -4.28855, -0.56444, 5.07103, -0.2119, 2.95891, -0.75666, 1.83514, -2.22984, -4.31062, 0.6261, 6.11538, -0.87569, 3.7923, -1.67126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17404, 0.22007, 0.27404, 0.06016 ] + }, + { + "time": 0.5333, + "offset": 164, + "vertices": [ -0.01887, 0.04627, 0.01467, 0.04768, 0, 0, 1.8845, 1.43737, 2.369, -0.07908, 1.46056, -1.33223, -0.75053, -3.7334, -2.8232, -2.55492, -3.80252, -0.19385, 2.81923, -1.5031, -0.33163, -6.75651, -4.28408, -5.23484, -6.6292, -1.34549, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, -8.4004, -2.66889, 3.83379, -1.12045, 0.51382, -8.79961, -4.81918, -7.38011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.27846, 0.35212, 0.43846, 0.09625 ] + }, + { + "time": 0.6333, + "offset": 170, + "vertices": [ -2.09907, 0.04961, -1.94301, 1.46154, 1.74966, 0.25744, 0.3765, -3.44555, -2.34343, -2.73069, -3.66285, -0.53693, 0, 0, 0, 0, 0, 0, 0, 0, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, -4.2002, -1.33444, 1.91689, -0.56022, 0.25691, -4.39981, -2.40959, -3.69006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.66468, 1.25351, 0.05177, 1.41789 ] + }, + { "time": 0.7333 }, + { + "time": 0.7667, + "offset": 264, + "vertices": [ -2.27499, -1.60417, -2.23926, -1.61371, -2.2196, -1.74294, -1.80919, 2.86346, -1.11118, 2.362, -1.14221, 2.35901, 2.63101, 1.41101, 2.63216, 1.41742, -0.8147, 8.46568, 9.45621, 1.07874, 9.45622, 1.08002, -1.00012, 6.23984, 6.96738, 1.29987, 6.96741, 1.30219, -0.68823, 4.24005, 4.73441, 0.89532, 4.73448, 0.89594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.05484, 2.78093, 0.01666, 2.78223, 3.10776, -0.05573, 3.10799, -0.05426, -1.17972, 2.87598, -0.99005, 3.55937, 3.97198, 1.27319, 3.97208, 1.27423, -2.74237, 3.14401 ] + }, + { "time": 0.8333, "curve": "stepped" }, + { "time": 1.0667 }, + { + "time": 1.3333, + "offset": 142, + "vertices": [ 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.02271, -1.7984, 0.00684, -4.47887, -0.46118, -4.45537, -0.27441, -4.47041 ] + }, + { "time": 1.4333 } + ] + }, + "front-leg-path": { + "front-leg-path": [ + { "time": 0.5667 }, + { + "time": 0.6333, + "vertices": [ 0.16366, -9.90768, 0, 0, -1.90419, 16.9905, 16.55858, -93.6721, 21.4361, -76.03695, -0.72391, -31.37989, 8.2138, -30.29725, -24.90733, 16.177, -28.83566, 5.62576, 82.90022, -63.82897, 0, 0, -39.50021, -13.99933 ] + }, + { + "time": 0.7, + "vertices": [ 0.20398, -12.34892, 0, 0, -2.37338, 21.17692, 20.63858, -116.75269, 26.71791, -94.77228, -0.90228, -39.11182, 10.23766, -37.76243, -31.04443, 20.16298, -35.9407, 7.01193, 22.68159, 24.72715, 0, 0, -292.39255, -342.79443 ] + }, + { "time": 0.8 } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/examples/stretchyman/export/stretchyman-pro.skel b/examples/stretchyman/export/stretchyman-pro.skel index b205d91b3..771f2d3ab 100644 Binary files a/examples/stretchyman/export/stretchyman-pro.skel and b/examples/stretchyman/export/stretchyman-pro.skel differ diff --git a/examples/stretchyman/stretchyman-pro.spine b/examples/stretchyman/stretchyman-pro.spine index 12b5a52c7..bcb8b25b8 100644 Binary files a/examples/stretchyman/stretchyman-pro.spine and b/examples/stretchyman/stretchyman-pro.spine differ diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index 271e6dcbd..b994172c0 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -1210,9 +1210,9 @@ namespace Spine { } public class IkConstraintTimeline : CurveTimeline { - public const int ENTRIES = 3; - private const int PREV_TIME = -3, PREV_MIX = -2, PREV_BEND_DIRECTION = -1; - private const int MIX = 1, BEND_DIRECTION = 2; + public const int ENTRIES = 4; + private const int PREV_TIME = -4, PREV_MIX = -3, PREV_BEND_DIRECTION = -2, PREV_STRETCH = -1; + private const int MIX = 1, BEND_DIRECTION = 2, STRETCH = 3; internal int ikConstraintIndex; internal float[] frames; @@ -1230,11 +1230,12 @@ namespace Spine { } /// Sets the time, mix and bend direction of the specified keyframe. - public void SetFrame (int frameIndex, float time, float mix, int bendDirection) { + public void SetFrame (int frameIndex, float time, float mix, int bendDirection, bool stretch) { frameIndex *= ENTRIES; frames[frameIndex] = time; frames[frameIndex + MIX] = mix; frames[frameIndex + BEND_DIRECTION] = bendDirection; + frames[frameIndex + STRETCH] = stretch ? 1 : 0; } override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha, MixBlend blend, MixDirection direction) { @@ -1245,10 +1246,12 @@ namespace Spine { case MixBlend.Setup: constraint.mix = constraint.data.mix; constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; return; case MixBlend.First: constraint.mix += (constraint.data.mix - constraint.mix) * alpha; constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; return; } return; @@ -1257,11 +1260,19 @@ namespace Spine { if (time >= frames[frames.Length - ENTRIES]) { // Time is after last frame. if (blend == MixBlend.Setup) { constraint.mix = constraint.data.mix + (frames[frames.Length + PREV_MIX] - constraint.data.mix) * alpha; - constraint.bendDirection = direction == MixDirection.Out ? constraint.data.bendDirection - : (int)frames[frames.Length + PREV_BEND_DIRECTION]; + if (direction == MixDirection.Out) { + constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; + } else { + constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; + constraint.stretch = frames[frames.Length + PREV_STRETCH] != 0; + } } else { constraint.mix += (frames[frames.Length + PREV_MIX] - constraint.mix) * alpha; - if (direction == MixDirection.In) constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; + if (direction == MixDirection.In) { + constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; + constraint.stretch = frames[frames.Length + PREV_STRETCH] != 0; + } } return; } diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index bf3121bc7..5a3dde2ee 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -334,10 +334,10 @@ namespace Spine { // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses. float r1 = pose == MixBlend.Setup ? bone.data.rotation : bone.rotation; float total, diff = r2 - r1; + diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; if (diff == 0) { total = timelinesRotation[i]; } else { - diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; float lastTotal, lastDiff; if (firstFrame) { lastTotal = 0; diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index 9d188a69e..127b51a42 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -35,15 +35,43 @@ namespace Spine { internal IkConstraintData data; internal ExposedList bones = new ExposedList(); internal Bone target; - internal float mix; internal int bendDirection; + internal bool stretch; + internal float mix; public IkConstraintData Data { get { return data; } } public int Order { get { return data.order; } } - public ExposedList Bones { get { return bones; } } - public Bone Target { get { return target; } set { target = value; } } - public int BendDirection { get { return bendDirection; } set { bendDirection = value; } } - public float Mix { get { return mix; } set { mix = value; } } + + /// The bones that will be modified by this IK constraint. + public ExposedList Bones { + get { return bones; } + } + + /// The bone that is the IK target. + public Bone Target { + get { return target; } + set { target = value; } + } + + /// Controls the bend direction of the IK bones, either 1 or -1. + public int BendDirection { + get { return bendDirection; } + set { bendDirection = value; } + } + + /// + /// When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. + /// IF the parent bone has nonuniform scale, stretching is not applied. + public bool Stretch { + get { return stretch; } + set { stretch = value; } + } + + /// A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. + public float Mix { + get { return mix; } + set { mix = value; } + } public IkConstraint (IkConstraintData data, Skeleton skeleton) { if (data == null) throw new ArgumentNullException("data", "data cannot be null."); @@ -51,6 +79,7 @@ namespace Spine { this.data = data; mix = data.mix; bendDirection = data.bendDirection; + stretch = data.stretch; bones = new ExposedList(data.bones.Count); foreach (BoneData boneData in data.bones) @@ -68,10 +97,10 @@ namespace Spine { ExposedList bones = this.bones; switch (bones.Count) { case 1: - Apply(bones.Items[0], target.worldX, target.worldY, mix); + Apply(bones.Items[0], target.worldX, target.worldY, stretch, mix); break; case 2: - Apply(bones.Items[0], bones.Items[1], target.worldX, target.worldY, bendDirection, mix); + Apply(bones.Items[0], bones.Items[1], target.worldX, target.worldY, bendDirection, stretch, mix); break; } } @@ -82,7 +111,7 @@ namespace Spine { /// Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified /// in the world coordinate system. - static public void Apply (Bone bone, float targetX, float targetY, float alpha) { + static public void Apply (Bone bone, float targetX, float targetY, bool stretch, float alpha) { if (!bone.appliedValid) bone.UpdateAppliedTransform(); Bone p = bone.parent; float id = 1 / (p.a * p.d - p.b * p.c); @@ -92,15 +121,21 @@ namespace Spine { if (bone.ascaleX < 0) rotationIK += 180; if (rotationIK > 180) rotationIK -= 360; - else if (rotationIK < -180) rotationIK += 360; - bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, bone.ascaleX, bone.ascaleY, bone.ashearX, + else if (rotationIK < -180) + rotationIK += 360; + float sx = bone.ascaleX; + if (stretch) { + float b = bone.data.length * sx, dd = (float)Math.Sqrt(tx * tx + ty * ty); + if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha + 1; + } + bone.UpdateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, bone.ascaleY, bone.ashearX, bone.ashearY); } /// Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as /// possible. The target is specified in the world coordinate system. /// A direct descendant of the parent bone. - static public void Apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, float alpha) { + static public void Apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, bool stretch, float alpha) { if (alpha == 0) { child.UpdateWorldTransform (); return; @@ -108,7 +143,7 @@ namespace Spine { //float px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX; if (!parent.appliedValid) parent.UpdateAppliedTransform(); if (!child.appliedValid) child.UpdateAppliedTransform(); - float px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, csx = child.ascaleX; + float px = parent.ax, py = parent.ay, psx = parent.ascaleX, sx = psx, psy = parent.ascaleY, csx = child.ascaleX; int os1, os2, s2; if (psx < 0) { psx = -psx; @@ -144,17 +179,20 @@ namespace Spine { c = pp.c; d = pp.d; float id = 1 / (a * d - b * c), x = targetX - pp.worldX, y = targetY - pp.worldY; - float tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + float tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py, dd = tx * tx + ty * ty; x = cwx - pp.worldX; y = cwy - pp.worldY; float dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; float l1 = (float)Math.Sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; if (u) { l2 *= psx; - float cos = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); + float cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); if (cos < -1) cos = -1; - else if (cos > 1) cos = 1; + else if (cos > 1) { + cos = 1; + if (stretch && l1 + l2 > 0.0001f) sx *= ((float)Math.Sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + } a2 = (float)Math.Acos(cos) * bendDir; a = l1 + l2 * cos; b = l2 * (float)Math.Sin(a2); @@ -162,7 +200,7 @@ namespace Spine { } else { a = psx * l2; b = psy * l2; - float aa = a * a, bb = b * b, dd = tx * tx + ty * ty, ta = (float)Math.Atan2(ty, tx); + float aa = a * a, bb = b * b, ta = (float)Math.Atan2(ty, tx); c = bb * l1 * l1 + aa * dd - aa * bb; float c1 = -2 * bb * l1, c2 = bb - aa; d = c1 * c1 - 4 * c2 * c; @@ -215,7 +253,7 @@ namespace Spine { if (a1 > 180) a1 -= 360; else if (a1 < -180) a1 += 360; - parent.UpdateWorldTransform(px, py, rotation + a1 * alpha, parent.scaleX, parent.ascaleY, 0, 0); + parent.UpdateWorldTransform(px, py, rotation + a1 * alpha, sx, parent.ascaleY, 0, 0); rotation = child.arotation; a2 = ((a2 + os) * MathUtils.RadDeg - child.ashearX) * s2 + os2 - rotation; if (a2 > 180) diff --git a/spine-csharp/src/IkConstraintData.cs b/spine-csharp/src/IkConstraintData.cs index b0b0cf0ce..e1b25a3d2 100644 --- a/spine-csharp/src/IkConstraintData.cs +++ b/spine-csharp/src/IkConstraintData.cs @@ -39,6 +39,7 @@ namespace Spine { internal List bones = new List(); internal BoneData target; internal int bendDirection = 1; + internal bool stretch; internal float mix = 1; /// The IK constraint's name, which is unique within the skeleton. @@ -68,6 +69,14 @@ namespace Spine { set { bendDirection = value; } } + /// + /// When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. + /// If the bone has local nonuniform scale, stretching is not applied. + public bool Stretch { + get { return stretch; } + set { stretch = value; } + } + public float Mix { get { return mix; } set { mix = value; } } public IkConstraintData (string name) { diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index f774e0490..2ce1b0df4 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -309,6 +309,7 @@ namespace Spine { for (int i = 0, n = ikConstraints.Count; i < n; i++) { IkConstraint constraint = ikConstraintsItems[i]; constraint.bendDirection = constraint.data.bendDirection; + constraint.stretch = constraint.data.stretch; constraint.mix = constraint.data.mix; } diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index 5402df094..fc46572e2 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -210,6 +210,7 @@ namespace Spine { data.target = skeletonData.bones.Items[ReadVarint(input, true)]; data.mix = ReadFloat(input); data.bendDirection = ReadSByte(input); + data.stretch = ReadBoolean(input); skeletonData.ikConstraints.Add(data); } @@ -648,7 +649,7 @@ namespace Spine { IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount); timeline.ikConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { - timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadSByte(input)); + timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadSByte(input), ReadBoolean(input)); if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); } timelines.Add(timeline); diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index 37047feb1..5ba575a80 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -182,6 +182,7 @@ namespace Spine { if (data.target == null) throw new Exception("Target bone not found: " + targetName); data.bendDirection = GetBoolean(constraintMap, "bendPositive", true) ? 1 : -1; + data.stretch = GetBoolean(constraintMap, "stretch", false); data.mix = GetFloat(constraintMap, "mix", 1); skeletonData.ikConstraints.Add(data); @@ -597,7 +598,8 @@ namespace Spine { float time = (float)valueMap["time"]; float mix = GetFloat(valueMap, "mix", 1); bool bendPositive = GetBoolean(valueMap, "bendPositive", true); - timeline.SetFrame(frameIndex, time, mix, bendPositive ? 1 : -1); + bool stretch = GetBoolean(valueMap, "stretch", false); + timeline.SetFrame(frameIndex, time, mix, bendPositive ? 1 : -1, stretch); ReadCurve(valueMap, timeline, frameIndex); frameIndex++; } diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java index 629e22303..62c154f55 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/AnimationStateTests.java @@ -30,6 +30,7 @@ package com.esotericsoftware.spine; +import java.lang.reflect.Field; import java.util.concurrent.atomic.AtomicInteger; import com.badlogic.gdx.Files.FileType; @@ -803,7 +804,8 @@ public class AnimationStateTests { expected.addAll(expectedArray); stateData = new AnimationStateData(skeletonData); state = new AnimationState(stateData); - state.trackEntryPool = new Pool() { + + Pool trackEntryPool = new Pool() { public TrackEntry obtain () { TrackEntry entry = super.obtain(); entryCount++; @@ -821,6 +823,14 @@ public class AnimationStateTests { super.free(entry); } }; + try { + Field field = state.getClass().getDeclaredField("trackEntryPool"); + field.setAccessible(true); + field.set(state, trackEntryPool); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + time = 0; fail = false; log(test + ": " + description); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java index 6fa9f2d8c..87e9eba9c 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java @@ -1295,15 +1295,15 @@ public class Animation { } } - /** Changes an IK constraint's {@link IkConstraint#getMix()}, {@link IkConstraint#getBendDirection()}, and - * {@link IkConstraint#getStretch()}. */ + /** Changes an IK constraint's {@link IkConstraint#getMix()}, {@link IkConstraint#getBendDirection()}, + * {@link IkConstraint#getStretch()}, and {@link IkConstraint#getCompress()}. */ static public class IkConstraintTimeline extends CurveTimeline { - static public final int ENTRIES = 4; - static private final int PREV_TIME = -4, PREV_MIX = -3, PREV_BEND_DIRECTION = -2, PREV_STRETCH = -1; - static private final int MIX = 1, BEND_DIRECTION = 2, STRETCH = 3; + static public final int ENTRIES = 5; + static private final int PREV_TIME = -5, PREV_MIX = -4, PREV_BEND_DIRECTION = -3, PREV_COMPRESS = -2, PREV_STRETCH = -1; + static private final int MIX = 1, BEND_DIRECTION = 2, COMPRESS = 3, STRETCH = 4; int ikConstraintIndex; - private final float[] frames; // time, mix, bendDirection, ... + private final float[] frames; // time, mix, bendDirection, compress, stretch, ... public IkConstraintTimeline (int frameCount) { super(frameCount); @@ -1324,17 +1324,18 @@ public class Animation { return ikConstraintIndex; } - /** The time in seconds, mix, and bend direction for each key frame. */ + /** The time in seconds, mix, bend direction, compress, and stretch for each key frame. */ public float[] getFrames () { return frames; } - /** Sets the time in seconds, mix, and bend direction for the specified key frame. */ - public void setFrame (int frameIndex, float time, float mix, int bendDirection, boolean stretch) { + /** Sets the time in seconds, mix, bend direction, compress, and stretch for the specified key frame. */ + public void setFrame (int frameIndex, float time, float mix, int bendDirection, boolean compress, boolean stretch) { frameIndex *= ENTRIES; frames[frameIndex] = time; frames[frameIndex + MIX] = mix; frames[frameIndex + BEND_DIRECTION] = bendDirection; + frames[frameIndex + COMPRESS] = compress ? 1 : 0; frames[frameIndex + STRETCH] = stretch ? 1 : 0; } @@ -1348,11 +1349,13 @@ public class Animation { case setup: constraint.mix = constraint.data.mix; constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; return; case first: constraint.mix += (constraint.data.mix - constraint.mix) * alpha; constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } return; @@ -1363,15 +1366,18 @@ public class Animation { constraint.mix = constraint.data.mix + (frames[frames.length + PREV_MIX] - constraint.data.mix) * alpha; if (direction == out) { constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } else { constraint.bendDirection = (int)frames[frames.length + PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + PREV_COMPRESS] != 0; constraint.stretch = frames[frames.length + PREV_STRETCH] != 0; } } else { constraint.mix += (frames[frames.length + PREV_MIX] - constraint.mix) * alpha; if (direction == in) { constraint.bendDirection = (int)frames[frames.length + PREV_BEND_DIRECTION]; + constraint.compress = frames[frames.length + PREV_COMPRESS] != 0; constraint.stretch = frames[frames.length + PREV_STRETCH] != 0; } } @@ -1388,15 +1394,18 @@ public class Animation { constraint.mix = constraint.data.mix + (mix + (frames[frame + MIX] - mix) * percent - constraint.data.mix) * alpha; if (direction == out) { constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; constraint.stretch = constraint.data.stretch; } else { constraint.bendDirection = (int)frames[frame + PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + PREV_COMPRESS] != 0; constraint.stretch = frames[frame + PREV_STRETCH] != 0; } } else { constraint.mix += (mix + (frames[frame + MIX] - mix) * percent - constraint.mix) * alpha; if (direction == in) { constraint.bendDirection = (int)frames[frame + PREV_BEND_DIRECTION]; + constraint.compress = frames[frame + PREV_COMPRESS] != 0; constraint.stretch = frames[frame + PREV_STRETCH] != 0; } } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java index ebf790680..69626a8b5 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/AnimationState.java @@ -38,6 +38,7 @@ import com.badlogic.gdx.utils.IntArray; import com.badlogic.gdx.utils.IntSet; import com.badlogic.gdx.utils.Pool; import com.badlogic.gdx.utils.Pool.Poolable; + import com.esotericsoftware.spine.Animation.AttachmentTimeline; import com.esotericsoftware.spine.Animation.DrawOrderTimeline; import com.esotericsoftware.spine.Animation.MixBlend; @@ -62,20 +63,20 @@ public class AnimationState { /** 1) This is the first timeline to set this property.
* 2) The next track entry to be applied does have a timeline to set this property.
* 3) The next track entry after that one does not have a timeline to set this property.
- * Result: Mix from the setup pose to the timeline pose, but avoid the "dipping" problem by not using the mix percentage. This - * means the timeline pose won't mix out toward the setup pose. A subsequent timeline will set this property using a mix. */ - static private final int DIP = 2; + * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading animations + * that key the same property. A subsequent timeline will set this property using a mix. */ + static private final int HOLD = 2; /** 1) This is the first timeline to set this property.
* 2) The next track entry to be applied does have a timeline to set this property.
* 3) The next track entry after that one does have a timeline to set this property.
- * 4) timelineDipMix stores the first subsequent track entry that does not have a timeline to set this property.
- * Result: This is the same as DIP except the mix percentage from the timelineDipMix track entry is used. This handles when - * more than 2 track entries in a row have a timeline which sets the same property.
- * Eg, A -> B -> C -> D where A, B, and C have a timeline to set the same property, but D does not. When A is applied, A's mix - * percentage is not used to avoid dipping, however a later track entry (D, the first entry without a timeline which sets the - * property) is actually mixing out A (which affects B and C). Without using D's mix percentage, A would be applied fully until - * mixed out, causing snapping. */ - static private final int DIP_MIX = 3; + * 4) timelineHoldMix stores the first subsequent track entry that does not have a timeline to set this property.
+ * Result: The same as HOLD except the mix percentage from the timelineHoldMix track entry is used. This handles when more than + * 2 track entries in a row have a timeline that sets the same property.
+ * Eg, A -> B -> C -> D where A, B, and C have a timeline setting same property, but D does not. When A is applied, to avoid + * "dipping" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A + * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into + * place. */ + static private final int HOLD_MIX = 3; private AnimationStateData data; final Array tracks = new Array(); @@ -83,11 +84,10 @@ public class AnimationState { final Array listeners = new Array(); private final EventQueue queue = new EventQueue(); private final IntSet propertyIDs = new IntSet(); - private final Array mixingTo = new Array(); boolean animationsChanged; private float timeScale = 1; - Pool trackEntryPool = new Pool() { + final Pool trackEntryPool = new Pool() { protected Object newObject () { return new TrackEntry(); } @@ -147,6 +147,7 @@ public class AnimationState { // End mixing from entries once all have completed. TrackEntry from = current.mixingFrom; current.mixingFrom = null; + if (from != null) from.mixingTo = null; while (from != null) { queue.end(from); from = from.mixingFrom; @@ -174,6 +175,7 @@ public class AnimationState { // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame). if (from.totalAlpha == 0 || to.mixDuration == 0) { to.mixingFrom = from.mixingFrom; + if (from.mixingFrom != null) from.mixingFrom.mixingTo = to; to.interruptAlpha = from.interruptAlpha; queue.end(from); } @@ -213,11 +215,11 @@ public class AnimationState { float animationLast = current.animationLast, animationTime = current.getAnimationTime(); int timelineCount = current.animation.timelines.size; Object[] timelines = current.animation.timelines.items; - if (mix == 1 || blend == MixBlend.add) { + if (i == 0 && (mix == 1 || blend == MixBlend.add)) { for (int ii = 0; ii < timelineCount; ii++) ((Timeline)timelines[ii]).apply(skeleton, animationLast, animationTime, events, mix, blend, MixDirection.in); } else { - int[] timelineData = current.timelineData.items; + int[] timelineMode = current.timelineMode.items; boolean firstFrame = current.timelinesRotation.size == 0; if (firstFrame) current.timelinesRotation.setSize(timelineCount << 1); @@ -225,7 +227,7 @@ public class AnimationState { for (int ii = 0; ii < timelineCount; ii++) { Timeline timeline = (Timeline)timelines[ii]; - MixBlend timelineBlend = timelineData[ii] == SUBSEQUENT ? blend : MixBlend.setup; + MixBlend timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; if (timeline instanceof RotateTimeline) { applyRotateTimeline(timeline, skeleton, animationTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); @@ -262,14 +264,14 @@ public class AnimationState { float animationLast = from.animationLast, animationTime = from.getAnimationTime(); int timelineCount = from.animation.timelines.size; Object[] timelines = from.animation.timelines.items; - float alphaDip = from.alpha * to.interruptAlpha, alphaMix = alphaDip * (1 - mix); + float alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); if (blend == MixBlend.add) { for (int i = 0; i < timelineCount; i++) ((Timeline)timelines[i]).apply(skeleton, animationLast, animationTime, events, alphaMix, blend, MixDirection.out); } else { - int[] timelineData = from.timelineData.items; - Object[] timelineDipMix = from.timelineDipMix.items; + int[] timelineMode = from.timelineMode.items; + Object[] timelineHoldMix = from.timelineHoldMix.items; boolean firstFrame = from.timelinesRotation.size == 0; if (firstFrame) from.timelinesRotation.setSize(timelineCount << 1); @@ -280,7 +282,7 @@ public class AnimationState { Timeline timeline = (Timeline)timelines[i]; MixBlend timelineBlend; float alpha; - switch (timelineData[i]) { + switch (timelineMode[i]) { case SUBSEQUENT: if (!attachments && timeline instanceof AttachmentTimeline) continue; if (!drawOrder && timeline instanceof DrawOrderTimeline) continue; @@ -291,14 +293,14 @@ public class AnimationState { timelineBlend = MixBlend.setup; alpha = alphaMix; break; - case DIP: + case HOLD: timelineBlend = MixBlend.setup; - alpha = alphaDip; + alpha = alphaHold; break; default: timelineBlend = MixBlend.setup; - TrackEntry dipMix = (TrackEntry)timelineDipMix[i]; - alpha = alphaDip * Math.max(0, 1 - dipMix.mixTime / dipMix.mixDuration); + TrackEntry holdMix = (TrackEntry)timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); break; } from.totalAlpha += alpha; @@ -356,10 +358,10 @@ public class AnimationState { // Mix between rotations using the direction of the shortest route on the first frame. float r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation; float total, diff = r2 - r1; + diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; if (diff == 0) total = timelinesRotation[i]; else { - diff -= (16384 - (int)(16384.499999999996 - diff / 360)) * 360; float lastTotal, lastDiff; if (firstFrame) { lastTotal = 0; @@ -448,6 +450,7 @@ public class AnimationState { if (from == null) break; queue.end(from); entry.mixingFrom = null; + entry.mixingTo = null; entry = from; } @@ -463,6 +466,7 @@ public class AnimationState { if (from != null) { if (interrupt) queue.interrupt(from); current.mixingFrom = from; + from.mixingTo = current; current.mixTime = 0; // Store the interrupted mix percentage. @@ -625,6 +629,7 @@ public class AnimationState { entry.trackIndex = trackIndex; entry.animation = animation; entry.loop = loop; + entry.holdPrevious = false; entry.eventThreshold = 0; entry.attachmentThreshold = 0; @@ -662,15 +667,67 @@ public class AnimationState { animationsChanged = false; IntSet propertyIDs = this.propertyIDs; - propertyIDs.clear(); - Array mixingTo = this.mixingTo; + propertyIDs.clear(2048); for (int i = 0, n = tracks.size; i < n; i++) { TrackEntry entry = tracks.get(i); - if (entry != null && (i == 0 || entry.mixBlend != MixBlend.add)) entry.setTimelineData(null, mixingTo, propertyIDs); + if (entry == null) continue; + // Move to last entry, then iterate in reverse (the order animations are applied). + while (entry.mixingFrom != null) + entry = entry.mixingFrom; + do { + if (entry.mixingTo == null || entry.mixBlend != MixBlend.add) setTimelineModes(entry); + entry = entry.mixingTo; + } while (entry != null); } } + private void setTimelineModes (TrackEntry entry) { + TrackEntry to = entry.mixingTo; + Object[] timelines = entry.animation.timelines.items; + int timelinesCount = entry.animation.timelines.size; + int[] timelineMode = entry.timelineMode.setSize(timelinesCount); + entry.timelineHoldMix.clear(); + Object[] timelineHoldMix = entry.timelineHoldMix.setSize(timelinesCount); + IntSet propertyIDs = this.propertyIDs; + + if (to != null && to.holdPrevious) { + for (int i = 0; i < timelinesCount; i++) { + propertyIDs.add(((Timeline)timelines[i]).getPropertyId()); + timelineMode[i] = HOLD; + } + return; + } + + outer: + for (int i = 0; i < timelinesCount; i++) { + int id = ((Timeline)timelines[i]).getPropertyId(); + if (!propertyIDs.add(id)) + timelineMode[i] = SUBSEQUENT; + else if (to == null || !hasTimeline(to, id)) + timelineMode[i] = FIRST; + else { + for (TrackEntry next = to.mixingTo; next != null; next = next.mixingTo) { + if (hasTimeline(next, id)) continue; + if (next.mixDuration > 0) { + timelineMode[i] = HOLD_MIX; + timelineHoldMix[i] = next; + continue outer; + } + break; + } + timelineMode[i] = HOLD; + } + } + } + + private boolean hasTimeline (TrackEntry entry, int id) { + Object[] timelines = entry.animation.timelines.items; + for (int i = 0, n = entry.animation.timelines.size; i < n; i++) + if (((Timeline)timelines[i]).getPropertyId() == id) return true; + return false; + } + /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */ public TrackEntry getCurrent (int trackIndex) { if (trackIndex >= tracks.size) return null; @@ -744,74 +801,30 @@ public class AnimationState { * References to a track entry must not be kept after the {@link AnimationStateListener#dispose(TrackEntry)} event occurs. */ static public class TrackEntry implements Poolable { Animation animation; - TrackEntry next, mixingFrom; + TrackEntry next, mixingFrom, mixingTo; AnimationStateListener listener; int trackIndex; - boolean loop; + boolean loop, holdPrevious; float eventThreshold, attachmentThreshold, drawOrderThreshold; float animationStart, animationEnd, animationLast, nextAnimationLast; float delay, trackTime, trackLast, nextTrackLast, trackEnd, timeScale; float alpha, mixTime, mixDuration, interruptAlpha, totalAlpha; MixBlend mixBlend = MixBlend.replace; - final IntArray timelineData = new IntArray(); - final Array timelineDipMix = new Array(); + final IntArray timelineMode = new IntArray(); + final Array timelineHoldMix = new Array(); final FloatArray timelinesRotation = new FloatArray(); public void reset () { next = null; mixingFrom = null; + mixingTo = null; animation = null; listener = null; - timelineData.clear(); - timelineDipMix.clear(); + timelineMode.clear(); + timelineHoldMix.clear(); timelinesRotation.clear(); } - /** @param to May be null. */ - TrackEntry setTimelineData (TrackEntry to, Array mixingToArray, IntSet propertyIDs) { - if (to != null) mixingToArray.add(to); - TrackEntry lastEntry = mixingFrom != null ? mixingFrom.setTimelineData(this, mixingToArray, propertyIDs) : this; - if (to != null) mixingToArray.pop(); - - Object[] mixingTo = mixingToArray.items; - int mixingToLast = mixingToArray.size - 1; - Object[] timelines = animation.timelines.items; - int timelinesCount = animation.timelines.size; - int[] timelineData = this.timelineData.setSize(timelinesCount); - timelineDipMix.clear(); - Object[] timelineDipMix = this.timelineDipMix.setSize(timelinesCount); - outer: - for (int i = 0; i < timelinesCount; i++) { - int id = ((Timeline)timelines[i]).getPropertyId(); - if (!propertyIDs.add(id)) - timelineData[i] = SUBSEQUENT; - else if (to == null || !to.hasTimeline(id)) - timelineData[i] = FIRST; - else { - for (int ii = mixingToLast; ii >= 0; ii--) { - TrackEntry entry = (TrackEntry)mixingTo[ii]; - if (!entry.hasTimeline(id)) { - if (entry.mixDuration > 0) { - timelineData[i] = DIP_MIX; - timelineDipMix[i] = entry; - continue outer; - } - break; - } - } - timelineData[i] = DIP; - } - } - return lastEntry; - } - - private boolean hasTimeline (int id) { - Object[] timelines = animation.timelines.items; - for (int i = 0, n = animation.timelines.size; i < n; i++) - if (((Timeline)timelines[i]).getPropertyId() == id) return true; - return false; - } - /** The index of the track where this track entry is either current or queued. *

* See {@link AnimationState#getCurrent(int)}. */ @@ -1054,6 +1067,25 @@ public class AnimationState { return mixingFrom; } + public void setHoldPrevious (boolean holdPrevious) { + this.holdPrevious = holdPrevious; + } + + /** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead + * of being mixed out. + *

+ * When mixing between animations that key the same property, if a lower track also keys that property then the value will + * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0% + * while the second animation mixes from 0% to 100%. Setting holdPrevious to true applies the first animation + * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which + * keys the property, only when a higher track also keys the property. + *

+ * Snapping will occur if holdPrevious is true and this animation does not key all the same properties as the + * previous animation. */ + public boolean getHoldPrevious () { + return holdPrevious; + } + /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the * long way around when using {@link #alpha} and starting animations on other tracks. *

@@ -1165,7 +1197,7 @@ public class AnimationState { start, interrupt, end, dispose, complete, event } - /** The interface which can be implemented to receive TrackEntry events. + /** The interface to implement for receiving TrackEntry events. *

* See TrackEntry {@link TrackEntry#setListener(AnimationStateListener)} and AnimationState * {@link AnimationState#addListener(AnimationStateListener)}. */ diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index 77623cbad..4fbcebab4 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -43,7 +43,7 @@ public class IkConstraint implements Constraint { final Array bones; Bone target; int bendDirection; - boolean stretch; + boolean compress, stretch; float mix = 1; public IkConstraint (IkConstraintData data, Skeleton skeleton) { @@ -52,6 +52,7 @@ public class IkConstraint implements Constraint { this.data = data; mix = data.mix; bendDirection = data.bendDirection; + compress = data.compress; stretch = data.stretch; bones = new Array(data.bones.size); @@ -71,6 +72,7 @@ public class IkConstraint implements Constraint { target = skeleton.bones.get(constraint.target.data.index); mix = constraint.mix; bendDirection = constraint.bendDirection; + compress = constraint.compress; stretch = constraint.stretch; } @@ -84,7 +86,7 @@ public class IkConstraint implements Constraint { Array bones = this.bones; switch (bones.size) { case 1: - apply(bones.first(), target.worldX, target.worldY, stretch, mix); + apply(bones.first(), target.worldX, target.worldY, compress, stretch, data.uniform, mix); break; case 2: apply(bones.first(), bones.get(1), target.worldX, target.worldY, bendDirection, stretch, mix); @@ -128,8 +130,17 @@ public class IkConstraint implements Constraint { this.bendDirection = bendDirection; } - /** When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. If the parent bone has local - * nonuniform scale, stretching is not applied. */ + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + public boolean getCompress () { + return compress; + } + + public void setCompress (boolean compress) { + this.compress = compress; + } + + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ public boolean getStretch () { return stretch; } @@ -148,7 +159,8 @@ public class IkConstraint implements Constraint { } /** Applies 1 bone IK. The target is specified in the world coordinate system. */ - static public void apply (Bone bone, float targetX, float targetY, boolean stretch, float alpha) { + static public void apply (Bone bone, float targetX, float targetY, boolean compress, boolean stretch, boolean uniform, + float alpha) { if (!bone.appliedValid) bone.updateAppliedTransform(); Bone p = bone.parent; float id = 1 / (p.a * p.d - p.b * p.c); @@ -158,14 +170,18 @@ public class IkConstraint implements Constraint { if (bone.ascaleX < 0) rotationIK += 180; if (rotationIK > 180) rotationIK -= 360; - else if (rotationIK < -180) rotationIK += 360; - float sx = bone.ascaleX; - if (stretch) { + else if (rotationIK < -180) // + rotationIK += 360; + float sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { float b = bone.data.length * sx, dd = (float)Math.sqrt(tx * tx + ty * ty); - if (dd > b && b > 0.0001f) sx *= (dd / b - 1) * alpha + 1; + if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001f) { + float s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) sy *= s; + } } - bone.updateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, bone.ascaleY, bone.ashearX, - bone.ashearY); + bone.updateWorldTransform(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); } /** Applies 2 bone IK. The target is specified in the world coordinate system. diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java index 81bceb23b..0ef63a675 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraintData.java @@ -41,7 +41,7 @@ public class IkConstraintData { final Array bones = new Array(); BoneData target; int bendDirection = 1; - boolean stretch; + boolean compress, stretch, uniform; float mix = 1; public IkConstraintData (String name) { @@ -78,25 +78,6 @@ public class IkConstraintData { this.target = target; } - /** Controls the bend direction of the IK bones, either 1 or -1. */ - public int getBendDirection () { - return bendDirection; - } - - public void setBendDirection (int bendDirection) { - this.bendDirection = bendDirection; - } - - /** When true, if the target is out of range, the parent bone is scaled on the X axis to reach it. If the parent bone has local - * nonuniform scale, stretching is not applied. */ - public boolean getStretch () { - return stretch; - } - - public void setStretch (boolean stretch) { - this.stretch = stretch; - } - /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ public float getMix () { return mix; @@ -106,6 +87,44 @@ public class IkConstraintData { this.mix = mix; } + /** Controls the bend direction of the IK bones, either 1 or -1. */ + public int getBendDirection () { + return bendDirection; + } + + public void setBendDirection (int bendDirection) { + this.bendDirection = bendDirection; + } + + /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ + public boolean getCompress () { + return compress; + } + + public void setCompress (boolean compress) { + this.compress = compress; + } + + /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained + * and the parent bone has local nonuniform scale, stretch is not applied. */ + public boolean getStretch () { + return stretch; + } + + public void setStretch (boolean stretch) { + this.stretch = stretch; + } + + /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone + * is scaled on both the X and Y axes. */ + public boolean getUniform () { + return uniform; + } + + public void setUniform (boolean uniform) { + this.uniform = uniform; + } + public String toString () { return name; } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index 1e3168037..498dd54d2 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -394,9 +394,10 @@ public class Skeleton { Array ikConstraints = this.ikConstraints; for (int i = 0, n = ikConstraints.size; i < n; i++) { IkConstraint constraint = ikConstraints.get(i); - constraint.bendDirection = constraint.data.bendDirection; - constraint.stretch = constraint.data.stretch; constraint.mix = constraint.data.mix; + constraint.bendDirection = constraint.data.bendDirection; + constraint.compress = constraint.data.compress; + constraint.stretch = constraint.data.stretch; } Array transformConstraints = this.transformConstraints; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 1d5e0959b..3f88d8651 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -232,7 +232,9 @@ public class SkeletonBinary { data.target = skeletonData.bones.get(input.readInt(true)); data.mix = input.readFloat(); data.bendDirection = input.readByte(); + data.compress = input.readBoolean(); data.stretch = input.readBoolean(); + data.uniform = input.readBoolean(); skeletonData.ikConstraints.add(data); } @@ -307,7 +309,7 @@ public class SkeletonBinary { data.intValue = input.readInt(false); data.floatValue = input.readFloat(); data.stringValue = input.readString(); - data.audioPath = input.readString(); + data.audioPath = input.readString(); skeletonData.events.add(data); } @@ -661,7 +663,8 @@ public class SkeletonBinary { IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount); timeline.ikConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { - timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readByte(), input.readBoolean()); + timeline.setFrame(frameIndex, input.readFloat(), input.readFloat(), input.readByte(), input.readBoolean(), + input.readBoolean()); if (frameIndex < frameCount - 1) readCurve(input, frameIndex, timeline); } timelines.add(timeline); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 3120595b6..9ec1d11ab 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -185,9 +185,11 @@ public class SkeletonJson { data.target = skeletonData.findBone(targetName); if (data.target == null) throw new SerializationException("IK target bone not found: " + targetName); - data.bendDirection = constraintMap.getBoolean("bendPositive", true) ? 1 : -1; - data.stretch = constraintMap.getBoolean("stretch", false); data.mix = constraintMap.getFloat("mix", 1); + data.bendDirection = constraintMap.getBoolean("bendPositive", true) ? 1 : -1; + data.compress = constraintMap.getBoolean("compress", false); + data.stretch = constraintMap.getBoolean("stretch", false); + data.uniform = constraintMap.getBoolean("uniform", false); skeletonData.ikConstraints.add(data); } @@ -569,7 +571,8 @@ public class SkeletonJson { int frameIndex = 0; for (JsonValue valueMap = constraintMap.child; valueMap != null; valueMap = valueMap.next) { timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("mix", 1), - valueMap.getBoolean("bendPositive", true) ? 1 : -1, valueMap.getBoolean("stretch", false)); + valueMap.getBoolean("bendPositive", true) ? 1 : -1, valueMap.getBoolean("compress", false), + valueMap.getBoolean("stretch", false)); readCurve(valueMap, timeline, frameIndex); frameIndex++; } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs index 7bf8406e6..73396814c 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs @@ -375,6 +375,7 @@ namespace Spine.Unity.Editor { EditorGUI.BeginChangeCheck(); c.Mix = EditorGUILayout.Slider("Mix", c.Mix, MixMin, MixMax); c.BendDirection = EditorGUILayout.Toggle(SpineInspectorUtility.TempContent("Bend Clockwise", tooltip: "IkConstraint.BendDirection == 1 if clockwise; -1 if counterclockwise."), c.BendDirection > 0) ? 1 : -1; + c.Stretch = EditorGUILayout.Toggle(SpineInspectorUtility.TempContent("Stretch", tooltip: "Stretch the parent bone when the target is out of range. Not applied when parent bone has nonuniform scale."), c.Stretch); if (EditorGUI.EndChangeCheck()) requireRepaint = true; EditorGUILayout.Space(); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs index d7ab79121..8ecc74075 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineEditorUtilities.cs @@ -905,7 +905,7 @@ namespace Spine.Unity.Editor { } if (!match) - Debug.LogWarningFormat("Skeleton '{0}' (exported with Spine {1}) may be incompatible with your runtime version: spine-unity v{2}", asset.name, rawVersion, primaryRuntimeVersionDebugString); + Debug.LogWarningFormat("Skeleton '{0}' (exported with Spine {1}) may be incompatible with your runtime version: spine-csharp v{2}", asset.name, rawVersion, primaryRuntimeVersionDebugString); } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs index ed791b533..8eb7508c6 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhost.cs @@ -45,10 +45,9 @@ namespace Spine.Unity.Modules { public bool ghostingEnabled = true; [Tooltip("The time between invididual ghost pieces being spawned.")] [UnityEngine.Serialization.FormerlySerializedAs("spawnRate")] - public float spawnInterval = 0.05f; + public float spawnInterval = 1f/30f; [Tooltip("Maximum number of ghosts that can exist at a time. If the fade speed is not fast enough, the oldest ghost will immediately disappear to enforce the maximum number.")] public int maximumGhosts = 10; - [Tooltip("Fadespeed 1 means it will take 1 second for a piece to fade out. 2 means it will take 1/2 second. 10 means it will take 1/10 of a second.")] public float fadeSpeed = 10; [Header("Rendering")] diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs index e9f86c881..37e4213f4 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ghost/SkeletonGhostRenderer.cs @@ -35,17 +35,23 @@ using System.Collections; namespace Spine.Unity.Modules { public class SkeletonGhostRenderer : MonoBehaviour { + static readonly Color32 TransparentBlack = new Color32(0, 0, 0, 0); + const string colorPropertyName = "_Color"; - public float fadeSpeed = 10; - - Color32[] colors; - Color32 black = new Color32(0, 0, 0, 0); + float fadeSpeed = 10; + Color32 startColor; MeshFilter meshFilter; MeshRenderer meshRenderer; + MaterialPropertyBlock mpb; + int colorId; + void Awake () { meshRenderer = gameObject.AddComponent(); meshFilter = gameObject.AddComponent(); + + colorId = Shader.PropertyToID(colorPropertyName); + mpb = new MaterialPropertyBlock(); } public void Initialize (Mesh mesh, Material[] materials, Color32 color, bool additive, float speed, int sortingLayerID, int sortingOrder) { @@ -56,12 +62,9 @@ namespace Spine.Unity.Modules { meshRenderer.sortingLayerID = sortingLayerID; meshRenderer.sortingOrder = sortingOrder; meshFilter.sharedMesh = Instantiate(mesh); - colors = meshFilter.sharedMesh.colors32; - - if ((color.a + color.r + color.g + color.b) > 0) { - for (int i = 0; i < colors.Length; i++) - colors[i] = color; - } + startColor = color; + mpb.SetColor(colorId, color); + meshRenderer.SetPropertyBlock(mpb); fadeSpeed = speed; @@ -72,19 +75,17 @@ namespace Spine.Unity.Modules { } IEnumerator Fade () { - Color32 c; - for (int t = 0; t < 500; t++) { - bool breakout = true; - for (int i = 0; i < colors.Length; i++) { - c = colors[i]; - if (c.a > 0) - breakout = false; + Color32 c = startColor; + Color32 black = SkeletonGhostRenderer.TransparentBlack; - colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); - } - meshFilter.sharedMesh.colors32 = colors; + float t = 1f; + for (float hardTimeLimit = 5f; hardTimeLimit > 0; hardTimeLimit -= Time.deltaTime) { + c = Color32.Lerp(black, startColor, t); + mpb.SetColor(colorId, c); + meshRenderer.SetPropertyBlock(mpb); - if (breakout) + t = Mathf.Lerp(t, 0, Time.deltaTime * fadeSpeed); + if (t <= 0) break; yield return null; @@ -95,25 +96,20 @@ namespace Spine.Unity.Modules { } IEnumerator FadeAdditive () { - Color32 c; - Color32 black = this.black; + Color32 c = startColor; + Color32 black = SkeletonGhostRenderer.TransparentBlack; - for (int t = 0; t < 500; t++) { + float t = 1f; + + for (float hardTimeLimit = 5f; hardTimeLimit > 0; hardTimeLimit -= Time.deltaTime) { + c = Color32.Lerp(black, startColor, t); + mpb.SetColor(colorId, c); + meshRenderer.SetPropertyBlock(mpb); - bool breakout = true; - for (int i = 0; i < colors.Length; i++) { - c = colors[i]; - black.a = c.a; - if (c.r > 0 || c.g > 0 || c.b > 0) - breakout = false; - - colors[i] = Color32.Lerp(c, black, Time.deltaTime * fadeSpeed); - } - - meshFilter.sharedMesh.colors32 = colors; - - if (breakout) + t = Mathf.Lerp(t, 0, Time.deltaTime * fadeSpeed); + if (t <= 0) break; + yield return null; } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs index 8fa89962b..dae92d141 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs @@ -1,4 +1,4 @@ -/****************************************************************************** +/****************************************************************************** * Spine Runtimes Software License v2.5 * * Copyright (c) 2013-2016, Esoteric Software @@ -49,7 +49,8 @@ namespace Spine.Unity.Modules { } void Start () { - if (mirrorOnStart) StartMirroring(); + if (mirrorOnStart) + StartMirroring(); } void LateUpdate () { @@ -57,13 +58,16 @@ namespace Spine.Unity.Modules { } void OnDisable () { - if (restoreOnDisable) RestoreIndependentSkeleton(); + if (restoreOnDisable) + RestoreIndependentSkeleton(); } ///

Freeze the SkeletonGraphic on this GameObject, and use the source as the Skeleton to be rendered by the SkeletonGraphic. public void StartMirroring () { - if (source == null) return; - if (skeletonGraphic == null) return; + if (source == null) + return; + if (skeletonGraphic == null) + return; skeletonGraphic.startingAnimation = string.Empty; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs index 63c1a52b7..864593ae2 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs @@ -503,6 +503,7 @@ namespace Spine { ikc = skeleton.ikConstraints.Items[i]; ikc.mix = ikc.data.mix; ikc.bendDirection = ikc.data.bendDirection; + ikc.stretch = ikc.data.stretch; break; // TransformConstraint