From 123b4d86da0c6efe4f088e95567bdded7374205b Mon Sep 17 00:00:00 2001 From: monsieurgustav Date: Sun, 23 Nov 2014 16:02:05 +0100 Subject: [PATCH] breaking change: OSC arguments are now stored as a standard array --- Examples/ArrayParameterTests.uasset | Bin 0 -> 66264 bytes Examples/LocationReceiver_Actor.uasset | Bin 22719 -> 23698 bytes Examples/LocationReceiver_Component.uasset | Bin 26639 -> 27517 bytes Examples/LocationSender.uasset | Bin 27284 -> 27603 bytes Examples/PushPopParameterTests.uasset | Bin 110135 -> 111105 bytes OSC/Source/OSC/Private/Common/OscDataStruct.h | 31 ------ .../OSC/Private/Common/OscFunctionLibrary.cpp | 98 ++++++++++++++---- .../OSC/Private/Common/OscFunctionLibrary.h | 62 ++++++++--- .../OSC/Private/Receive/OscDispatcher.cpp | 10 +- .../OSC/Private/Receive/OscDispatcher.h | 4 +- .../OSC/Private/Receive/OscReceiverActor.h | 6 +- .../Private/Receive/OscReceiverComponent.h | 6 +- .../Private/Receive/OscReceiverInterface.cpp | 2 +- .../Private/Receive/OscReceiverInterface.h | 4 +- README.md | 4 +- VERSION | 1 + 16 files changed, 147 insertions(+), 81 deletions(-) create mode 100644 Examples/ArrayParameterTests.uasset delete mode 100644 OSC/Source/OSC/Private/Common/OscDataStruct.h diff --git a/Examples/ArrayParameterTests.uasset b/Examples/ArrayParameterTests.uasset new file mode 100644 index 0000000000000000000000000000000000000000..a99689fb2971f4df4d54de44029d87c57dd4ec2b GIT binary patch literal 66264 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 literal 0 HcmV?d00001 diff --git a/Examples/LocationReceiver_Actor.uasset b/Examples/LocationReceiver_Actor.uasset index 9d402baf6cbadb9e128d374cfa1b3ad58ac459ac..b680a00cd554497ccae241f247999da51a7e121f 100644 GIT binary patch literal 23698 zcmeHPeQ+Jsbzfm)j2y7}axmD<+Q!JnwrtBb<{MjIwyZ}B|U20jUQ*Mu6 z@F<#V-A(@=qtHU({)LvchTdZ`g4h8o%OjtT4^nz+}gESZ_JO@_P1?Wzt_uqZs>(;w=`}gR17B`xaGr|-b1WE zb(7}em_)QT>~u%H4Q;o&qhon5+|cP~+$iT4_IepFchn08c4Q(yus#UN-b|1ii#9ap zi{4m}D?~d3cWlHu-$1qaf!E(Xc#D^bEb3xXrL8cWBQ<=$DC+KQvCc8_{e{4D^KDsc z9u>xo&POVn4ZJY4&PF;2+=-sRAM=7}!nz10#mFD_3SQtwUbfX6a*O$BpG)#_>w`P; zd4If>G=m;-9|ldLj<936KoVyyv^2OYm(6+w7ILs7>?sCbd$EwQRsq-P4ZE3%o!V4O z-VMW!keVOygIq)!JL*{%PZI9&ylkIOEQY<_BVK;5Hxyd+gicgvU1;W}^5woJlsk*L zEL%G%=_o{AP;m48q1Ro=PjJ5yWbZ^6d87NhAVim;wFK2SG3Hrkp~Uy|i5kzPg28UG zbdbw(hgnx38|?M+LoGhFc54*Zn~1!m9)@p=o6kc>1G}3BdcBCPrUPhTuNM`ALTnA& zB<^yLc>8FC_`wt!jOc`6k3ZI)_uXi~FGgdcwi*;Em`nN>Z#ZY)^oMj6+{S}#*^ zvvnqm8+pTiFu~esp)rWe9-2?qA_Lp&2T`st%mbSTjs=~!_@iUw8VXULM>CJ=vbSh; zBbP^`j8h&|k{%e?oeM|3sLPE;I&*`8OAW6eP6=97KXvX7v{*|`s_rlYo59S=1yd>E zLU?5mPeTkM!OGOeyp@vP49$tXz8_f^lqlTeXX7C!)Unbr6Iyct4FQZ%%)Pd3>`TZU zYPu&^;7Kef%JTR{(^Ax%8SzG48hfn%wrq}kfCva#+9qpGHUopgSH{XCNOt zCvLkC1rt3!`8Kw1TM+m`S2)abmoqE_QywMLO*+6fWP5YN1(ycB7hCx}@Sal6Lt{0H zZ}l?8$m<{Uf?+t(fzqbq`OEVlnRb|%?Lp2fWb^Sz!#GrXvcfdO!i7B6w21tW7kGtC z>>g8I2Ug)a>~XMkaRM46kCO-hcVA+<^D?lz2?ig~Ig@x2DQ9KyI57(b)Wu^~OhNEu zfGMR^yU_+KamS`l2#D9|hEY5mTK!CMlq?gnIXiQOBk;@YG0SKi4xu!P<`E1(>Am8t zH%dli!$STp&i1&ZpA2s z;X5!PCo2b&D|e5ZIpPk-u29lRpE0P?N}?G)WnjZEP#LQhqmj}fs~oO?Rz9DO$9A(@FZ%?S9#C*(=X_6xNh(21hlL9m`RemT}l?V=rC+Z=Sg*-uMdl8gq zAI$f;LCzh_dn_$f5ijR#f;idKYMn;q0PLRt-=s~lZcR(!cE@BT>vdMZb(g`tLhYfO zfOLDnEsjwoaXTvDuonlE;@J_SO5zSyz#XoDb1UEmE8y-ZgL|3!jy*OY-3Q<>SpcPQ znCyU3xTY9Y61TYmuBQSntbiM@fct0}+&@wOyb8FXGPrM0y(op#aqu?bZm57eUIzDX zRIk4b?q3P#m%+V3xQyWDNUS=9{nkj?T#2>6==<6fPWuboI>D)Jhb4~)&!B)(I4#rI ztf%so!l`_vaPap4#T|{a)=x;zk4rj@Lm#q&dxz3U!ddN+GV}p^FFcsf1fW$OSgWvs z1}Kk#S@OW%Y8i8w!YJe9;O_&v7)gMwPP3dv~TD2`6g3>&ms*;D=1w77> z#?&s~uaXD!@fropeO-IN1Md^hzD$@_h(HS-|13O?3oXhwP`IT^9zUY`SpQJH5B~_x zq;M~V2dm_PJ}77vjFtHm*60GM1ZCp4LVBn0 z9^Vumm~+uaNHKdkz9l?vq7IC1s*T61!XryOo{>%NZ1wSN;c-7zT)$;@a$HH|u*=^F zk86p?Q}Q5HtsKhZN#SumRXlNdZE`#%Jl><~=V8zg%vO%4g~xWPxCp|{f(Lv$^zo*l zj~;RK)yknferV|9o~t26^?gwuKN23RsPWHUQyY)B41Ih>oI$mHf!NT;7Yu#OyMA_Z zD3321`e@l+8;>s;`q;mtHXeUz=;QY0+3|o0ppR#T$2FwL$69LR@tp8jL_B`hS{sjl zGOO$Lvb_tqxIAiXezKGsm@W4Jbq<}V8Q^0$OzdlU=W&qHCS9mO;bVLDV0Py&G;W1NRzArpl zsLnVA&_f^S*Nauk@jat2A2oPjcwL8whZ#WSPLrV=?}!l3qW~S_*=8;Ul@n#KA*r6r z>M2GU_UVWbpbyX^oF(zu6a$c7NMR8L(7j51K^f|UmyQp#3mLvmcztgLemD+7d>#dq z;~9h81)u4G56XeZa~bMG&v+*dI+Ve7xFrBNF&4fh{6U9teldj|6o5m0_-O1&uBL!3 z71lv)&(H?^72+)v6p+_nZA5;p#Ms`Oc#Ku#S4xbnJMz#E z;x&?AFELGb#+&aymQoo2^yD5H&_|Rnqk#85ptmV3rvSUJpnx_np#YvJyOaXzLngF~ zGCcD^cJvW4z&4E(&=1Ip{z5OHg^!2Mu-(>vZ=hl`;gYUS#WhrQN$f*~k;hP=%g9LPLfwcy1*^wt697YQjYX046u9uRZS$$EU`dny%Qgb>p@s#&v`^ z73FI;7?164KAd*Ox111Lw{5)g@@;L~wlr^U-m+us*7mJUn>TK`a#Qo>w&wPxE7~oG zh)jUt6&y*tL^DRyiu*sMvuzebWvZ*w6pAsASh^I|*HgWK-b&FqRIUJ@T8aj9(orIc zu^yG8Gil(bOVP}sa+40TsT7?_gW*w%1_RKf!{qD? zxKf6tuT!p$CFbry7mGL5L2ac;nToXv6A&p>QJR#g*qE^V;)Qh>Bui{88I$dQ2ko;3 z*rZH(^Z9iccT4{TI8<7__)yo}1-+C?6ooW^6&)uNT)8QBtd7T4LWjlNk-CU<@lMm3 zG+4;-(iDq+Cj~6VogMUV9+t0*x6?nsG8koX*TOm&dKZWnvX*zDjd{=v`ZK?IzC%d` zY!L7=6?v!xp%V(cIqv@a(>{Rx7GN-rlJV0*c}L1L!aG%1USSR;wo3-x$VeK^9+x!e z7g>MHXL8tY0I+9Ka5O$Z)IR?vNPc6tF9ftT%?w+~0r0)w}PTyYi>M z{mu{mqEa7!L+U^)0FAX>3@4J!g*ZGg_* z(AWD$iY#*C>$04vCeAWgWZTk+O2_Krb`3 zbL54?&2Qhk(q7K(&(|K?^Q@ zpnLdZyE>nEGjri*-flbBVe0rFMnqBaX-R2to){3EYJ6#m7XIg23Z-`8n8$#$z}C*V zysW_Y-}dZdx9*(V`Q^vAzH;>E+orhu*$AsbYsb)8JQma}SYgAR!G;?z>i+z9wmtm( z_x@p(BOO6>MAElQtaAlIc=6pwE8cKTT1tJ$7O4Zj4qC}hkDTd6T(VcnwZ|HpJx3#s z&>>0-j1>j|A)*nw6~2kHlO9f)>eB$6JK%lmmBZ}gf0d*S>C(1!ixB_1#FrYC`9V3p zQOU_Zmu{&?W^z=h)q3zc0L;jkx}LB3*^@UK)7`$BD@;CcVzKt)-vt1JJ2OI&L{5^L znlQ`L9oN~7@wLYr*QW<7-Geq^34cR$wi4FIx7FMY^uhxpk~9fewBI)%wQtz&cin!lGwkKd1re8(t` z>1@7AKdJBiBcu#3V09&9c-#%`u$ZAI_Hd|}&y&u)$X-oqEcg-ZG8U~_XZwLYE|o|9 zqx`II`P%+o5p9nDTme7bNsndt9Y7<64p7wd z@47J8p$EKQv2pF(j;~WoM8B$-t>eYB9d&|3`WlObZD#|f4M%pZ|G$7)i|D^kFI>Feh@lRfAb~M<219T(F z&Kf@^i;GMAcS@9@DDD1r(}!8Iv2prRoW@r(s$f2cfoEOE*kO}-9*N4uPY zI+j!3NM{e?YG&P9qH{njke+qsGIq*q#Y)mW0!AO!DJL%G|7rc5@>-|7mac~8xLHl3 z<&@VlCQg#9#%rx4YA2~N{jJq0uQmBvz0~N#ey)=K-e<41MohPgVtMk5f52?xC;k8X z2S5CxOqxg{CrM3BlzZ^Qky}k$E$p%Zr%^aC?V(Ru!YT*qpx z={aJqKlC>DBsg`dW>>P5dRM7ertjBpeWc$3;lLSyCt0DX$JYhy)%2!6@P^jZY`juu z0R`gB&FQ~tUJ<5W2ARg_xn_Sli;*dx@7H=^56OLoA+!Uc&qbE zFMh^*)jIx%j+7%hOVZOil-5+M5UQs3OI|ysClWZ-D5phV>Npaom34jzo-3$qC51~U ztfEj(N%zu*ww#jiv!H9JE+DNy%nMy&Z)Xb2`lQ5nQOuu{vgNy2_ECJa&TeS1hv+!Y z=3^1t&V_caK$u+iD!ZYRK5rGc`Is`a-GI)k=@gGn=lpRxs6#y$-^a7Z+<@F05r>Vo zO&@WwU3$DYLI>E4Ezn14h%0?0&doN=XyH#TxbxsM_Z{vye)rLbZhP~YI~?f%qLbdj zmy(e1Dyu21p-|4ku;Q<*g@1hdiG9)5rmnkw>+kxDzx(8c4k=3Eq_^;8BnLDd zEN9^tew8h}_|Z>)YQ=#Qo%gI?`T9>*o^`?@MJfEkEsR$X<-ByiwCYHl_R_irs^>qQ z=x|7kcg@&*VF%Pip`4YSIpyc^TU2kRepKzzIOPz!TY|t(4jgC*GnS3 zerKfoI*Ct?g#iJMw|V?q75Z#1KH}Ssb${Fsj%?t&YKs_;)u61B zLm!Cu!<^dSRC8)+DRVkN3OJge7<)&+U>qfnOxr1crRZLY)i5%|CJDI>(9cnCG=x#6A-KSR?oO*8cvg*l7@0f8X7PpZ9@2Qa7&Y>aqoBc z&T6!J@9F6^^q5m$dv<>AojZ5#+_^J5J9=L}e8s*0efI3xn`Rou2P=#SDyt0RZIs*N zWNeCN8GlC4M=89Y!l`!~#wv;rz0)ubETaU$sTGFt3WdeP6+I7sTBjr=7Mf&-T{TSJx9NgtNzPzCopztTc=- z>{Gcgh6pt+*05c(Bb~FeZYtw@HEmA9@>5Qx(@xl_5!>zEp70&lcn@g15^gH%k5jj} zR(8->prINZ*Y0WWyV*|o#yqXODKn5FMZ7~RYVT?=NDmR$o{Vc->87MHn+n55=OC3# zy0+&T??T#jt+5W*$=a?zW?X`jobL?S8QZmdJK1RWTe-Bq*P`BV>wVkPX=k*Nbb}so zANq8nR&Urwb1suGNOMMCn>}D9##&TU4Qb2sT0Lrh z&~Z~fX>7zc-aAgX$F`H*4zU=pyN2v^r`_)vm4uEIZCtG9Ci3OJMwBhNRFcO#DrwF5 zwwtliJ)Yg3Nsn>AB4pQ?=i9@3ZP!DWp|uFrJ(jf%GC5<18Ex6~%5~RZp%P3YNc7#?`Ub3sl@-{2Ghv z+XId}#@cBh8$@Og%_ufvHWCB+ZE%LO_Lq6CL}8M$5O@^28?DfF#}9yDQ}l z+x~9LA8bqYxfV47PZ6P&nkUZF-Uef_PSx%uFg_Sk#RbzQ;zD@EAe?eA7{SUk#vGNB zt_0bCr{nm>MR^MMILXkwggR6(tiCbj(s08bG0&Qkq2HK0p6*CxjPqHgnR8bgaOpC9 zBqaM2n1>W~B?j$bi+ll3ho)qTe6ko3?4@bE=D0y%MQCd2XjJq3?Z}6V1sg=hcgH#$ zTA4!o7@;{dzUnj~+m#x~SmbH!aJpRx1{2D8K4PtFI%p?yzTMMjy8~Fcdh^dAcAD&b zB3}n@*zBh4Ofnr#Z%lqQv3RLb85YjtNw12?`P;6YNrY=s%++Iha2=kB{ZGcUK)|UaxXgJkLV<|NC+%O61`|U`v=#087vddes6CKRE%x?olIG`fP$t zum=+Ii3sL1$#+5_ZIHah9((b&RAvavH7}$EYy#^;$8|b{GqyEC=;|d}tGhy0c`JggZE9MHNJytio5p8O^Q(0bOki}*P z>QFlg-hW~73bgD z%nkQttW>%+)9hJ!?k%z>L@22l|vdpGS3qXM))Q2`h*42(|$ z0}hez?I1Joc*4;x*3BavnD4dRl+~BExhqgwxNBs!gvq)_V+NH2=-r9oU+8VDL(=(h zsUof2?pbPYVG-PcBDfC}!SxlvjTOP&S_JpOBDh0Ea3>4kzDIq>>lz@gYv3@+ z0Qqom5`cWT^&u)RZch8{rNMjt(#wlnya|*fjxWg^{89i@skWWeTVI3)~vPsj48V{Tj08kG7)|SZQ=NgZtU_byKD=6$Mk%unFWne&{ zu}y0{(3fP1JkDr5)@eLY{mv43{HO51;@hL~fE*8%$m3_49Q!pMFH-uc5_u?{V*S88 z11Oz7ygJMmdxBQ!6g=K8#3)B!o-2_D`f`c_=DzZi-~oRR`)JYJ*v@YQI?$AbVH#Um8%Dv<~Jpg?sWYw#QjOO(S_1O?*LA_LH#&|q8Yk^`+0 z9_SlFA$V1I;Eimr5J84Nr*MxL?sRx4or1?b6q>8)K`<4MS455tM2kJe_er7P@s~)K z$>TZU@gVUyf&nI&t{l$`k2k39`)irSw0WEo9tmoEqim+8E5{4M!=j4E>dKSjMd5J= z@%R}OO;D;F^+bztd0cpGrHa8uaF{-iuL+O2#N&}ok7{k4H3pJa%2KQ=JI$vB|LhmFCS`|9uG`W==9^l<55b#xU)PS zpAa5TQ}q+Ap<+xtsv9dj^HC-Mb(0E+aQ67)Jm0@32 zQ{&FHrSZVc15iSzLlkhv0i9M5k7J#bKw1K4@;rVaJQfnpp+G~+Jnp0To-TS2OvU33 z;Q`t^@gTrE^@B4F2K#Ly>VQYpu?B*ys$ z%4bWAcOB#*Gh&P<;z|ktyxYyC0G&KXa;ou0J@5cO@J2gm^Le5{eE{NjQ2-72%%cFl z;DK`B=TiV5=nwA~phFqP#sc#XtLFDoPuTSYxn zV*RY>JyZq&ei^62KBD|$3X3R!9%n;~DM0@?7eSj#D3}ybwv+8-)lyLXuA{ULkP%x##Ihxe&?v)rM^{RUeKNz1CR9Kt^M5*v z@d9U9rT!HNz2pyORqFN;-5aWoe_X0!>x-n~Z$Gfd9Ua~KJDTWQiaTtj*}_`!Ed-zb z>?B{K>9-Q}9RdJbj(waxKt&PLiMXl~FHTkG?|E-S6%YKL+;FFzO{WsLza-yLQX~*2 zNi9zoO&RLz8FZv+gJ(}9W~1%#EiK%(0AQ-K0-Mv;K={3LechJ&jkTNW7}x6Idmi5- z!mMky(w@x-?NifI@Yu3>%ciYOb@jFNja%y)wrptLxT${Yj_viE)^FUpd25{!5RncT zdc!oiDBvfVLxoDA02KMCzC*KCr-L%`(djhGE5=)VCdLc1U@BgiLHTInyr8dqbh=#1 z8&4&d^47*u6Uj)M@ivt=kJIUGVje**^c4{B(=f2Ys@SU~~1v^h*@C zt*68uF1qo+Z20X(CcG&;5yRpaC|ALva=)O2g?VWh&3c5=^V2Yz#|?wLa9#!MVUY>{ zJKo}pXpxo8qsNptE~tPS7XJ`9R9dz0!0uUdc~28iRtFFU6})Ih`ikpbt#EO=Kx2f} z4kw22COau$6>Dpv$87fR`zZyu6!?X^=T%^=b|N#6^|cdi%tj&PoU>z2KuHByMRAgd zJjMl~4H~>L?ADwa@4#jQa43u-6Tl)HNSTUopoj%p0d%J1LpKf!0?pnpY0%F%9_NoI z-BN~yT|uA{6l1Yh`QMT9xLlCoPXu>TVzdXa!pJz4I{3sBckkZz`PRKx-~G{xnv3=E zQ&I<70jOBDi($rQ;|3rJ6kf$T9SmFbt&ge4r_>C}|Av&Qx=%@7^#e55N}1vdGX{Y7 zA92bs6usi}87WuM-IBm+1W-IkyH^KXQn(%Tb*grTp1gj?=_8B2TBx1B|K{4Loj;ZK z;{CzKt+xOU8#-7x0R5f-uy;TlQGr?jrJcA{%)R_r`@rox+a7y4aq-d9O&0`A9X>G1 zAC-JuQZl%+w+l{b99u4cqJ_sPwEe`~1jGe4ZsOv?0{`(X-+c67%dECXzPRywBR}6f z!4pqMSS7R)7M;a@xNN~PHHY1rYcFa4>amLTp4SjfAasc00%H*ZU{&x3>2`N5XTvQw zl8R}kl=JF9={K!cfi#4un6w^UzBYbWh(9Uu&ZV5>Jt(# zk{DjW;Y<2ed^fAgl)CXwUnv#TP@=`KA|r5JK`5dqh*A?1dU?FtYHq{2_SmCp%WTBu zZxfa~DGo0)RfX4ps!Xb8s(O``-GjE7p^~)xF@xzlrcZwckab+&Br`C%+f-UTX`J(Q zIc$p?$KF(=h@v1$O-#Tx0Vntw?xB!`$dfyu*> z&zV3tk#%wuOfKS*_+Th^318pOFFndtoDdF^DFVSDiYr*RVf`;3;x;@YJTR!N<&fCq z+wzr_*A0>;Y?pNvS?{RjnO-hIZ>nB@E}bTY**;X5aeRzP)?aHnt~n}Ihn*3A!!?~m zBInXyw}6z%s(+>4@0=V4HHh%{Z-NI^{&yL%7Y{o5{%g7J6gRcRI-)3uQWFzvC9Bp# zwJF4VnDQafzt(#CxjywSN3XR_Lk9_9VY9lBq2P`(N+ig~Iqz=BMBuX4Q&67c|FgR(Wm;hw4JasxPb+;fI`5W3Evc0r zwsr-DAS~u*Tz}`?(s{Q;h5=JqPT{;;qARLAQO3`E)NVkZR`}c+2pyvMv^wvWitBF; z=`4Wa1mgO8lidp?5QUu`27`40~k23<~=u zy_YGLu;_4yzHid0)>~`Wy@GlYP*4!JBV8Z+OVG#ux41r5ks<=642p~C<3I`eIPezN zheTdmW(gefv5&iT)p_P3z$bC zJm$bp>DpP`{^8?oi}AanH~X4rmH4?TjvdKBKFie-=v>oDkM3|2E1qK_Cc3#RigpFQMH2 zPBBTV*spZ3x z@-u(^-GAElo!43({>3-G(scc|%|OZ#y;IVYIuzGbqYx@hjY|HI#7bCv1Sq7%yM#87 zIIb*pTSe!I6KcHIETLdhD5Rt#GYTsSe+Dv@k{WKi<;P#j%x^imb>z&U`S;%(P+JPl zc_l3+NtaQ;%kl~eg_HzE6tbjJl=Q>hH{3eEbLRHrJuBBgf9oZm3#csx=e&~edWC~K zd{@Daw2+dX{9h_5`^@RY#p^!Pbmujn{K@Lh`9}k4OTn*PNqDa-G~II2Y9MiZx+!O- zrW@9+)f8|#w}!%63hO8oQq)Z|3tQ7`RBx&&_k%M}589u8wDGU1PJX>=4x zTsv>q9iRQ1&wVSkWM?4!Rix)}wsZjn@W%Zd01OJZDfsUwFhXkQ9U-m<839H@{}CNi ze&XjA#)c~Z-vYNizPR4((vEJ_affR7CQS99ai36rG0rKxPQI3JB+zdcCg=`_V|rO@ zG-D>z&l-BBl}VaO$8`Ae0$oqYWveT<(ftJ5#EgCE?aYbP3!D`nOEwMbhRHGb znm!P3#&D_zCl047%{QC@kOF~9P`pyo$~$1l0asG^G^Y$B?rE?r0AP%OI38;(AmC^C gI3j7~ja01Kh5D|d01pgMRY-3xNZ5c4dL9!&=5F%V#^&C^c_h(jN@MdFz|&7OeBrzL)cJ^Xh7r63W1bAFO#tug^NyaYlA% z%EXlAEL`Oc_zRnNc>{xKKew(B&Q<-p8)*I}1PP9;sLDpa2-m~3LgwA9uzd6&FB2`SXvf4WvovBuOeJ1OB>E@(! z1Z6fP!XWD$g{x#T>*sRLak$QAy^)S=Fz9E)5$6NQ8480wKjUY;&`&n`z1~nd+~ARX zTzgMLIvor*k#^83ZbOev)RJrI%aFuLuBm5rDw*^%resSd^s^a~XD3<@xqDi29Ya}v zz^~XLHa36d9qqMh1N+ zft*aTd1u(&-JVNm?=R|Jv$!ot`lD8`A{YW0X{5V$G@&N4*kd zIb`n6iXccw9f*vcPCwn-7?8Gig@$4z^dkxy5l*9*PDAM=O?RgsvSp~DcCYiPwv6d< z*Ct-;?eI5{6$aTcG#EJ%!;WBZWjgS}?qDb!917W>3LzI4#V+B#8(-E4mcLTQE#_`4 zP;iNJG>aSheL;4FwbMu%MWT(ytuw{Kb_UrnmFeTb!-g2)Sdq#kL58st4el5+ z=Pa_Z<#zAMb|LLSmXrM5Xk}eK`5J14a{_XQa$zul-o*fA;=?Js$qPLmlDJsokMKCb zwb3Wsf(&CGta9DmZM+7?T$HsYl^gKGwO-iYn(E1Vq(*q$2(5;sHa}|B-Hpz4o08O^ zaw;c`B;h135B^MYIuqm=)&)W6oRlXMxieA7tA8%QOje~maf)?ssU)J@B^j_LvUwqvNY4|p^b zS@`B;irlWW9l|${mK-Z?^Qw-f?shZGjs&5Z54i43m>uZ|XgXnYZ_Z|e?Alx(_cHInMfq%0^O3#FPYi|r`W`>qhk2{JaNo0!Y~D2(z?*gsdc($R zva`^BVFj$rru9I)`a1r`RXo49ldjQQFOOX&u(!t9?`H6sYx5$ zjLv7x2x5bmO?f?Of0ZAyX2y?Sw6E36g~s@rg2WKaILF4*n#%0JEX(t5k^Vg$JPIy$ zXz0V-MyC*y^asdvSmli6BwH7Ha4jc0JnFsBm?FHh$sO%gn8;c`^jIBmADZBm4eMcT zkQ_?;w4&n$L9K}{~5$296eI+7NN)qbk4-wZM&JA&LM zR+=O>^W1@iS(o5yV=77Y!_;^si;-(B?#yK*724CDv8D@Ju~H5#^PnKgN2{CD{y=A# z9isIi#%dm~3M(09l8t65c4i%3Vu#mfrark=6|xfI9Y7v!%oxSgL3!M5Xck@PxOeHI zi`FJxsXr8z z+k1O+WYtmLmLM2t7@#GUSt|2{G1^*ahqJo+hX#5wUMk&^=?xrofpNlY7G^~*3Wczp zjh)@7n;X^Xd)Y)k8vz#Mkxw)RivEhSSR+`dbf&NupcPq;dx_>7QwOV;DpCcohcgvN zSrD$vqXn*6%5~A2F2bR%HO@Kp8#0w2v z{u|*MBrhLsa}nH@BDl+n;IRhnsCsd2!2&;67LccX1J1cM;t6MR0qI;BGE} zdy@3>Cq;0V7r;G1P9+Y8`cp>oLrxR(fbt>ARrs-Dodiv@?-3ZQL5 z`|3t_KX;ho(b}RFFP~FVT0D*-VIC=y zhmKopHnc0XE#F@#Op8RIRU5-fG|uDgGI^+dfCtu^0Pu!BX4WEA96)R91AG9;hs~~@ z0FNJ#Ug5`XrvLyCG~=!^dHk5lWBx|j1bzsxCApu%_sZmf`W2SQ1=e2h^VjPFTL}up zKM@&#?hzX7*ne@DGf&^ClZ@L$3M@?Z^z^HRWV6t33+#5wtY!23Ui2j-R*AwxU< zio)6Fn~YL&*gUjfz~eI%o-C8ce~29LgIHH$jQ}2xQTWIO^g~cej#q^T%3n-jI-SCR z$3;}IaT#3@Oq9pz!ea^*yz0Wrc${JJ*!xG7@i^1s@r8>j=o4X) z@K{bfjzk7QxjI!Ii-pIDRIsU@SxlJ665%n6cx-B@j7OdDs3#s*te6-Nh>iCAj3x=# z81(T#BV7>CB?nIA`B6KqCmeXZAv~auUpAQn6Xo%y@PIy!lSyl$Jbo@bppPZ1CMHLN zwB;R3AGy_)@p#wL$Gzf|%596vfsYNqEd4MQ&@WOparP$ECz$PkUuNjuRe9;_+-pWjrPekA1|WVco=d zV2Gk$9v2%sfa}i6cswCI9;f0rbyddWN#TKU+rPdt9#07m^zDrsCdQ+g$f1vUqSL48 z`ksxI@t7|>zC^`8E(ateQdzzbZVz(2C~bkQ*KDRAf>J#2a0}?Lc0iGTro|A({#+{f zOocoWXB!?b5|6`WQ#4UI1}q*gW1&khQ69q$KzMR1AFYtC}5q9ez}Xnz6AXcl+wp9EjiG9ET6z*5fxmPqzi&lJl+%@ zpuG}51ZYp&VUDxi=VVD9KNKF*i2QO2sB;d5Nfho+(N75g{mT{)oO9Yd9xju|i^2oz z^&5l-MJ&go!lRTv{#|%rU%FR#K&Sl_o+(p~I1jat7l=pGcKRs+knu;BK5nKo@*oFX z>8u^}QvyJr50H;@NW@1_fNa>eQg=snAn#}jhe{sK`H+V_7-9tUEqEXtEAep>PnLKJ z#Q@}E4~TPilzWEShBDv>-lz+0gB+0QS;9j`@ByF>a-SSyzYiR_Lg!=(;0<2L2Oaj$ z;4_^9`tVc=phZ6H0{cM74_l>bxE|2KKVmGlPyh}9nHnj;_tsNrps<3%2PrgDIFkbE zY@z_bHDpITN7C~p#`YQcbrM4dNMqZC_*{u+NUV5r*Nm@`_^cRy9;E@`LGF-a*%I914h+P*8xLT?#WOpkD9?AK1z)3Md2l&{pKlrGR!oCbS!Q3n)PL zg%qFz^e^hgnLX-)K9*9zmK^lh5<~uF6jV3M>G}`~Xv;+u;sCi3~UV6fLq(9Kl<#!BpQlWmk0F&&GWUG{UMHHF*V z-8h?vSKH74-9k^N5_p7DZttc@EObLH4?as3djB8tj@1PZ;Yi*lKgZ9i;&CYed1MbPF~T9w zrqe0SiP70K7@{b5ICH9s%Hs&trh}=24mtuT4oe=rMn0y?d~{e|*>s=<-ELeEC{APK zVY&ri%1smTOBA=J=%S6Ywr)8Bljou;=wtCT7qbmKI>YqmC{@K8V0A&aCoif(H{>T} zD()q8DUm`U`AM0IjRTf+^5iNQ-82`o=4k!TqkisDHW8-WdSVsqcv=;-iNyfJ^cO%1 z9&=9Kvi7iJI+1JZ0cq$;L2-pf@a`&}^&=jrNy~u8NfcQ3F*=*(1P~HH!>trBowc^m z&k1fHxYbRI1j#h(sGAn&G>No<5;`Y=ZW%I@|2FLsqvD<@|TA|Oaruj!5 zGD&Ahwo1ZiJWSUBh>!W`W+VtSU(FNp*;RrDCXJPp0*0uz1I>k40K~WRm05XBaUSNo z+s%@PiB!R^1FJGkUnK-_xgf)*1h-FO3>m-%6FGYpyuE+_9WARLxa3C{UUtl6={2{+yP0ecA(&z0zCFh{z8eh8JeC)`Ca|K z>){OpHw@f?U?)f)s@~v?0IDyvzm{|8 z8eJzBZ4xUFnzAm|wiT)eBd%0E9ovs?bo}5uh3fg2N9ITM+$J)_+XH{xRRD+mpN>4+ z>oGaJHXx3uQn#<#R1WH!{`Q(L?f*d2tL=AR`}8BP-udXaRTE$a-!KOk1gcf-W#tE& zbD3h)0+jZ0$;Yk5Z;sWT25nC78y1BJiGp4`q*4lADe$K^f8}w zQm#I>6xGL;-wS=zme7Yz2^bmno22oPgBcxg5(Pu&@(X*_=6wK{j~YRMjR-)E6_XdB z$wcFZTRvxE-n-xeIAW2KQDpaTlt~xy@n(BR=ka%RXF} zF_;O&htmr~uD(%qlF>dP?*LHht+)_!XUs5NIGZEGAgq*mp8{o`S8N8PqH%A

xKIR6!F7$wtOc(E2x#sm8iRi8DiP|5IIpAjz6bk8~9J|5nq8q^p=|l@* zVwab-<4Rc~0%C_|UNkLRD>~`D$D>!ZCxUVGn`jSaZla|lK;FexU-!vPf4{f<*DX!5>7}Sh2@ZZr>otY(ctFs9<;XR$hzCSolt-A>Y zzzrp)sKy81d@oa7-Ps=urIYTk@8(dH)k#{Uug%bR%lNBAZlIOzlw(D>KVX-S zj}3c5Gs~TdO(NfvU*VHe<+Kck-NjmFcRjBYb-vgqI;@Yye6Vhw^nz`186g=H*_GM| z9gq_`AG4*TY3hBp_SQ!o#xn*l(dZ$QRpF> z-Gp0BWdR#a6g`nmD1LDS+3Kl3AvBPezhdgjmtNhS_&l{cd$!w43oV!L-??ro=cY1* zNhL3IXSdQ5ldv+cH9uG{mKE1&pFRWRD|zVG3=BqVN+;m~V7 zg+e_%<&Zz%9-gwM_UbpRq(nf!iJU?Xcaz|!Nvt!GB%SDiw74gpE)+Ut9YJZV zIPvrX)-QDwmQpy6LZR`xjpoim9{Eu!S8CdN?z4|yzhQlU>w)G4U)=huJ9}(}=qf%w z74IUx0QeI?9Ip?{t}*Cwc=#f~B_mpl#bi5iCFh&&&L`Rn zD4>Bj%`BwA9}sRLQ`$D72V6?QOlkb3ZJL{Co^i)~`PZG3?+dlF3zGD@ zAI(}F{GThZAEW>B(C?b9|AQzU4P*$ z@+N~Cr(b>RB(C41gkE`Js>j~Fl;Pcf!abj>+8VS!_|l}FC!TucAL26JA$<2qtOKCb zXuMVE{aE?VkHFtdcT(63Pdh88vqOrS=B~w zALheNCOUM9Zjw=*?6;L1XnZMrKg9qn+HAg)A#T`k)n*X9dtz-l3$3aps|j zvF4$<+NZX8l*0WVn}_X93SGkl0qOxEB49OzFYwj)X&P%8z)Ta3n`W?b1=w{Ks%I6^ z6{<(qAf@Wr&b5s`kGxsZ`y@uUV^s}^FFAB5E;Q(9XM2*Qr&5d|iuc^;Ka=o3jEWj& hH}K<90QLaLH??4~w1&d@ARve<9eA7PL-dcg{ulmS^Ns)j literal 26639 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 W^@P(v`BcUYD;;o?<{tW|fc_soGa1tW diff --git a/Examples/LocationSender.uasset b/Examples/LocationSender.uasset index 20881ec63dbf21afa005008caa2f1c1b631148e8..76490c786d2d9fefa1bd3330491631489811f62e 100644 GIT binary patch literal 27603 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 literal 27284 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�XBD6cZI=v?LroQICukeTq4z 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 z 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 R&FM-W=IMA(oz?B8{|DU`1Oos7 literal 110135 zcmeHQ2Vhji)?N@1v0+0|)U^U4#ZXiPC8R(kKqP<)?}1CQkVx1KyBm~WpS@wliYOu$ z6gw8Ih@jXN(PytHim0ggtl0R!Z|<4RyH}7T>?CLB-YMTbbLPyMx_cL&b>OT& z*R5N3{ANDi8BKg~_s3M9Z*$xY4u^v9n)zNpwYpW;8vaI z^Zf`KRXpRnwhOK=p4R^KQ77N=)+xkf9_DX`zs-D4Z?&(l4MID1EDu(PV;zSVbni4Y zSQQLJgVB!NJ9j6Va-C+(-(O$vcfQZp?H+>Fy0*CN(myaU*rlWE-?l;-)iH|~drBEdjaLAkFv0&~k^;fQYseKoAIY(im8s4P|)4k_H+^71i-RpCHP zefV}{!t%+1P+73Nq%xFW8Lh4gOz~~Y;7BAer6dxr4n|^Ae7iBECKeta3BSg<@l zI4)3A6&n#inN<3*8fQdh@I>{jvAI=M;S=*ARrUC705LW%5Gt4q*?=!4nz1HMQM71$ z2!bg0wP4x-mF4BZkShDwqG(A?B*>!pSRG@FgX05bQ~GOe@~Q&SXi*d#R)iy!u|TYH za?rPXZNkC9VEM2xAjStvCj_g82FFExEfF2B5#O%nU0qyNym-p~HI?N`b>bmKA=Gv# zP&GUn91^OUqRJJIES(aK1t*ROMxv|&3N{`!Y)W;|N2&A+hpXa}X5Eb)0vSar%Ty)sgxV2ROiofhghg5`GgoO0mUq17lC~jbY+~Uh zv&ByeWMQdpEc%2xRay7BwphD>5M3)Fn~Kzl%TczjwmgV*DDKd3O{lz%uCf!0=T3;u z@j1tL^KGf}$AaU-ktxbD<)Mq<4O@lkmz054{Zd|dVm116*qq=*bT+Y|uN8CGHAJcd zkgh@XC2~DxjMc$WjPam>l~HuKg95RN;>xj+09e=~G1{`jIspq5&p#wuru#@8zqc8m zv|}HWr;NFPNYBk~Swc$7&^HYYhhx5-lLQV9ms_S^Qd^3}z5v~2EKnLO3x~?BE-Jq= zfV5|OFum$y)zxIowv4G5Z%Zr3hXPo53tE$3 zuC-$A(+F3yIIe3IoD?jpi3Nv`4MxUuX?RT1DW{rnDhA_=ew;BDMk<4$@+xbt&6&8K z%&LjAzEQkIRmpS^RzZW2AeMerLfe`rS4UMIwcfco@3`>EHRhra7o|8Gg;e6Ka5Z~i zjy3s|Wk@w^&4ydE_pBTmha9+Wt@Rv>EH&0&@2t+CaW2=JwgE6(Mw()~YlXJpgCH;g|Q)Qu4Xx+t9 zh8G8-F{{tc50}+&X)&sLfMV=U1|oUkDrh?U9^6mhR-5V+2L&ghM^pU>M@IKBhZw3S_$5+Hu!FXE|jvi~?9H+WN##l?WygH_`9M5Ne zsdlY7VllRLt;;x9+z!O*Gs}kc`Wo#0QlpZrM{}vSBv3XXFy2}&muoExRTXwgVn9@9 zXrM4ELrVVSPYsw@FC4642Xa_twOV%PEq5j<5xo=TV>xicVGu_KxU@DH)J}9sq;eum zo?4n$JG&ekAP_?xwdtbjO&7YbDlpy>7Y8}kcuTQn?P#b`S@Pizcb1aIU@cyiBfjmS z+nH(OjsP zDr{spJTZ47woj~0dbP$M-_KB^C|eM#Qw0sHsF^r66sW8!3XKb^T22y7AzQ;_rNGvy z0Z|OrMrmH@81k#CCVs=Bm!c7tRVdx%DBL#kWa;BUs{YvzlvZN@1^OR~D%E2*p^ho2 zji!{5tXi<7Ytt&U0*D7uxnel{pb9Yzo7M3cGE!F(ta&P549Z8&<3r#QsCv{2g3|Tu z9>?HrAa>eea}pRQ7+Saz0~@?Ybt&}@n1pQ0dhnnS=_%J;>I|{1svkWImA^s#7%ODJJBI-N{YCbQFaba=$6=l?mxo$L^&k3J>i^FfDvkEV!w5puaAMcfOBn`evDIiW;l_G8>^0ATA z=`v_c#^qa4N#i;@V0Lkc>*^49M~b-5!OQFvai1V=rbFEI4so*_;%;(?yV)V`R*BO# zQtK9VzQ4#*$7$VS+yIGdCcf4K>O_&P9~)=Q2B5tqkmml&ozx)>OgN2`k@z`?WE?Y;&E>-kU*82i{TM!Uo?<#DiqLHVBT z62p{7X9I)snClYbN2Bd`GBC);GM5-89|sy3C<1+FmRH4j${)l<5%$2FsG~ z62sK>y$uZNM}F(Q806y;ml&o@I~W+0>HQus4z*#t=Muw|hu^@UJepo20S+GP z#gs=!Ny~7`qrFQEQy!E79Wi)a>;a<}0pK)7%q50dmOU+qxE-760b?&4#v+#(rmpv~ zVSMHi!z{~K3Ia~oON&dbd#6vPH8J|wFb;Bw@vUKlisgZXV%?Uw#L)8KSgezckCR+t z{9y3W-N2ZEMWC53F|<6`W`}_22t{4*F`akLj%mrq#~`*9J*Q&$(V*ip!1zco^xTUW zT|jrZ#P|yNIj=(&-yCL!+Y&Sl^sY+`-QJn^D1N|k2f7GUc@6Kv2TQ^hxSojX1v9PWnP6y{5@QCa!z_0gtAvlvNY1qauKE$< zUC>h=F?e#C81I3uy8$0?>B?f~gLa4*Z-Z)P;{z^JjJ=VE7$1X*Z^Q>&rWkC$8l&S) z3L-7W7g|5?Fs`xmhjI|(FkH91*&D_H!B~v!dAE4OC=!fa!AG+>-Y||5j2(f|_SVcW znjjD5@r)slF1LBZcvdjB0$#;jZy3)B#@EOmz1nPD_T9@>vm(J|W7EgtoTF-$OMKl(oA4P&@q&=wAS z+#ALS!BF;NL1q}6WX-D;TsNpDyu+ah_mMS6+L@8^-y9LHqI3 zv)(YK3I^>*-t*otE)WdbkMm#13}XxAp$u{agYBj3OWrWL2?pCs#mn9>x(h}TFiv_U zGmI9k`h2nPFx`J7y4fWf+?er&U~HMV5m(Ch;R;hGPPv8`aRZ+O%r z#&&|izG3`_-uP%G80;Hv{Ky-|_JXlD_?X6tG8`@yshcDpdW@^(v4dc+Z@6!{l_67% z9R-7Z!@5trVeBLr>>Kh|WQMUd@=!na7Yy3d)t`C8I6yEcpZ!;Q!)PZMUn6_hFT7#2 z7Yy2u-8rd)!==%F)n%D180>HFB9P=K zPAaF{{&q-2d7Ng*T+E*d#_58=_VVlhykVSSlx4FYyz^{i;5d-- zxLGjR=0^PN4dWKUAm$~%c*B?@7|$X5tY5uh+$tDsFTu5$VQh~)l*e?zV0(G+H*Xl% z2nO}zo8P@*%n%Hkj$i-qhHYd_eb;%zxJWRlAETtD;nG!` z(|lYk80;1%aA8*RTUY8f;X}85jd6)!P(Mn!mEZc)zjK~0ECnTpl9yjFi94D+EFct^~+l!AABM%r) z2nO5BR-6cUz*s04)b*b;#Ml{mD35lsUPz429HeEyhsJ0x7;G=&II!`6(LpdcSD(xd zGy{y*NY1jnWys@6cAy?G-WCjwrG8<7JYc+IV63B|_JHxOV6g3PL50r%V;3Z+JVpry z=VBw+06bv)OE5SW+lm$L0ps6-!MWI@9x+A>28Uulu);m?F-9=X~1%rLVHT!tO*h4VbH{86hH;g?6qc5^w z!op=x7OEt(ydpZrzF{dFjR%aSfU_W=2e94DM7Mg-g_^{W@UxLAY z?maeMIJX$=j;J5Ot*kX^W%BRR`5Nif*<-^ulc5fKb-y-e-r4I^q` z1oFIL!~|m=_&6-z8%B+R@uf$M$p*#@HeNV>T36~e;X}7u4x3mnUkV26rKr%#$xrJl zA-f8&V|*nTte4+BVtj32yx!j%AFBNep+ z%T$+Ts9IJX!a5)-FD#xShgvp6X8fKezIlt=dxZy5argYxKbv^R_af=%Z4Lmo4a@rLoSU{F6UJJuV`;#Q#Z=vCqo_=j`W7{vmuY(qr74KA{f+< zga73X<5xo-x&O`#gVRvTqlsZpOGkUdXlmHgW@EfzY-ZTgwH`5=8TRy(<1^!fQ)kXqoFsL6h%DiC|8uGZkJTnX~4^SST8uEBN=nZ3qA&;tY-Y`BB z4BC&tcyAb=8}cZs$P9x^9hAoyX>+^cdQ_!1jN=7^U$KaukQqiNBqtx&2?p0x+D!0< zG1K6qM^$DRT(%(}eMF{|$NL^Jjt~sWpvcE=QnwrzwuyMd*j+F<&wkM(Mq9z)5tP|cZ+z@w z=;^drW*A(;raZP546d>DtZ|3IcakBwuQQ0<>(UdgwH%JUKl6z3j)Ae|iQf45Xi6;~ zolo+H@%>Z_BOlpIr+CA7;*wfErvINejD-fqf|I>rESXkYmQPOchVi*za1CMqQ@vrV z6b$M|;c4D5zA!K*obC-{m4Pws3~v};3I_FK{+Zq|zB2e&dzLqhuMLbn&+&%w{pGcK zns=@@j9;#-#i%&X8^#V-)nZ(HzBi0rr`KZKKh+yX8w2C*3%p_MHKUe~KQ8o!(ZRsj z`(kexXJ2pe!FF4Ci8qWVZm2EG_)EQEJbj~u!S-^|G;bK6;`_rb(AUs@EW6Ab#%crO zr^~%zd?Of?>26ng!W5^cNl*d{XVCnKZ0~w zp1H;y#_tA309l4MwJ>Uuft25)@mdZ9ep&Gv?IsPJ(S{8v3<^c4*9G3rKdeDL=>v^+Mu$sNWohJJ8peV1S~ z!S$UUF?K>;@Hyjbv^8iO zP**%62gG&3gW>D-^j&bjEoeIs_p!DIwF2?1ByDRK&~BjCAg(#@1KI=B4H#TQYXhSF z+#STVJ&uhx19eAySNQn%ag8ULV=(KLalHOPeD*Cmj{ZOp9j}iNpL)Xk-XJ<&^J|#& zxd%?iYwD1?v3)R(&!*2lm3}Yr2aB(tQ7reGzxQy@di?;j97LDySsIIbmdraEG*0rF zG8iRc0V9ssW8{94_(AbCZkgQc{GZ~U&-o0r3PhKVM=g)BR&tfTM)K+BM2)zW5~ulR z6rb@QBb@gq%l$dxPZeKdo`-unrhQ#}&C98bfMeVl;_G~;F#?WpUx}}IVc0Jcc9{{! z@Jm5-yuLTRi3&sCK{1?Sv z3g2|h^9+doyW)Q${+HrEEB-g)zbXFL;-3Ydju_X8zfAo5;L|ZKSNxa6FA@Jk@sAe& zeewIkr(<3n_p;oN7yondE5u(R{)zDEm{-TWBKH@H|C;!k=U3(aTKII#J74@K830Ee zI|MX@H*icdQe9bbm*Dy?xo6x}#`ROUX4n$(7s1z#{aX(Z`yb-d4l?X85N+Y%Alg@k z^#L6LIug_u)B=IcdL<%0@9g`obR0U+ip0@0q+hSQERY!HYxmgQl65R0-N3MvH+ z0}Tg_038E57PJ}YI1tM{3PhZLf&LAmEv0>A*zuqMXe_7<#ISNu5Ht?NI^^>zK$V~q zKodY!poyRmC=6o0YS1K51Vp>Xuo$QYG#SMDX4pxfDWLxYoeW~wDWLy=XuoKu7XNPV*Rtd zGtG1mZQKmdwIG(Ax;GPaJ!lr_2GDHKji8%A%y%>B7SJ5ftssWo2AT`H9drkX&$|;u z-MbsaH1~k+1`l;HptnKqfEe~J=snQ;pbtO{`w;XI=wr}w5W_wJeF|Cu`V7Rd&p|6eUw~GD81^OT zE6~@V)gXp_1Ns*99cT@xDd>C9|K$1y_&>_^Pw;=1>tEpiD%We_{{|x7@1Q?Ge}eu3 znT|5(h7bBZ_+dESwgmO7stH!}RY49f{#kXNh0z-6lfD4RhD6-0nbvr>R9oDuw@kI` zV!h_3i}fPO&g!j2?bNtE&Wm~l%(lqUuVmP9B?WltPGn-BN^w}km*(*OSHW_;mnIk) z7bwGfYUs8D*8aB6D>Mu4XfF=JJD4_3|IQ1qdmvsf!Yq^}41l5p;0Qq1}6QJtRj> zYl@m@ct5a0Q?VOGHPI?ir>Sr>(SdaQ7rj!GqU+Oe2y-TsOueIvPX|>{u}Jo=-vFB z;}#-ZxwdcPZkN6K1)`N@!|-M~_0~XtAzr5!Ecdl**X4OcvuU#;eS1FrQ~M)vb-MM@ zwe`qB+clv$EzZ~=m23MBIa5q+*MwDKkN<%2%-Fh(pHt^9Rz9plz0Nyo5!(l~3`U3!XX z#jhHhf(0@SrAf{-UXoPO39?I0>v;sSh&;WM#pKN!RDJubq`ORf)*Br+sZ1z_@#P-} z@LMM7FX!3P$>HI+Kp6e3q&Zi7{medc|Frn2%D3RW-lHndSW@^z&Nho%v@Kfn zoGpDXJcEuqd33Zo7)WLMmnSb?JOS+!4-ICPLS#*Sc z&cYPsp+V@CBCaEN(1Uw>16Et~ET}y~4XPNSrDJccORrnvgzoT^RYZA;F+;I4?K9AZvwv!nmP1hf6>J^{%JCHp%lvAetF91 zq7-o@P!Tz>?6c=vhEbLr%ua~w3%v6MQ`;0yUFbL$QL|(}$1Q#}!thO%#Hl3y{R2y$ zyF9#b(6yuf8a^ri&O6-{Y&I}c6^zF+QWfk1*ydCPb*x7?!4-n;!BSE zY3`ayP5$SmSZf?AYz?}QRK>ar-9RQ4#%VttXP+EDTRP~Eh5Z~qQ!CRJ?~!wlTe`SM z%fbtG_~7+5&p-K>m$DR-@i?tgPEi0@EmBp|TR9rbW5{OJ`=NF*sB)7IBhs(3| zK#q^MP*eopR4ysvo>|s-AT9>VjW*VL?7?L>-6Pw3lK7yUdF_JJU2g4A&|Y@GJd*2h z(O9I$Dm!^O{uN?3XrRUf*ki!mD&t2;xAC@pB&)kv)>hZfUDYg*57X*pk3UruNLP-I*R{^*A3#oW;VhGm$~L4X z#u~B2M~9#z1NNR9#vP9n(~i4A5XxY$6q zKPb5>wI4gh9|?}@@b|2RD4KefS=A~)KHR7Z?I;HnbQ#&pM%JuM8LmIe>eXH}EDL-D zbjL}48`#{isnOAj%a~+fWprXNHYgCQ_?ttLl^Jx-sfHw+1L&?dqbA0FmyYW-xe1*X zdvQAUK~`^`o6zqxEIsOtk~ry+DUW_G{|d9^)<;i+_b^v9V5(N$ow53?v{ynXPe2XSgR89)BT9D4Ydn8HmL_7MT!Z<*9RRKG2MC!|*$47&h%?tRfgvN0RvvwFe2`?XYvbmC7uw zUA!i@8(_xSjs=I~?ou7=UOFWj3r_r-_WkqqVBdN0L^s)t>^oOH=(wEG)*)ShK@8*>5Fo*>YG#&@Z7_La7Rm_lMn2xViq9%B3o(-G=EF z*akp)vo~R9Ru7GnnY97Is;aP~xiXje#+LA)^RO@uAO~Rw?84F`j{e|AbpR?kSC^~| zEn6N_5rhSa_`?x@D6H0<)X`}_0x3F7hMAgoIL*sP*p()k30W__foV3dd}5siX7y;P zB_z;xJfk+IHIgOI6GU0SN5kcU>WUJnGm#^dve5}~TO}In`28>#sJw7hIFca3 z5t3>sd^A$7h!t0cf`N!ijzvM_gpEShOypS>4n@ONi9L3jB^4g<6Mo{J+eXea4s@MC z?T7ZkLX~m{^~Yt;p1eM&U!Q|@Xm0$nL&AENcO*~BZZ??>&=nt`q=IkU!q*+prn30k zLCW4x)^!dAzu9#ieA`VH%JkGi51q{wWX_UJ+h8Bz>b#t|B%g_yy^OiCULsnfhYkAa z>DG%I*1VmABq#Z8V6&86|7j%aKgDVEs4=boxUoy=cD78blU*lLrdFG3ZD>t1|6UsP z(nBuh{m0jd^usm7T=V7WujL@OwiVO3>{=1zm0c@R$FM1h{XlxCZXMUit`$)(@za|r zrjhGotw^s^aG5^&7tyi{MXE09e%P1X%+X_Zp{TB`>U0fe)J78Gw!#Cu;p{@uCc99S zosl(?8QD*0$4;Y9w=)p)v^h33*3U*Ym$>NkMl}x=0$hb9`!EY)#@lVBIn7KwqF6W9 zK8;H@j314MjRTp_w=Xf7om_V1)~p?T-^EFAdcwzQv5w!`H_7~h)?knAnw=^ePx3>% z^|3W1n}v@;bvRY19useYbeqU=-9Q?VWQ~Kz0~YCxLkBSq4P{$r4EW7%>$uz2nUtnk znc9(jTPL~Y^}4CkP%LyXjodb{Iod=g52iM{K~uf{Zc2j(o?T`vwia!m|m5pEts}6yL|&;(PfYNwzmY4-M&!= zfH%%jU-NXf-o7b9$1Fc0sOPErxT@K2We@qvsjE8XEqlmUTD5p)XJ*FO*CYQSA)1q& z?B2~LyLWSdsABezZ?a!_s9#^+9*erlt_C^JHqCxHyUJrVZuZVKAhQShhj*m1t32GR zY{08L(KPzg7*=_l+DCTv1`04veU00`37%}*Z)F;FF$cNX4R8p{aGUxDxE|tg${oTx za8m4mC;O@@lN*w(ducXrGsbZO#^0l}&;3p19UKk?9XnQ?c@x^;{tu*U3i}@(Yh$d4=2RFfHbxxXQm451@C2g~;UU#_v5euvgtgdan`kG*Y-Hb`5 zrjefsx&g){o9GlsR~`F5)te{obT=?PIxmeLIZuTW}8cR{)Io9qWb$@f?vR$Q-`eQVw=!9@MUR4k~I?9FFHX*IGnu{l${beTaffqBJ)gN z?N>*=F7Gy!FJ4@;am~yoIu$a%f6+MJN3b@H9+~47r{7=Oq<{Tj4utqX8bNO0et#2f zkY@MLu+N%Zkw$-<*Cgz6NZem(C>`6~Y2@J6AZ5Q%sK%JzrV*#vqt%Nagj@}V`7&px zX{BjPv)?F$u;{YiD9nDNaO1x`WOqv$)thehHwt6ct4*@sDuirIvnHZap5sD)_FILf zsOp^%%@v63w+gf0DulA?-y_~sULE3>2HIfvXUsNSyNYPvooOhOsH;&OW=~^3jJ^r( z%gjw95_3+m0S>}$%A2 zPM3Xod*`mMUZQsggyl4>cHW~&G){@TG!3hhdoYbW+#09sUX9wTc`J=LH}Djt(T*9+ zv1(DM2(M4D|9-w6?Q>qt**{*#&18*r`tP<~nm-R{4X3OjhWt3erZJMAm!?&kX8j-E zK}|N=S(Aog(~M+yPa!P2?CxoH_jKd$p6Yifw}D3H1){NG_$8LYs&F8dgYGE1e+sFX z!*8}*?Xvr)wJ(X<96}iz4p(W}B>44Ai00l)cK>vf-9K%#^AB@bAU9#|VU8ag$C~BS zFgT`(vF|>b@<@C+Mxs0#`ZCG)Y2=ZejzK_OU9Q3XnMRm9BA$*@dh6Y4`N68-_&_Y^ z^EzMcqX29BS5BbHH7MggUbk+Yq=|cG1BeIW!VI@JjQTe-bMq5Zzo#kH_EP+9;G-^L zfzn`EI8+|>TptZulgWPci82t4N%YLtW5&AC z(-$)>*TD^=TuU=8SI)*SmsyW?E0~~P-5MCb-Rn2M_0Hftlc@qX5QFn>rsZlN2IrGZ z%T*5yj++kR%QWSxcMa#+Gz=$L(gxCSzR9#)4W!|`nWkLzPQkuT!?3w>mxnQZWvntB zO4v3{Hp<&b>yvKGz*%VuoiIzA&L8uDdqRA^Rw(ZH(>DWi28YXoKCa8g_+6g(h1VHr zGKqQ`H#?2P%yI^+qCua%ocqNKi3_8gT;H*NRjc-DqnFf8&0hz`og`B4+UK$~3^&U5 zd0(1Bn|iDEx9xhHZJ!OaedeaA`FhtrUrNJpqimlv^-fl_F||)Oy~>9f$Yay!XOB)J zk$TsT-%rDEqin~0(-gWfwPUyTD%(Dx6ux@bK3`6ws*SRJj!#qQ#?(ID^s}F5AdgL> z9ap50NWE*vE7CCBDBJOgX$sw#+Htm@)nC5jT4950pRc4*)kfJqFHBSD#?(ID^s}#J zAdgL>pKWmK#;>NS!baJSuT4|v#?+3p{jAx~&QDYGb-y55T@&+sfTv*{O?)zqT+9}s zeiO<5h1k9Tpxa+|KDh~K{q&jI<5YQ60^5hFo@P`lx!KJO#I@sFaW{q9(=#=#)lDIk zLqJ17rZDYi>9RFgpI@IdGFy9)fY0~1n2-8vJ(IP+OThVEplthV2sN1OoAOsRirUk< z$r9F!FAzMHfmrLu4-mMS_AW_Ns>ET4eY8}6&0Dg@u_#S>8^+MWuQTL4bs0_L@CHxHW^>|SKl-DQtCfex|cdq!la&MA*&A<$~*NVH7^@ut@57q-= zJwY66^2cv4lsrd>ub=xF?k`Fach+C))=iZ-T^>Eq?=9g~AGSI5qDQwsYW5q4uN?o< zl%|?TJks}%3TdV=q#1A{B%a1(+ddrB8OT(m4ZOEx=A8ZR9C@!cj(gylblOsMlrkM;D;v|)`_@mRd+FT(rjO zEe}8Ml0T#Q7k=|ay9IM!9c&7zzO=@pQU0NzQqVBaaL@?QF`#2Xsbmww>Go6#KdO1dVbKOSt{u?wJGzOGP+h#kM zD+)fHkn#?=p(y9mPy1fbbLQutwR-uXjV7e)JqYP|6fgi93n~Mp5>knSxpE_lPb16VBv$Y zs(v@j`^rD!mzG0JA=MX~UV(B{f=&QU09An|fsWeOaetfQBX=@It*9cw8qO@M_0e?zclyywWX^* zdCz}^sc7rnuCMRb7=vJHK$Af{;gw2AYaE2s75UO>T%VJ-Uf%JcYmd6+kK5W-es$>8 z8&pV6nsloNlXVgbI0f{7pp!wVgw)ER^P7g}rW4XFqe2V6-nD1$C0lpee9iLwZ#J5c zW_b|ODGUW|U*>(dJcpTA3FYM;9=J!gXo$*H+@^&q6vA(%5j zXM)ZGrP3s)=H^C|I`6mke>)6ZU3A~@?N)s8)Elf0}8Uj)Hi4B{T>r4B;!JJ=*Y1enfnzkK+ocf8*2 z{Q*~wt2*@dfzwMinvlGVlcqs1mw_$^@%7%RY|`?-DWu~@PM`M7voH32`0J|%-2dzo zBR8m!oSK`L1%fLf81BPf?I0kh?tc+xGwHOb*MBb`HDtt{18#V?^~#Iaeco%M38;&Q zo^3h=a}8()=voIM&2z9v)h?RatX7}r?dPx3LAG|ySdKmNw=uyyPpvOTAK&fPNy3;JqMGG5s%-~L2hFR|PNqt4U+YS=D_OGbmnR^=g`g)vi$JM_x#-Vz>r%BuSEH+|YFaIPbGxFs z?|=E&q?yy|%=Ws;sL+03=Qat?5nu1C!6+!V8pjfLm+Rfc*IpBQ;kn>Sr$L|qzQv%Y zKu?2G6}+oM!MnQ9qQ@UOetwrzTK7Nak&7ozFIm2ot{gm4IXjy5PBA#mH&bEtx*#(oq+_e^LL551TyO`Aw!&FM_w1Kre${ zap2RBxKwM81C&aZ)llYCvOFFPr{i_UtB-y! z@Y49A$Cp3+=8>V_SDU=L;qy)K_7>=E&^r!%E2+~_7pXDYLA zz}vT=??7uj@>$}dPwak3=jOw)Vy-s*`ar-VuEjZ+vNgW@3xy~8wdLe+HQ23uc z3gC3)OD6zduVFtQTX@TWtG*at+W&{G>a3931uzMCbZ(o#Y0?yQ6Vk&qeL#M}dA&zf zp0T9xiJWZ~w`g0mXuULV+rxI%8DABMMuX8V{R0z&g%Nz57>-Qnl3NxF zM><#do|KeaMyP`nRY(W<@tq@obyc7&=#Pc{(dxj7A%9tTVs$ta48@}UK&aeb9`=Wk zD&mg@V>Q*CTlNiwV?qC5Jjq`Z4VL>WL;k!-5bv+*S5*_Nj_~!=<7z^R-VP{PpsZL82@Q!68$&tx+(hNjp?!G)XRmJe%3)d(^E%H0 zjt?(cb~-N9EfGbvuS*nLNqo8D+v5u)+ Queue; - - FOscDataStruct() : Index(0) - { } - - FOscDataElemStruct Pop() - { - const auto idx = std::max(Index, 0); - if(idx < Queue.Num()) - { - ++Index; - return Queue[idx]; - } - return FOscDataElemStruct(); - } -}; diff --git a/OSC/Source/OSC/Private/Common/OscFunctionLibrary.cpp b/OSC/Source/OSC/Private/Common/OscFunctionLibrary.cpp index 87f5c20..99bd1da 100644 --- a/OSC/Source/OSC/Private/Common/OscFunctionLibrary.cpp +++ b/OSC/Source/OSC/Private/Common/OscFunctionLibrary.cpp @@ -10,58 +10,70 @@ UOscFunctionLibrary::UOscFunctionLibrary(const class FPostConstructInitializePro template static inline -void PopValueImpl(const FOscDataStruct & input, FOscDataStruct & output, T & Value) +void PopValueImpl(const TArray & input, TArray & output, T & Value) { - output = input; - Value = output.Pop().GetValue(); + if(input.Num() > 0) + { + output.Reserve(input.Num() - 1); + for(int32 i=1, n=input.Num(); i!=n; ++i) + { + output.Add(input[i]); + } + Value = input[0].GetValue(); + } + else + { + output.Empty(); + Value = FOscDataElemStruct().GetValue(); + } } -void UOscFunctionLibrary::PopBool(const FOscDataStruct & input, FOscDataStruct & output, bool & Value) +void UOscFunctionLibrary::PopBool(const TArray & input, TArray & output, bool & Value) { PopValueImpl(input, output, Value); } -void UOscFunctionLibrary::PopFloat(const FOscDataStruct & input, FOscDataStruct & output, float & Value) +void UOscFunctionLibrary::PopFloat(const TArray & input, TArray & output, float & Value) { PopValueImpl(input, output, Value); } -void UOscFunctionLibrary::PopInt(const FOscDataStruct & input, FOscDataStruct & output, int32 & Value) +void UOscFunctionLibrary::PopInt(const TArray & input, TArray & output, int32 & Value) { PopValueImpl(input, output, Value); } -void UOscFunctionLibrary::PopString(const FOscDataStruct & input, FOscDataStruct & output, FName & Value) +void UOscFunctionLibrary::PopString(const TArray & input, TArray & output, FName & Value) { PopValueImpl(input, output, Value); } -void UOscFunctionLibrary::PushBool(FOscDataStruct input, bool Value, FOscDataStruct & output) +void UOscFunctionLibrary::PushBool(const TArray & input, bool Value, TArray & output) { output = input; FOscDataElemStruct elem; elem.SetBool(Value); - output.Queue.Add(elem); + output.Add(elem); } -void UOscFunctionLibrary::PushFloat(FOscDataStruct input, float Value, FOscDataStruct & output) +void UOscFunctionLibrary::PushFloat(const TArray & input, float Value, TArray & output) { output = input; FOscDataElemStruct elem; elem.SetFloat(Value); - output.Queue.Add(elem); + output.Add(elem); } -void UOscFunctionLibrary::PushInt(FOscDataStruct input, int32 Value, FOscDataStruct & output) +void UOscFunctionLibrary::PushInt(const TArray & input, int32 Value, TArray & output) { output = input; FOscDataElemStruct elem; elem.SetInt(Value); - output.Queue.Add(elem); + output.Add(elem); } -void UOscFunctionLibrary::PushString(FOscDataStruct input, FName Value, FOscDataStruct & output) +void UOscFunctionLibrary::PushString(const TArray & input, FName Value, TArray & output) { if(Value.GetDisplayNameEntry()->IsWide()) { @@ -73,10 +85,61 @@ void UOscFunctionLibrary::PushString(FOscDataStruct input, FName Value, FOscData output = input; FOscDataElemStruct elem; elem.SetString(Value); - output.Queue.Add(elem); + output.Add(elem); } -void UOscFunctionLibrary::SendOsc(FName Address, const FOscDataStruct & Data, int32 TargetIndex) + +bool UOscFunctionLibrary::AsBool(const FOscDataElemStruct & input) +{ + return input.GetValue(); +} + +float UOscFunctionLibrary::AsFloat(const FOscDataElemStruct & input) +{ + return input.GetValue(); +} + +int32 UOscFunctionLibrary::AsInt(const FOscDataElemStruct & input) +{ + return input.GetValue(); +} + +FName UOscFunctionLibrary::AsString(const FOscDataElemStruct & input) +{ + return input.GetValue(); +} + + +FOscDataElemStruct UOscFunctionLibrary::FromBool(bool input) +{ + FOscDataElemStruct result; + result.SetBool(input); + return result; +} + +FOscDataElemStruct UOscFunctionLibrary::FromFloat(float input) +{ + FOscDataElemStruct result; + result.SetFloat(input); + return result; +} + +FOscDataElemStruct UOscFunctionLibrary::FromInt(int32 input) +{ + FOscDataElemStruct result; + result.SetInt(input); + return result; +} + +FOscDataElemStruct UOscFunctionLibrary::FromString(FName input) +{ + FOscDataElemStruct result; + result.SetString(input); + return result; +} + + +void UOscFunctionLibrary::SendOsc(FName Address, const TArray & Data, int32 TargetIndex) { if(Address.GetDisplayNameEntry()->IsWide()) { @@ -90,9 +153,8 @@ void UOscFunctionLibrary::SendOsc(FName Address, const FOscDataStruct & Data, in osc::OutboundPacketStream output((char *)buffer, sizeof(buffer)); output << osc::BeginMessage(Address.GetPlainANSIString()); - for(int32 i=Data.Index, n=Data.Queue.Num(); i & input, TArray & output, bool & Value); /// Get the next value from an OSC message as a floating point. UFUNCTION(BlueprintPure, Category=OSC) - static void PopFloat(const FOscDataStruct & input, FOscDataStruct & output, float & Value); + static void PopFloat(const TArray & input, TArray & output, float & Value); /// Get the next value from an OSC message as a integer. UFUNCTION(BlueprintPure, Category=OSC) - static void PopInt(const FOscDataStruct & input, FOscDataStruct & output, int32 & Value); + static void PopInt(const TArray & input, TArray & output, int32 & Value); /// Get the next value from an OSC message as a string. UFUNCTION(BlueprintPure, Category=OSC) - static void PopString(const FOscDataStruct & input, FOscDataStruct & output, FName & Value); + static void PopString(const TArray & input, TArray & output, FName & Value); /// Add a boolean value to an OSC message. - UFUNCTION(BlueprintPure, Category=OSC) - static void PushBool(FOscDataStruct input, bool Value, FOscDataStruct & output); + UFUNCTION(BlueprintPure, Category=OSC, meta=(AutoCreateRefTerm = "input")) + static void PushBool(const TArray & input, bool Value, TArray & output); /// Add a floating point value to an OSC message. - UFUNCTION(BlueprintPure, Category=OSC) - static void PushFloat(FOscDataStruct input, float Value, FOscDataStruct & output); + UFUNCTION(BlueprintPure, Category=OSC, meta=(AutoCreateRefTerm = "input")) + static void PushFloat(const TArray & input, float Value, TArray & output); /// Add a integer value to an OSC message. - UFUNCTION(BlueprintPure, Category=OSC) - static void PushInt(FOscDataStruct input, int32 Value, FOscDataStruct & output); + UFUNCTION(BlueprintPure, Category=OSC, meta=(AutoCreateRefTerm = "input")) + static void PushInt(const TArray & input, int32 Value, TArray & output); /// Add a string value to an OSC message. + UFUNCTION(BlueprintPure, Category=OSC, meta=(AutoCreateRefTerm = "input")) + static void PushString(const TArray & input, FName Value, TArray & output); + + + /// Interpret an OSC argument as a boolean UFUNCTION(BlueprintPure, Category=OSC) - static void PushString(FOscDataStruct input, FName Value, FOscDataStruct & output); + static bool AsBool(const FOscDataElemStruct & input); + + /// Interpret an OSC argument as a floating point. + UFUNCTION(BlueprintPure, Category=OSC) + static float AsFloat(const FOscDataElemStruct & input); + + /// Interpret an OSC argument as a integer. + UFUNCTION(BlueprintPure, Category=OSC) + static int32 AsInt(const FOscDataElemStruct & input); + + /// Interpret an OSC argument as a string. + UFUNCTION(BlueprintPure, Category=OSC) + static FName AsString(const FOscDataElemStruct & input); + + + /// Create an OSC argument from a boolean + UFUNCTION(BlueprintPure, Category=OSC) + static FOscDataElemStruct FromBool(bool input); + + /// Create an OSC argument from a floating point. + UFUNCTION(BlueprintPure, Category=OSC) + static FOscDataElemStruct FromFloat(float input); + + /// Create an OSC argument from a integer. + UFUNCTION(BlueprintPure, Category=OSC) + static FOscDataElemStruct FromInt(int32 input); + + /// Create an OSC argument from a string. + UFUNCTION(BlueprintPure, Category=OSC) + static FOscDataElemStruct FromString(FName input); /** @@ -49,6 +83,6 @@ class UOscFunctionLibrary : public UBlueprintFunctionLibrary * @param Data result of successive PushFloat/Int/String/etc. * @param Index index of the destination, -1 for all destinations. (SendTarget list of the plugin settings) */ - UFUNCTION(BlueprintCallable, Category=OSC) - static void SendOsc(FName Address, const FOscDataStruct & Data, int32 TargetIndex); + UFUNCTION(BlueprintCallable, Category=OSC, meta=(AutoCreateRefTerm = "Data")) + static void SendOsc(FName Address, const TArray & Data, int32 TargetIndex); }; diff --git a/OSC/Source/OSC/Private/Receive/OscDispatcher.cpp b/OSC/Source/OSC/Private/Receive/OscDispatcher.cpp index 0007f33..4b3f2dc 100644 --- a/OSC/Source/OSC/Private/Receive/OscDispatcher.cpp +++ b/OSC/Source/OSC/Private/Receive/OscDispatcher.cpp @@ -78,11 +78,11 @@ void UOscDispatcher::UnregisterReceiver(IOscReceiverInterface * receiver) _receivers.Remove(receiver); } -static void SendMessage(TCircularQueue> & _pendingMessages, const osc::ReceivedMessage & message) +static void SendMessage(TCircularQueue>> & _pendingMessages, const osc::ReceivedMessage & message) { const FName address(message.AddressPattern()); - FOscDataStruct data; + TArray data; const auto argBegin = message.ArgumentsBegin(); const auto argEnd = message.ArgumentsEnd(); @@ -113,14 +113,14 @@ static void SendMessage(TCircularQueue> & _pend { elem.SetString(FName(it->AsStringUnchecked())); } - data.Queue.Add(elem); + data.Add(elem); } // save it in pending messages _pendingMessages.Enqueue(std::make_pair(address, data)); } -static void SendBundle(TCircularQueue> & _pendingMessages, const osc::ReceivedBundle & bundle) +static void SendBundle(TCircularQueue>> & _pendingMessages, const osc::ReceivedBundle & bundle) { const auto begin = bundle.ElementsBegin(); const auto end = bundle.ElementsEnd(); @@ -166,7 +166,7 @@ void UOscDispatcher::Callback(const FArrayReaderPtr& data, const FIPv4Endpoint&) void UOscDispatcher::CallbackMainThread() { - std::pair message; + std::pair> message; while(_pendingMessages.Dequeue(message)) { for(auto receiver : _receivers) diff --git a/OSC/Source/OSC/Private/Receive/OscDispatcher.h b/OSC/Source/OSC/Private/Receive/OscDispatcher.h index 5641271..55e928d 100644 --- a/OSC/Source/OSC/Private/Receive/OscDispatcher.h +++ b/OSC/Source/OSC/Private/Receive/OscDispatcher.h @@ -1,6 +1,6 @@ #pragma once -#include "OscDataStruct.h" +#include "OscDataElemStruct.h" #include "OscDispatcher.generated.h" class IOscReceiverInterface; @@ -44,5 +44,5 @@ private: std::pair _listening; FSocket * _socket; FUdpSocketReceiver * _socketReceiver; - TCircularQueue> _pendingMessages; + TCircularQueue>> _pendingMessages; }; diff --git a/OSC/Source/OSC/Private/Receive/OscReceiverActor.h b/OSC/Source/OSC/Private/Receive/OscReceiverActor.h index 4981d1c..5bda466 100644 --- a/OSC/Source/OSC/Private/Receive/OscReceiverActor.h +++ b/OSC/Source/OSC/Private/Receive/OscReceiverActor.h @@ -2,7 +2,7 @@ #include "GameFramework/Actor.h" #include "OscReceiverInterface.h" -#include "OscDataStruct.h" +#include "OscDataElemStruct.h" #include "OscReceiverActor.generated.h" @@ -15,7 +15,7 @@ class AOscReceiverActor : public AActor, public IOscReceiverInterface FString AddressFilter; UFUNCTION(BlueprintImplementableEvent, Category=OSC) - void OnOscReceived(const FName & Address, const FOscDataStruct & Data); + void OnOscReceived(const FName & Address, const TArray & Data); protected: @@ -26,7 +26,7 @@ protected: return AddressFilter; } - virtual void SendEvent(const FName & Address, const FOscDataStruct & Data) override + virtual void SendEvent(const FName & Address, const TArray & Data) override { OnOscReceived(Address, Data); } diff --git a/OSC/Source/OSC/Private/Receive/OscReceiverComponent.h b/OSC/Source/OSC/Private/Receive/OscReceiverComponent.h index 365708f..27eea11 100644 --- a/OSC/Source/OSC/Private/Receive/OscReceiverComponent.h +++ b/OSC/Source/OSC/Private/Receive/OscReceiverComponent.h @@ -2,12 +2,12 @@ #include "Components/ActorComponent.h" #include "OscReceiverInterface.h" -#include "OscDataStruct.h" +#include "OscDataElemStruct.h" #include "OscReceiverComponent.generated.h" // declare the OnOscReceived event type -DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FComponentOscReceivedSignature, const FName &, Address, const FOscDataStruct &, Data); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FComponentOscReceivedSignature, const FName &, Address, const TArray &, Data); UCLASS(meta = (BlueprintSpawnableComponent)) @@ -31,7 +31,7 @@ protected: return AddressFilter; } - virtual void SendEvent(const FName & Address, const FOscDataStruct & Data) override + virtual void SendEvent(const FName & Address, const TArray & Data) override { OnOscReceived.Broadcast(Address, Data); } diff --git a/OSC/Source/OSC/Private/Receive/OscReceiverInterface.cpp b/OSC/Source/OSC/Private/Receive/OscReceiverInterface.cpp index 870124d..a16a564 100644 --- a/OSC/Source/OSC/Private/Receive/OscReceiverInterface.cpp +++ b/OSC/Source/OSC/Private/Receive/OscReceiverInterface.cpp @@ -14,5 +14,5 @@ const FString & IOscReceiverInterface::GetAddressFilter() return defaultValue; } -void IOscReceiverInterface::SendEvent(const FName & Address, const FOscDataStruct & Data) +void IOscReceiverInterface::SendEvent(const FName & Address, const TArray & Data) { } diff --git a/OSC/Source/OSC/Private/Receive/OscReceiverInterface.h b/OSC/Source/OSC/Private/Receive/OscReceiverInterface.h index d776015..0bcc6e2 100644 --- a/OSC/Source/OSC/Private/Receive/OscReceiverInterface.h +++ b/OSC/Source/OSC/Private/Receive/OscReceiverInterface.h @@ -1,6 +1,6 @@ #pragma once -#include "OscDataStruct.h" +#include "OscDataElemStruct.h" #include "OscReceiverInterface.generated.h" @@ -15,5 +15,5 @@ class IOscReceiverInterface GENERATED_IINTERFACE_BODY() virtual const FString & GetAddressFilter(); - virtual void SendEvent(const FName & Address, const FOscDataStruct & Data); + virtual void SendEvent(const FName & Address, const TArray & Data); }; diff --git a/README.md b/README.md index 7ea8d24..ba76089 100644 --- a/README.md +++ b/README.md @@ -23,14 +23,14 @@ Add a OscReceiverComponent to your Blueprint class and bind the OnOscReceived cu Subclass the OscReceiverActor and bind the OnOscReceived custom event. -Use the PopFloat/Int/Bool/String functions to retrieve the OSC message parameters. +Use the PopFloat/Int/Bool/String functions, or standard array functions, to retrieve the OSC message parameters. - Sender: Set the "send to" addresses in the plugin settings. -Use the PushFloat/Int/Bool/String functions to build the OSC message parameters. +Use the PushFloat/Int/Bool/String functions, or standard array functions, to build the OSC message parameters. Use the SendOsc function to send the OSC message diff --git a/VERSION b/VERSION index 8b3b9c2..7981786 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,3 @@ +0.3: [breaking] parameters are stored as a standard array, allowing use of blueprint array functions, as well a Push/Pop functions 0.2: add receiver actor class 0.1: receiver component, send function, float integer boolean and string parameters