From 064303c77ee3b6f2ddcf339fc5db0209478ced76 Mon Sep 17 00:00:00 2001 From: badlogic Date: Fri, 9 Dec 2016 17:28:08 +0100 Subject: [PATCH] [ue4] Added specifying mixing durations in skeleton data asset via editor or in code --- spine-ue4/Content/Maps/example.umap | Bin 630089 -> 630089 bytes .../Content/SpineBoy/SpineboyBlueprint.uasset | Bin 90874 -> 100737 bytes spine-ue4/Content/SpineBoy/spineboy.uasset | Bin 21036 -> 21406 bytes .../SpineSkeletonAnimationComponent.cpp | 11 ++--- .../Private/SpineSkeletonDataAsset.cpp | 44 +++++++++++++++++- .../Public/SpineSkeletonAnimationComponent.h | 5 +- .../Public/SpineSkeletonDataAsset.h | 34 ++++++++++++-- 7 files changed, 77 insertions(+), 17 deletions(-) diff --git a/spine-ue4/Content/Maps/example.umap b/spine-ue4/Content/Maps/example.umap index 16fd5f484418a237ea6a3504b62134ae1edb7d08..568164501f39257fca424e82a6be8c00ca41ed09 100644 GIT binary patch delta 160 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 H{crt0+erD( literal 90874 zcmeHw349bq_J0qeAR>pWpolU-QcuNz#Epk_j^tE=5rULGZp2 zkM+LR`$R=RU61wFT@Q4<&|Td1!ed>J<^R4_^`?7zdXDsb-jP z-mB`K^wyO_ul{lO?%i|t(zJiOG?6;c`SW>q@7U?N_}l&7$-1uO(ejb|5Nt>GTX*k2 zb#1?gPJQ`~>n8n@zc<0IIA7C{Pw}_tly%hpO6N|B5M62obkrTLX=RkZ*-O)o7zwDR z4a?HB(RAFk=)8W%UOjipT3=nCdB?pp9aT{WbUJGLYaO(w=4NWYLyck6%W{WJ)0=c( zP#=*yGAlvl0;*HNqA*P6OWh=b`ERpD#aM^(2rw&))J(osQN z)cTid-Cx}DWkxh!6ePT-sZDPUG`57aeIFhAQEwEit_w7_hDL=k6#-xCJZK7DHKe7!ED{V;LF`0gfLS<75%U0YqeYNEM{XtS!RjgZ=FGY?$U(^O@8OF;KE zmDOv*J6_fq!&Ooj@&~jLFCTIIetcKytJRydn|lXlL!c$~i+nA0dVN)6i?=b@+T>fR zo!a}$PWuAY)HKCkuLrf=2mQ^1j+L}DHv2-2{+6;uIcq;)&t&HW*z+KFMXBv`Li^vHaNCXN|JHAMfKbnTT+IrUv7wyG_lm$$XlX>UC> zb(N}7t%rnEO*Lk`vg6|;QKM3y>#JKz^40^skX~O(@(E51mb8WD`2&q18tp~87TVb6 zJJcvVMc3^YUlmo#IaqdNLbyq0}FHZ$BYU?BHPf0T-iDTqA~Do zjrH2go%&2a#0;g;)&niRrs+X_YD?2nZS@D&9)tN6u2#J?7}A?(=m8<{(?k0Xi=Zl$ zqHE6!-#?5h)lT-+>m?0D(Iob1db59#uSx5-ea;t9XOG|C6jq!b9q&FHidM@NAX}j= zJ-$ExgpQ*4678hX^?w%J`14)q|5Ro~_+=jo%eb9%O6$vXKb#cUS%H zroLwK<^BMfn}{;yb=Pg`Z!SZs9kxmlCGY)W->V^=Qqtu=s1#+ZeojbGUPY|Lh<7}C~iC;EEScxCnC~3_iLs*sO=-^r>vD4fse%4-W2{ ziJ5LGgzj;Xl95NZM$n1!fwN1s`)02134^HU2;T=WYWIKisc={dQC&xdXPVz1(jHrX z_1+MN6_KUgGxDo{^|Qmwt|*%_dq&B$i6x%OGVPE<=3Gx9Miha_Qg@zu<^-5=YcryA zW2zqiME1IgtYS#mQ8CwlcU|UXW<+=fWz=pTBYQ1tkS(OSPX1II(rv;J45D(XVx*Q` z@~HX0|%IX`*CVTyL!oN;zY4B^0&hGIO z)L5caPtnyfuxj%9K}|osYX)p?6lTmA zn3fjpp3bBy#1RaxT+a5W{g)~q&N9n;VXsV9^LTz-!Wt8o)m4tve);* z1S`W`l^>DQUB~Trga9G9kOG=@qiYr%wU`5jY;V5q!`oqc^+h4=(pzs2h#oA_>)Jy4 z^jbYI7m?QND7DnSoA=aE_y!Sogop5_oB#R?niWuK=x*DPeJUg;4Uks2|GINA_v9_d zB3@s}r=7B4*8o@-m$=7lKJP&hBvSe(3kn*%;Lie;QU*CJEsj11n1$s$ z>!h5C1C55_7S7g=9dOr=$(GL1J}7+ts$@&&YM(R)Z%npyo;EGiYny4PX7~b)K8j;2 z^pKVxxbR}34mRH6q56pz3yBMy*-12x9(fIFRr-RVNFx^1x*p!)73gjyEpB`Pij~QM z9#|SI7chUFuStbU$IhD7go!y>Z>C8t4CwlP_dSSlm!K*inc9$c>dxgy!G}wrF|$s6 z@R1_Shsk=#CnoET7585RE+_lz+nRJ*LyG9O$`_iawf0}<>jM-y(8fCIG;48qc6~JK z_Mw=5q928a6}*jp;3iz+j9s0@{KI4ull0X)I^K>B08r%*9;ZEh!kP{y!0}q3{BwOD zRU)W8@}Dc4L=#v>f4kSy`@;rJK@ilWoqAQ-i?~$=UqAYD7p#W74R@hr`+c7w=APP$ z>FR5usIWZXZw}*!bU(18pb}`r>hasJE**yPgSRE%43N zwP3}XgCJvd9~S9V!*9?rZgMDOXms#I|D{2`jYVW+dd!gt-z+X3!7KckbZ4KmWwc$T(DP;I$ zJvdKA&f4Tnql)2MiT64aJg9A1eB)+w1+^;E-rcs(2@ok)pcO?(U!rwd`}9pMP=rlG}Scsp#y!LsCkg8fqvqK1IP1Qle;T;e;LA!!l@2(Zcf_AlUkzPNeQC~c@ zp&>}q_mpS<=?%kY`u)u%&9o2+X|sEs^BlMp0a!R})g~NVFLnh4xMp5kb8U;Su}K6T z{dewjKXgY%DcbHw*DVHza+^c>j-wAca}7qay0m&W`lV&P{@T-`dAXhe12nytXu**&3I6{=}$)~l(mu8rH6uR-i;(L+X9$+(fE(BZmG z-wUo9=eGE0;i5~8oO07X1K{|p87zk50Q1TM}br;*|hL_M7Sk3B(rDpRk#;gpB{k+ zg>*zUY)zB|F=(C6c;X?j5d@remqz%+w#5sR&o~ckgu(R)LAo6O$Gb3zqvM?cJ*NH} zMmP#X0s6hYo_hesRp6xmd?<5VJ{+L{VPOxR!^~*UygsAvHM%=ySwr1E z*QOm6)g;6$<*?(K@A_h~9MPj`Vrz(Ie)mP|HzV@1#YXmL`PeHoEFo-*8r>Ow=hSYn zJJRIHAZpgn6`F$aWY)%R4Ga)!CKM(N&eS&kEMzLcV&h@uY2BAYrP;`ML!(8!sP2!` z=4b_fhdRM|h6z12CiD;nI&uQuTbXko+ymx^6xq=szB1D|!;jJ9h6WU*yn zQ#F6<2=vloZ4Ym}qyX!rNU*Za;VzuqR`4;j$|%MA9)-I<`h>}fNV|$0L{RH<#C16s zO4_F(pB^=rCf_%QHfjkyBU3xF_eDFwb2!XEczgS$r-}^<28t>A>h{MLpcf1@oclNH zyuv-sAj3lO!%clV*2D0~+ib5kJ+o!_goy@^Ko!5#lS(&Sm&&A0nQz#9-c8E+0{EnqHJ-e#=)Hy z2X}iM++A^S55>U!k@$Nu4(^#axYuIfo+g@iSa6foJ=)u3!THoZ<}}PG63dfuTM1Vy zQMR~OEI8KJomB6pIJh@s;69;x8)M*h5N>=NTu~fcT@2g@MDv~)xW5wa-Z;4XEI6Kz zkSD?wB$g-RAkQX=5_TS!tdr1ruLZ|C30#@NG0ipV9{t?Ug1c1Rn=`Iw#^LcLk{ym= zoSW;h&#=S6`6Aiju!=)s+@11PgB?6wU0ZSBy*>_ZLkt{rev86!pB`2B&lB!33+^cs z?s0X^ePP>&u|=4JWW`}@*GiNv?pX_t?ILKx&m(v?Vw|pPmYNW08h~Ep&Wp4fjIf!RbNnKvnq$!?L!L0HYz&kJNI7|iO7KaRMEi`=2;5cnezAO zSbmiRB%*^-W;#4xpz{YhW?qdFvM=%agEBv<{v1x%Sj(e4=$uaTtJ5`fK`EL3;PpC` z1)UZ;sJfuD4{bWExt?w)B}3=mCOX(7;Qm}g0qD8+3Nnu9AYKMvZPc+5k2t5(L(#dC zwx_Rq+&LY@py-c>`ZMlX=XClgI&Tue(_U~+2lE8|0i7AIIHz+L$pv)IAvz=8NS@9Q zrg2|L)p*?Jk$g5O1y4qQ{$-*QGSOK>3ef-E$r{?SA>3nD! z_lFdH$mc9N4g+%u688uDHz*4I*{14X+{@{>p&fMIH_`c{iB4Avrax;39aKf%_`rB^ z0u1{Q$oHWGIP8ByhJb;8jgYqbY`k)26FA)D|2W_H#^aXuGKVKvq^8xyJtO#0&?R(LIHb4(>;Crk5V3i+2 zIp|?7z|Wu_$^Z`>=2~Am&<4hln%fQfD33S*HZO|~;LzWpbo8fV1RY1vaU>mXIxy}7 z=om)FU^+7B7)Zw;I?%7-bU@Z_I#35RPzP$tuW943}rwY{RDl;!A%EXpwWR2mI=zl;~)J7 zALt9{Sd)tYnRI~WC_1pG0oZ7j7f_D==FpK#2k_Z+p!^o<>l1X)Wkf=K=vDYtWT7$Q z8Dqpx0`Mybl!ZP;V7b;z9Nx{!xK^rEjEov2&2n_i!J?V@J#YPgTwF zRb})TUc5g7eV&Nt+;|^Pucvp!^gx5Jjvm}0Vdhv~K$}9KFwscdAj^*=qIen^1({ts zNKA_WCg0qkFcw+a1-W^dqq7BWVh|6e#jA{%K;`tBj4q~sd80?X z8PN9X?%jLQK;v&aDIxNU#aY5|-Zy-Iu)3g;!0c~AyZO}Hu zxEHcj7ny0JWyV#KG3PpVBQ_^I$}V#El9Dl=8MMt@L9@|MatH6=m9^qjD$TQrbuCs| z7r8g?rHeudc|Aj`qS>>6I0SWj-NTG#DSAY?R?>j6TD7RvKz)K{meMhguKn6EN_Smk zu4F5AIF=LVMjP$3MBIi~v>GD)Wa${~+u^#XzV%eOAsfD8iJHgHJP!@}sq(;mVJ(?J z<2|4B&P8rr_9hy`7C3hQ`>VPY6hxGh4(3ykm#dATyDZI1I+aJ~GI5uu6%xive}z=a zLt}}&fC7(lI*j?9DxchEvkf#xD?XM-BR0PWD1OUHa)ymGw>3w@Sh^_8kWx*RAGQ(` zNcWZr>up#GGmI@-?7sI_Ju>CwcNy{2 zK;Ei>t__LBE5q{Ve(^jqa`qEu-i)?fw20a>fz|n0w8|n#q)$ z+G&mfjuAcrJ|!B$UWQvYG>5MkQ$-fCjbWiqIHtkrtk`c0t7Co}1*d_Yxp}z3!krMPOUgA|R?;hfTwP+IgX%F=qQ7`%)3(oN|HX zinY0cY%`)M7j3IZTCc3@?|k)BI)C#1r*A~H^ael*jcH6C=)d`Z+V zjvTVdx)oBykWU^*Mh-cYXH%SzMUXtY&Zoa}iWJJITp{^Zz$z$y@X}FE?J%X-GGPA9 zYot*m3H05F+pz8!6~)UWlCxZa9FdTxNUNPi)Ut`QEb2cZBWbk(%_lx`1=ocHZJ*U1 zpn8$2wzB_1Yy?d}d~L)@tgB{hh6#UULRqlQl6q&SbpsR9;ML7^>SIvs3&5`oO1fUF zY2D$X?L?`QsY;GzV_wx5T4c=gSok3c`_HqdhP)3}JBX2*=nQ*_Xw7dki=~%cD6n!3 z?-Hw3@Em()FfY@Em8_>$GQ{o-tTW=jVF~-nyB}Fpa(Kehygme17|Rg}Yj9i}twCme z9GQ>~w;Uw@>Zj5?S7XbDwJ$_Hm3vh4s9t8mme@*9rm?`jm5VGuB5TM|KKy?(*`Wri zfmKob(c_ltL`%(78Y_?Zb$DLFL$#4Cf+UTMh-f1>Aq}=2hSrpe@su$_o~kc<(w_Z_ z38GIj_AqP_doYQ`UPWXH^9}{i?Z^_?mxw*i91*r>wzVSb!>+L(gx|zI4kAK3n^TyOHqSh{wt+u1RyJ8CFNr+_{*zu3WycUF1~k^%W=z6f zFo(vdXGB?9`)FxwLfX8>w2rl1RCtu4#+vIi`eZwaovl*ZOULZ4rSXP$uhrl|VZFGO z{uDKF$ufeEOUM&PKhe9X@bJ)S>^ZYmPo!Sx^aoE=PM!pN&GV@Qb{kx@9!;d{Y^A_Q zi`siXMzq4dttcT4_HAYw*r}1v5?oqwLJDl>%oGf}RFbg1Gt1&hNY}1k#(rLD!uss9 z(ULdm(x3}n!C!1^%CteZJn7P)TamCdYek*dGis(47Az1V2}CQ&Bi3#cOI+oW}hPR)Tur6Eja*mz4=?a&&>{2T$r;+T?_FSh_5g=``b8 zs4i?PH&Q=v9Ex z9~bFZBB|NOWU;uPo{%2vX%^{dg_x<(KEzvyy~;=r@ysKK4iDk6=ErjnTw_n5K+JjU zW4N>#3ESfR##sCJ7(HYE(AdL2HX&u!C9^D#OIVA?#7ouzYb5OcM(PJ*&Epf&u^$sN zRdc^)CZxw>f}NK|Jy*UZ% zvHdinar2n_RDHH<#@fQ;$i8{C2AA$%KGUQHo!~z2TxW=`k6zHDN_OKVy%r)NtcY;L=Ye%|I<<-@GlRy&c+%IHuzs@Z-O)6<#>%#RyTbDm_JTD5 znvNYsXu6q?1qmr|#9JnIjpVMe+!=35x^9kTweO;ML&~4yRO1P4!wtm{alFVykTC-6eJ=7!p6C&-$^H~>NC6c?@cEWBLT)6~=_|i8tmSq%4VNt^NnF2hN zlvX5##R(~}w2WPkB}vzrPHjRfT;fTBlog*3QdE-l-$$zQX8+Ar!0Nl@p1@*?I=IAi z(y>S{%^t>z$)K0BSu=)Go6A(YT%P-H_y_87C-{AXUv+OHT&MPyJ*&#>fJbM(pU6a&w1xXbME>~speSH`GG)!uDa;4X)(y=`( z&yZO3|ZpRekq${BlfylGcM(!*ip(fEx={8ASrQifg=HAGg1N&m*%In9easj16fkZh zJKP3rwycZ!70nTR597H#a~-q{+Sn83a%g!Bjf0OOO!|<3;2>M|!hkL(xLF=%s_|Pg zxJb68S(>%A93cV7mZg&umV_|^c(%xrjW+^0VJYDqMwWK;2;hxPmXg#aNRCGUYav+| zZ$WZ7`%&RKu#Y?f28`+82`SS_R#v~=s6@7u6V}-HJmG1O zPON=+uFR5RiQ?^AhOtC*!z1myB|`^{mOx+j)M&}j0jE5%1{xC04NDIZCQC0>Ey**< zpLsI$+Gxpc?65Lt-jn4sdOjmsmQ;8?=Y>bgn9q14T9!g2ExEU|sCdG_<>Jj}yhFx) zkDkx=78P+0*J-b;oanjqR(Z@4++XM~-H!=43eI@h$D5qsLh z;WrFC3uL>I(UIAD#G57mEgsH^m5kJfTpPQC=lwhisd$4~HrmIQF~0V(EsSrE_q_I@ zSJL06wNJ`{$A3@x=t%9u{tru>=W~H6YT(xKrVp2s*4eOfvY%3)4Cr!Nk6CRWb_gUD z*1iIhonud35Vk?_wGaDSl3M)e-r4%f;FslMwtXy@w4FW5YLttoX@+06 z(=)bThMuuyF``cV{($u-o{udI&xcg>%veQY4~->ZZ{^tc8|wpm-AhhV<~bQT`^{A2 zj|of4>FNq^1T)X^TKaXY9QL-8X&rmvvYfGo#d}R$H=aJ4r5vr1c%~q!utwTNeTCsz zAim|>(|#AfvSA+WHPX=7c%%1!$r|D*2=mN5!8X7PMS5O5A7NOs8W1_pKsQ=~dn(F{ zZYz4O{d#Rh&n$4u^T^m^u$x;b+5XuT&95;&=8+D=Y`?fhP{F=edL!HiFCwmKP~NKJr0;JFijuI`Dp zjAy2a+Tsy+x+3|lZFzFq;>_Mb$Nw)pNq{cFzW%p9OE9kyF=qV4!2bCIBxQbLx}4-@ z-BE)?*}t&mwD)Xgj}^~un#;wvn#p@M^Ye8(&t|t4Gkl~Gzo%|tlJ#rOVk$e&mi+jz z2aNC6(&NJ`tM+>UjL$5wx|fj{-Wg&DW|GwR$R}QabIic23m&Oh<=Hp$j06p~|K?c6 zcy1hj%zw?*p?RJ$e`XkXg~ZMAPO|GlL%MeImhX1p%`NluQABWT(Qu7X9z*ZR$>-p( znua~F+bu*LBT7!Tr;#y_eBv!5$M*NY7**%73Es_>D`=-OfNn}@B`X7rmi&l<{BP~y zZ*9}J+6j>fEF(>>Nef*bx9E`&kQurEWQO2$uzNld?hxYBty>BVU zG?61Q4Sd~_uO&v(<7>v@E2ex69KK|Lb~!PQbHMQr<`b2{S1eQ+e1sz0FSBd_2hxs~ zwg3AjSq|STu%l=0KmM0~qB8u|4=O4W*SGcyUqrB@Wi5wq9wbw)dyI1LTE>aLIwCqp zC+;7S1ge5Rg+gq2^P{|P7!w}9U>G5f<@{} z-x}CGsMkyd?k=HP-&Y8XPm2`wn&~U1TyzYa^giiCNdd$BCo1K_NqjbC<~}b`Q{6Yy zy$2`pHHdy8d}Y4-F96~sfCD;oe-r?m1Yn5P{bc}f5&(SiMC-mCFq{O;^ER#^rtbd% z0w+n%+$e^xUqh4M7ncC{@1}U!=wW7||pE;!_%? zCIPcH37EA>L5vo9!qf>uLgyh;@%)K2m0wTLATaoy0Z7)vs(3eJjM> z|73J^dH*qPDEYXPab7;$O&T!nWL5*Z7s@#9WJ4zj77PVQy5mkZguGnqmpeK$yWEpg znCs2X_vYo6WtEoZdNMtwIho$k1(~A@@Sz{{yH|JEbz$6P_b|-?>iY&p6CLe!(jjhq zW@j8-BlZ0Y-SifP1`QhZ6y0Dl3*j98H8X07qadbXlv01Q&|k;Ni+93lR81!m2}r}ziPuo8AggQBH0-*t3gD2cIEy`&6|xK zK9_`qPt%N{V;~*%u#y5&4}&54e&`%rQ9A4y>Sr&}L!r3>Xr_pdFX3aKK!7TU8MU`? z?am#97NL~6Ha^>gPkaIndEq!|CYtNqLCjeo%oXsBCt+aSZlJ=rZA9cD0nxMzRSvH# z5zZb9*pUuPgZTDrZ4%Q1?+86X1f+sS@afNa$tM=YmFLg*m-km5Y)USdS~^ zzo?qf0wnGNQxbx~tZ5KvsV*@K(j2DsmP|~Mwc>0A7Zg3}W`N2Us64Czn3F3MkSPrl zdZcMAR}md^AqIZ0D$xwJPc;h69EO`j=WkU=rpDrU&z_b6y-i*ER34@Z+r#4%ih({ypT>6cZ%qPV8dZqYwOkSPj@kAy)iNP}c%I-}P}Rt)~LwoEKW z*kh#mGK)T+R2cf@o$*_yo;B#L)|oedeHlv(B{AxMP*tLO_%kW^xe9rJ$_p%o9e+0t z(+FyrbF7gp2_c^0)SW%p*-suH zJO7M3awgpR!4)65ZvVK(+}WuX&db&PDwRiNXDSGHI6O1p>Q*Y`*(zu5L<9sFH@#jJ zh%yvg$WojW3)xD#vrZwC)*M0N+pE?fuj=KOl+<7-$=Rf@H0av~< zzT~XOZk@LKt+|KV!N8BcM6YWL>2yV3Hxy?$O+dws-O1df9o`Jvt*oN>+F;I{|4gc$ z9GLuA&;2sb*!|CoQ4n}8W3I^8Zo24s<&(!>aIwGSi4|4n-u6My8Fn!AIy6sjp-eI2 z+Ov!Z!gNZe!(#@z9~gP^`xO^mwdI?~uUYk}o9bC%=v`26YLHH?6Wtx1J;h(Ii|PA))DB&0_{Q<^xf1L;y;Rug>#7Cn^&Hn>Gfph zX60mN=aiI`k>qppJy|8$-t64Ml5(+aVG#Xqm3^%enpO53dy3_LIW`AlNPm1->U;s| z=VlgU7UpM`e$uQYsUz(uq_QDMV&q9G@#4+x`o&PxQzO7{s zPwcSYOO0o2fjF$Nt^|{u$cO~AMM7b3PGLz&4$b+JT#`j;S$;uTZb?CbH$Rhh#LLUG zq5}^s8q5(+SW0G~_Nz$?!MEp&m-616u!p5MdagKba^;HW z+vZK_w?wFg6^1ECp58`OWtq9TIiX|I_N{&V)NV~)Og@)0Li2g;uU z`DEnuT653f#D2XeUO(-nxqm$T(gz?XD-1?RxK0oi38k`13P^Fv%5yzAo;*)!mdBG{ zTAowj%`PeP((|Y?!{cH_f%+^HLCf_k3gh)Y{(p_UYQco{{xjE(Kj7czqR;V!!B&u$ zvE`^hX_d^P&u1!7l#|6PA3{f|K-3cO9#xA6Ii@#uw9{5NV{Om+Em@v5%TLPN{8-Td zZUv2YQZ2*aJ+Qg%xIf=|NBO<$yB}E9e9LM(*l)ShHkA7Gr&~83|9;8QCFc&f=jX5X z?=2S5u?9@BBDTf5UY~bF&LwYD-dJ(R_MA?~_X96h7_|3S-DyKdk&d9F%gC~y*1xr^ zWYx~@Cq1?5&i??O3?rVyj+!z2;)A?b+}`z#iVv$F2P0M(7_r@f!|19#Hq#{mqqf_i zo&s(@ESa^{KS#Fudlo*_mXFp zbvf};@M?v@G=~Ddx&;$k>h&d}FS6sQIGPSbCsRD<$`llF3X3C|o_BJ6`r&~$&hcKe zZrRP>Uvlz4&~qyci+5j3W3w;R=$BidMl%pmQ0%AxW}D)T26)GFbaQG~|7YEE&KtK; zeDwInH9fxXFnK2WZ-qh2n*9D&(TJoDP_5t3+Z6&6af;VzVdi~JL0ts%4dRL`x2yBk z-CcCv3PXH2O%JsNS`3#i8WAzvp4@ldOYwk7KW5@h`G+n4ddVcl8>Jf8Z^MFC2wyQjEMiSCuHBz{WNgP4!`l&F}f ztW%V@!yK5+SMcbpdez@EPWK(Xc4^+{6aRM3X0t*;>yhlts~s%LcR>TYl!+%q(BwV; ztO%ND^*RKKJEp*+_gPbRzOm1)Ic3+Mdr8M%P9J@i9SprTJea}G9)4m36-0vSzF6_# z@5c_fZ_>((&e{6s-}gTT@OUZ;Ji2b33U)BC(+)p|#fS86U25PF++{7Hz*6@#y+IG? zEp>X7llvckrUa(9e|i1XFTej=<>MdqTvb$e)^s}<1Yww3Y`0gE;qBrfQ>**P%meS( z?xHencsMq@d(P;55-%p+NZmx@86Pty{(u;YX>{P!+ii3@e=_{(e;(H2edNxr_gwr= z^C3y^P)(OzrgsBn;;pRX)x9=TT`*I)W$FXyx=)YsH}}h(Hu=Kmw{*IEzwGzzV86W? z8$vzXad5`ZorgSFeEC(&hhFu~^L^0sMDrfK|8f66Od0vp>PeesYWXks>^;m5CNwhq z$op3_W9TwcGTq)$<9T|>8{U#D4}R|-AD_0R0Nu92(Cv1Zt3gy;nX984gUx!#UA;6I z(wp6tjkN(^T*HNlLbW53S%o4HrW?GziQ91HSgZq%1UC1{dwuBb<5!ejUi9SJ_g}p1 zM?2W>sNAvsKvR9GpZ0u~gr*t~?spGloLeE?65B;)aqKhR{G-YdDH%4oLb!4=Y~GvM z;n`mTLo4pBy_3RT_f)WHg~@#~x#uSu**%!Di7jpk3hxTm%+uBDxbBeO-Q=I^_P5cN zSBgO>HvG<(XgrzVAlQCSDQ)8+WmvyRXFr1|pmIztLp zSQmoT(6lf0H~9l}P5KDe2M|qqf_15EY|(uId4t(P&sW+4dV4gZ&fgNGa3?&A_z4YO zJQq!xPVtPyNGdmY+PKV-nIa9Zpv!#P`OnN8?irWG(30@w5Uu?+xGUj~#hQI)b#u>H zHhs>Ge=j@xgASi}&c1yD1Z{=E0D0R2V#`1@vKueZFeJQfN)xHRG1%JVTk5V?rQL%Y z8{A=~loQn57`E30vl?rv#ouBG|9xUs3p9ngbqO(FUT0vR%2 zJ&IwXhUtcAzt-Il@HY!EjZ#D7T#^`!mGd2J@R_Z~LIgzN8^JZ5k`k?)kH7kQ_&(Js zR=b#?X^)O^Len`!rQM{7M+B9P5e}&BdB1z#*aE*0(L~VCXfeDXont30?V>*1&F}Z+#^dZ6?Erb=wDw zSYcqK9YH0U{$Ka%B={Pf{rUD8ulFilv*nWN?^|=0*umgNU{0#*d@%Hso-M@?LF@A`x0-`w>{JJ{Y-t{rL&?TB0(iC7}>$_TO)9W$NG{WgIkF7aze0K%1H zDFxt2VAA?X-VPSMWavpXtxJY*RI|rlw8)^=tS?6pD6Y~24_;+Xn6$o^WC#1-Fs-exg+a07DLwGurK%z4{O=AKGxf|3qbh&N zEw8nM{qLC81KS>0{^MyM6hC_RpU2JF>&t22ARdSRT>MCB&72uFnON=FYyqdXEcjFVZ4 z3`1@%!|(`?wEgzM$JO7^t^CFz)h%BAeX-*oOLaNe11r|OJ3E-|uqJ=74o0l7 zeF#SXN+YloMAh0K^I}iF)FDXIDVaW7-}*+MtuW}IzDNef!ZPuz#JtPN@1b+U$jwS@ zhTC0-)hL6o))(YaAs#0*}KkbrJ|tN_`=Yf7`H95{tH4 zHz@>59flcckj%nom-zP{_Lz3tt-`90zI~(e<>FN@tnB#V!d16(;~ z0DlEel(6_kDv_D?oXW*p8sMS@KX(@F;8#og5`>e<@^wQzPgXjieBy7`Iu$pYsUM!^y>6nPqS-4H<5* zva45qHR+Z&`cBGzHsfVGm=Nr*xy%v0p;J8hq0Dwwkfl(n?pLWiDvKGJZdFC`o&pkd z)0|x4l|sxFHzXP}fcT6CwcTUZVac|Y_rLhe)U$p(?Zj7hm9&}1j3d_()T;HjA$G9d zR8IU@w|W8nKa`NarG$SrA=nhtLoAp~OT0by0~UmX)*slQ*+k;z&R#g%ODAZEK(u5GUe-67)kpr$vl#1VEI+bgJaN_}5$XN+Ioc(fW~oLxb1O z8e2o!SqhJ*K&4H-U{DW^s-T#=JV2+#{=kA!C3PWxVB|dQRaFupdITkU4UH%b7q7I? zYczE_-dPK_`WCmi>-^2F{uWva2i?AwdUw6w?WY$F0`4IFnxu7PmtuOsO?TtR)9$vQ zUXRyiN&`CmucPpPl6E(=wTS+9DQ@*qm)tT{`s>7NJ?hq7LoeAhDHxG87oFx0MHLMw zm^1>k9?)1!UFh1Q&uwg}qW6Iu2nXgwhRln}Zo0)=MYW(8bT`loeW7{u7LiW~lnTm$ z94)ToPxrlggOA=Ha*Tsw;D|>vO4Xo2u_{3}v2X_y?te&jhfvdLbr*WwE_FXp4QI6R zxS23W>|wjgTkTzy+hk`wrDYf!}{*w%-PjxB%Pgu%%+L^E4R<&3lJ=Fbtl}BXtuU2?)dgap$iyRelmat(RuYCs)}lKa_1$k-DzW`~FRFAH5FAh5W<0mr zZuze|`DbB>zJBt)wEUgOzi(>tKW=D23C8l@!yZq|->Ljv&h`JR>4hH1|Hmnpq~-5K z{;)qO$baMK1tl-O@WQyq7B5Q6---Mi$tM+r|F3+z?f-_}XK#i4eT5s-@^>o#fzIW> z|Cr7m$bWUq&1v~Nk^f@S{}kk3a{9?a{(CK4otD2-`KMrix^=E6`B#pAYv*4)>G;3> z@&A^BB5lQK&h5{DAGebIuN;5)<_pvM??C?{|1Fiy9@bqJ8`8$w*adT?& zKO?wQ$bb3DqO|-S%0CtR^FjYV6>YfUit)wQuX!SE|J!f>S9~*GTXCp!`;&Qul>d%R z3)24Af&L5mcXclR^}|2$K>t5V%ir1lXD^C>Qjq`IO8(cT?T>T$r(l1ytJh=yVf+W3 z4omxA2li*n?`Zv-g8p|<^8ae(8EN@DkU#8yD)QIv8HfFc@oD)xd;TT-@4uYy|Fir* zOxqtv_8<0VMGEr&`G*7W{IO`xex)Vp_`m(}zt%|h=OgF(zeCCY!OZb#`|rU13;C~2 zLH^gS#Pi3Z2h#F)WPh{`r2i?%{{toewEc1Be}(*0us`>$IdI#CD-J2@^HKW!6G!j= z3?}^_KF;y`KeyfN74kpycR> z0{M>``bb*-PUWA1{b?v`*p{1jN-X#JJzeE<27v40TqfADILToyZ^YXA19s zdcCurg!~_ybg(!5{KdiZ7sQ`=&g0LTsZWHt%RQ@UKKiuhAu?_OS|K8nc`8$xm)<3oVw;dVR zl|cR*uG%+k{~gM|_%P@GcgDsB59HtV?a$Ks??C?Wzp2Q-byy|sKddiWy{cPU{to27 zVl%~`DLj9__T^o)|FFJDyZn^2{GH1GHs|mEOt^S;3FQCDBf+%%oyh+$r2i?%|L)5c zZ-M-qZr(dBf2Z->qr;^ zo$voVwqQdsjOErROgx$Ul(RCglIf53i-=?@<1! z*q`~Ie7miKwx#In?1$6xcOZWa|9?1z|G)9=h~g(9|2ww1($62A%Ku~M`wzMIXL}(3 z6~hio%in?gSG+>{pMv}^e`SY||AvlVrtObY`KMriHZESW?d2Cq{{Mstmkaqf^tvo9f2Zo# zT<7xt$5+plK>u$(bY)upPUMg8kE9^~MN1C%K>oF-%FUYvkSO z=s`zMI?xGRBgd!M@I}aj=;)=ck>eA>2h)MCZ1z#t$nmk-zH}T$$KmQ4c|SVbbY#%c zUtJ?Vf{p=n;KPgfm^rSI;{#!X=@>%CP<4%b7#+juz?XkVs%zw<=*Xlai;iq{jokeG zxqQ0EhwG5z6N3eG6w)z9T_Yb$2R=1MzfRR?hKOtA^lKTdn2r)UJn9;GDIH!q%IGLp z*T^gAxSI~7=Vc~jg-h^coA9GDAl&p)1^&T0CK!I;&l^5|39O+qKE(h diff --git a/spine-ue4/Content/SpineBoy/spineboy.uasset b/spine-ue4/Content/SpineBoy/spineboy.uasset index b4d85df43660dce2d2970fb37f038db95e8fc8de..9f7dec5ce42a4e657b6cd430e4acdbe1572e0221 100644 GIT binary patch delta 913 zcmZ`%%}*0S6o0$jU8=MqYfCE&R4s|o3-trNfJ$r{H7Sr(j2<^;!L=XTY_@_Y4m}zp zb%+t7z(LZBgqS8CyczKiATcIhs*!_fxNtE>1?#-oSv(M5cIWp#e)Hzdd-L*zuuv6d zqT{`O02u&=t%5-TAWr|!OasVD0Q7@C%4ng8_K4yJvlPqpfAFLKrat@eO8NLxwf<=d z1RBOYm`8#jh_E)1s4PY+Px_S&%Ae1?THg@#q%p3Sa!%Tug2A!ZjRTaO%2~QIYFkCa zcJ9OPYJCR_OW9T)mbV%=TB%{?i2# z=_LHwxwP&>j|Gc$cuzj~5<(|w__X#O>O~P(u59@W~(V_!J|B~-E1~BQjy|f zub&8VjC9Mb>`nMFCEcJnayWOEQ;HOvyN$af{23wh+z z$T>w7CzaYYWl0c1WV2<0t{H#4GtBq0N&Td?M7SeXoAIXt(}%c;4P}Cdpd54oyad>N zCOGmC*AaqT$DyL^66fdUE~u`LJvvmMbNdL#9#)sf^1OF=^f0|=bQ(v65_19eab!s+ z^;{N?agWE?y$sf3mkQ9%343a!{)^sayw2b|L|GnSQ0oh?4h%<`4zQ((#t9N>z3dDOtPBhce))N+K#GAu8i?C#Yfb1DS0;mqm-vLq$ zVguw@y>}EPm~H*gcgICtq`4SVSnX>t?F)(NZ zZM^uHkv}uHAit=@C9x!tA;59D@nlivvdQb1JB7G_+Cow*N=l1Tja(T1{dKrFIh)0R zQDkxhi?pW%P!a@~AQXcjlm<~CdqDu39MBtJ0GFG@D$Oee75wx6|9{cR8m!7pz3h_% zS>+}tu(C|fXH{YPhRo%dyq}dvNDQh6WZ*6y28K8exQ_pgvDhN{z3TrR`1pq&k4WfiLcZ(gh@e_s$@j+=0D9r$LJ{aIM5ENR-1|DqIng;+k C8(f6| diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp index a850bb707..c0e705f45 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp @@ -4,7 +4,7 @@ void UTrackEntry::SetTrackEntry(spTrackEntry* entry) { this->entry = entry; - entry->rendererObject = (void*)this; + if (entry) entry->rendererObject = (void*)this; } void callback(spAnimationState* state, spEventType type, spTrackEntry* entry, spEvent* event) { @@ -73,7 +73,7 @@ void USpineSkeletonAnimationComponent::CheckState () { if (Atlas && SkeletonData) { spSkeletonData* data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), false); skeleton = spSkeleton_create(data); - stateData = spAnimationStateData_create(data); + spAnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas(false)); state = spAnimationState_create(stateData); state->rendererObject = (void*)this; state->listener = callback; @@ -85,12 +85,7 @@ void USpineSkeletonAnimationComponent::CheckState () { } } -void USpineSkeletonAnimationComponent::DisposeState () { - if (stateData) { - spAnimationStateData_dispose(stateData); - stateData = nullptr; - } - +void USpineSkeletonAnimationComponent::DisposeState () { if (state) { spAnimationState_dispose(state); state = nullptr; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp index 51c59f375..fc5e7e41b 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp @@ -54,6 +54,10 @@ void USpineSkeletonDataAsset::BeginDestroy () { spSkeletonData_dispose(this->skeletonData); this->skeletonData = nullptr; } + if (this->animationStateData) { + spAnimationStateData_dispose(this->animationStateData); + this->animationStateData = nullptr; + } Super::BeginDestroy(); } @@ -62,7 +66,7 @@ spSkeletonData* USpineSkeletonDataAsset::GetSkeletonData (spAtlas* Atlas, bool F if (skeletonData) { spSkeletonData_dispose(skeletonData); skeletonData = nullptr; - } + } int dataLen = rawData.Num(); if (skeletonDataFileName.GetPlainNameString().Contains(TEXT(".json"))) { spSkeletonJson* json = spSkeletonJson_create(Atlas); @@ -73,11 +77,49 @@ spSkeletonData* USpineSkeletonDataAsset::GetSkeletonData (spAtlas* Atlas, bool F this->skeletonData = spSkeletonBinary_readSkeletonData(binary, (const unsigned char*)rawData.GetData(), (int)rawData.Num()); spSkeletonBinary_dispose(binary); } + if (animationStateData) { + spAnimationStateData_dispose(animationStateData); + GetAnimationStateData(Atlas); + } lastAtlas = Atlas; } return this->skeletonData; } +spAnimationStateData* USpineSkeletonDataAsset::GetAnimationStateData(spAtlas* atlas) { + if (!animationStateData) { + spSkeletonData* skeletonData = GetSkeletonData(atlas, false); + animationStateData = spAnimationStateData_create(skeletonData); + } + for (auto& data : MixData) { + if (!data.From.IsEmpty() && !data.To.IsEmpty()) { + const char* fromChar = TCHAR_TO_UTF8(*data.From); + const char* toChar = TCHAR_TO_UTF8(*data.To); + spAnimationStateData_setMixByName(animationStateData, fromChar, toChar, data.Mix); + } + } + animationStateData->defaultMix = DefaultMix; + return this->animationStateData; +} + +void USpineSkeletonDataAsset::SetMix(const FString& from, const FString& to, float mix) { + FSpineAnimationStateMixData data; + data.From = from; + data.To = to; + data.Mix = mix; + this->MixData.Add(data); + if (lastAtlas) { + GetAnimationStateData(lastAtlas); + } +} + +float USpineSkeletonDataAsset::GetMix(const FString& from, const FString& to) { + for (auto& data : MixData) { + if (data.From.Equals(from) && data.To.Equals(to)) return data.Mix; + } + return 0; +} + #endif #undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h index 05c1aac2e..83eebd3c8 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h @@ -177,8 +177,6 @@ class SPINEPLUGIN_API USpineSkeletonAnimationComponent: public USpineSkeletonCom GENERATED_BODY() public: - spAnimationStateData* GetAnimationStateData () { return stateData; }; - spAnimationState* GetAnimationState () { return state; }; USpineSkeletonAnimationComponent (); @@ -232,8 +230,7 @@ public: protected: virtual void CheckState () override; virtual void DisposeState () override; - - spAnimationStateData* stateData; + spAnimationState* state; // keep track of track entries so they won't get GCed while diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h index c266397ea..b253aae45 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h @@ -4,27 +4,53 @@ #include "spine/spine.h" #include "SpineSkeletonDataAsset.generated.h" +USTRUCT(BlueprintType, Category = "Spine") +struct SPINEPLUGIN_API FSpineAnimationStateMixData { + GENERATED_BODY(); + +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FString From; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + FString To; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float Mix = 0; +}; + UCLASS(ClassGroup=(Spine)) class SPINEPLUGIN_API USpineSkeletonDataAsset: public UObject { GENERATED_BODY() public: spSkeletonData* GetSkeletonData(spAtlas* Atlas, bool ForceReload = false); + + spAnimationStateData* GetAnimationStateData(spAtlas* atlas); + void SetMix(const FString& from, const FString& to, float mix); + float GetMix(const FString& from, const FString& to); FName GetSkeletonDataFileName () const; TArray& GetRawData (); virtual void BeginDestroy () override; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float DefaultMix = 0; + + UPROPERTY(EditAnywhere, BlueprintReadWrite) + TArray MixData; protected: UPROPERTY() - TArray rawData; - - spAtlas* lastAtlas = nullptr; - spSkeletonData* skeletonData = nullptr; + TArray rawData; UPROPERTY() FName skeletonDataFileName; + + spSkeletonData* skeletonData; + spAnimationStateData* animationStateData; + spAtlas* lastAtlas; #if WITH_EDITORONLY_DATA public: