From e797dd281d7772af4a9213c12e14d7af81bc62e9 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Mon, 8 Aug 2022 00:13:01 +0530 Subject: [PATCH] more touch controls stuff --- data/ui/touch/pause-button.png | Bin 0 -> 5181 bytes data/ui/touch/refresh.png | Bin 0 -> 15308 bytes index.html | 41 --------------------------------- src/CameraController.hx | 2 +- src/Marble.hx | 2 +- src/MarbleWorld.hx | 11 ++++++--- src/touch/CameraInput.hx | 11 ++++++++- src/touch/MovementInput.hx | 39 ++++++++++++++++++++++--------- src/touch/PauseButton.hx | 21 +++++++++++++++++ src/touch/TouchButton.hx | 13 +++++++++++ src/touch/TouchInput.hx | 28 +++++++++++++++++++++- 11 files changed, 109 insertions(+), 59 deletions(-) create mode 100644 data/ui/touch/pause-button.png create mode 100644 data/ui/touch/refresh.png create mode 100644 src/touch/PauseButton.hx diff --git a/data/ui/touch/pause-button.png b/data/ui/touch/pause-button.png new file mode 100644 index 0000000000000000000000000000000000000000..be6d40621df9dcc20b2a7217feaf8ba31ae9a8db GIT binary patch literal 5181 zcmeHLdpK0v-`{T0MNU^V)akU5gD46y=7?gu%+%3|5aX7Z+(zXxLOOL)F107uaXCFP zu9<#rxim~6ZDBeiWH3%ll8osL1|#OTz3=^5*YB^^^XzA@wf5TI_5H5B*Z1@J ztmM;pJLOG#HUR*j4B6ZM3IMWbRTfa%fZpb#-$~G$eB=q}tP)z{l>G0Y?Tz8~=OY1N zYy0{olcBd2gLbN4Iq7!ACG6srC?9eF5ET`5C@7Q^>E{z3a43u%NSn3X0{}akAY1FR z(RqT=pze!-=M}$7uM|6#Tzhod{UD{J_Ri({nPP?HT|dZg8=6+d-936x^ddX^&uu2Q zn>XBOS1a2VboyqZ{;hf?CFSa%M-Lrrbd|2;sMGUdyoC#HL}+_)s+LXWEynjY#<%jj zx;yngdG$)MpUgjjsC)mJa_jQ+DDY+W281VwO2JN@q37p1wat$sA6DII!&P-n21r_+ zbS#@sgQ_4hrFGz-eG?;d5AgwlhH5Dv$B*$>~ z_{qvAMpzt1?s4#vPg>@UVHSFUVK9Rp;$G-hVbOf8z1-p_WNu)31WYH8?FZA&u@_;_ zO#WSPpA*?-F!ay+2m0`mEO01aoW;m}Qm+-`3J0EA3P=dlj){c#(WRD}E~6QI4yXz? zN=NK8vk~r}~USDocmu(R7($*GGC#`tkR3V3r7o9eKLMPDdRR&J>g6he+% zrs~p8QXqT}&NKOvXcVhrFR}}A{XLf5syk3n>mi53O+*8V(e7}1k<_>9*JoNWBrc;V zhfamRo#eVL7KH5z4ue&6%qf{KWVnxGRf~(Kc$*u1LkMIa*hWbDQ!UkoGkaz%Z*8u^ zSK!=ySJ$)6dS^q{yRhhWC%C=|i-hqe?5iCP-T4Jek0rcXnD%$$9-w+=tlcB@cnfc*FhWaPOat361HMpTnIrl!;)v3AnAPx56V7FlgbtX8h(om=Bk)b*m6fb zSIrPd*&U*!TE^Q2FVEm5Ng=4R2_tBa{zH0}6a{;4a$*hrGyPZDpz64(3?|4CHl#}% zDi$h+sg?(fd;_%`wN_QB?ox?Awc@dY zI|ts-!K@;wSw(8a7iyk{+JiPYPJ2}~ox9XzRGDR3BwZ>`We|!5Wk#FAAnD1+l6SL9 zcizUD=^>h*aV_NprtX&Bk6j<~3;8xd-iwdvLNLY`4q;+)?o7aOx=5SFqBV}vCmu*& z4E1-&E4qEv0dBoF;XYax#Mp9CEdiq=o!$zOBVcN*=@Bjb*|t~@?i}*9y3W_UwSeEj zq!G0&jSz2fsIS9_tXl6}-(Et}^%j~~tq+|;z03fr!Z%lMSjj8oKW5UhlWZuaM%(PP zmx=I>Skspd=Gub6H-%H9ukD#y25xPH;}(M5!v(z5lzhM_1())MIZ{(Yjr$Q%p_m>y zlJ2o^THWVo zQA}TS4d;lXr^LP2Q!@2{H_HOEWn)?veROb=m;Zo&3k`i|8YJ>SEgH)ZBRt^eRZ%-q zUeUp@nbCHoZ`L!8-Lo%2yTwr7O8wdn=1+p%K=<_E_?f>bktas9eXJ(Cx63DXFzch_ zQhK*RUcBbyUE;1z47)5Lx(%<;v; z$MM8_F(DcjyXWS?l7&!T1*|rHO@Hz}$e0~%S2IsGm^{kF5Z`(AH{aMbk6EwIAe(;x zCKpRV4>Y#Y{4w+a-#J--qPy0krrR3G9&1EL&7)iSJ=p-K`eBD0@q$r+TCL?(eH8sN*E;7z6Okbf8t&g}MkbNLr_iC_7T9kupG}i#GcLIZ z0^PkuzLzE+5_`T@R;X_TYHH3LHo;{0vA%Yftv7c7YPseamuFF<2Y_ySAUpqA#$l7l zuEWIW$#*I80C3PA01}hFSH3U8_dntLF8IC+{-3)bd$fS3Y-B$9@P9LH^Ai*z(#$hv zPz6AZBndaXI)P@}p4>-6rD*04#P_TxU#R14x9*GF59eKtw*wagANyW9_H$?Aha8vn z=Chi03#naAzR?5yDC!J_+^Yb#e39^!D-$uXrmUioTz@;E_PX8CQK(8VDo-Ul3pbog z^kdzxf`%({ZU9F6XuJL|)TARF_q%mE6Mb?Bktl%9rJ_!&M`<;paIg0_x7JU_=BXVU zg(No08Cd?F8U9g1?Q^VI&|8Qa|0jc|oRSO}6_VgMl$SWY3}9m1_Pe5x1U2lBFU6|L z5aa*5^&G{^_J0wTPAuf1;5St1HgEx2W1@5L?=B@_-qe_~QFJYYURAfKg|Sv33plP0 z#b@3wCPoc|8X4>`bUxo}7i;=7$!ero=9Hj3x@K|&WfF{7wDcaWXNxe+3@lpoFI0Kz93F zqxod_OVp9kOnwMTnoPvn%QZab6jou8re1c(N$48NDk{Gzg`0QkEMJ2S@>hrpOdRrt zVtRPH6y|H8uY43ZtyqiGP%@W+60xC7e*QZ7;*B)l*cRhrx&8HZ3MKDb*7zot2=71v zzn1b+pH^Gtty46$oOG?2c%io2`DWPiC&U@$q{gm5=Hg8-f!n61g_epIFrQjA*H z87|pDc*;$eol1~yeQA*R!E+D$adqqF34UveM_;G{%SxC^#pzA+L7bD+(Z4+5!uH!D z_Ger{dBW>^KnI*kk(_3O?m4#Zg=CiY3e_hMW@Ux5xc&G=lznw z9tf|J^8S2KdeVZIQ}F8aW+-hdCcqJvI!Pm3zqq2Si8Ycjv|o{N5uPl*%^*$uRkU~S z4`E|@!2&!vo_Hc&Yh61CiMb;%Mqiugq)0ip3LW6&V$r&{3nUC0fg52^(|uD>sLqp@{jVlwS)L5~L@~ z#EfQ66=y{Fw@v5W<3A(A)EP(`QzT}viT=B&#u3OQ3H#ZmI#Z-oJElwjrrfvMLT5*IRIxOvz<2c^LZfQn*5!UDdN2Tca1z#> z|0OPB>a`{B+dz)x8cz*#5^fM4wPf-aIac~M&gd{3uIChXU&-lbV2mC7WNwSBQS$-n z^Mi;MG;1$CiK91Z2?7qY^HxfYuLjaDY?Q=H*nNllHG>ia-aoMC(tGJV<);sKa9T{F zdG6TS^424JWji^+F?)-v||C@keS0`y|#=Yc14z`XR@ad`^9f;ORjb zqWj+b`XHG6_Ye5h_Z~q>#i@ zk;*1SB!@*!jhK%PlhglR-`{opyRI%g_w(HM`+gtp`+a!5Q}^w4z)Gt~LlA^@a-_II z5EA@~grv~m$B)?FKj4Q%)GjA?Dex~|>Ie(`y^8MW9R=R+7yn1>+LRj$9x6xMc}2TL zP@`iGp9qFxVqy$w$HSt64%34TBTj_mPFt!#kQU@b+36m8^ZRhz(D9#5E3^H@C-0{A zY@)3`MLgNWrM) zL!gO>0sgFk!ttJI zX^F?4KFjPZ_|ks%ZbIS?`eyo8`fJ|!7^mrk*UCrTM|$BY9I-V#1j- z0ev||ZYQ)mLS?Vb&VTvlZ{@mK6{1NH0@nqE@s5+)mXD{M3E!tw@rFxEf8LY+tbj>O zvZnGE8)JJu*CHzwQQ$*2Bbd^9j6-773gSZTlxk%mFnk~^G}YJDbyoN zX}zbvKwI8xBX6I3WYywTJLhN0BNDZeQ|41926-B(di8wISS7W4 z)3fJ%UOA_!hIF+z5=`Ps2*g#db*@R&s>Y;wybH7Bpq3rqt-gu42`!R|idXJskz3I= zPZjZD(32kdg{RD6=A+%VG^I)?K~@c=mdj2w>eRma0I_d|(&_`FyxfH|n4x>5D_d@I zZz)52IULmsbB@}Ss*rOLt3g|+ z!+Q-cef!0?5ag#RlTdIbaqhn{OV`P8h_n@Lw~`7cc5%iR$oYfSkO-TmayFYd#~*a; znfd^QmfN*b^-uMTs;4!dpYh=p!@rpkRDNGuT#<4OqH7?PwY~cO*O??ce+C~pipF6Q zK8KxG*=P!>$Ryusp~oi11Y8}Y^i(XWiwN{s>hf*!#fK)Qkf8k8$tN;t%Nkxkwps1H zt-Ma;LtQQdWBOq13TxnBJG(>|{XZ%ZX2{XoG<3%7zqX82ER(#Ra1!OW(`|7=zWws~ zPiuI)Np2D$o++2ZA@>ag4@~|pH&KjXhIV>SRj9pWa}L|nJ!QW&*u`gb)Pj+6e7LKc zLuvF{?&QBIDC<|8xVE@nZ9poUH6R(Q%bh%3rr3VDk*^6WGLwmO5q*bA^MFI{_!<@N z_JyijAF@1qE)2`YE5{~M^WD_#vw=F;;_<2oBeb7%xQCj9ii6V}`q_fX+!cXwj-@Gd z^Z;cjg-=_d!76Q$MNW~H^nKLjYBFm>3YJMVAb3b>xVVXa>t|>?KOi!bLp!zTE(q=g zFs4s<5BZ^+R2tkO)k<7CF;-IXR>TR9lu7z;eIBHIQLv&EZCq58MslxC7V#O==@h3)5{*iDWSjCG*pr= zHnyQ{b}NPR<~HPD{3NX?-qG+r^*mzsZ2ox%u*PHiC|W68q30h43qS@ttj-Z;G7 zWbTc?SY?MQQ{w_FrAJ?Ou!fvgbi%VoU$hiU9XX_KUl@ey(#F?lIDbm?V<e9pyB@DbT&%XR=AqXfHC5&+dHg|S0s2=-CxJ##le07;uDGgG zzDG(2oTapG!Ou$b!ohrlb6UK5{A|xNz1AEk1KPu4HEgFV<-gxZYse^6#x~p{v#4N| zt%~?EyVl&KcQvBjD$OZSOBze@0H%A&9BKTL5V(<73qJ({5!}^87ztl}n*A&VD_vl1 z(;i!bH+wDW_Qff2Lt&ZHMe&;R+{{SjkT#^4V>k#Yx%oLsijn^FZ`iz=bty5nY-{c za$LOxg+!+_QHs1Ptk@HbOU(}un~Y=IW(;6CCbo3W(e?79qzFpuPJGQ##*Jnmu~tIh z8E}B820Lb{SflgBhXv-Fj4BgjhN9%)skf?X?`l)KPSTcGo3Mmpyk^Bs7O97TpY z0qHKvrnTr`JJ4_>ezr@Xl?|hBN#bh^=xey_{;Z-;-WX8=#qu`!RYNV}#$8r}kuWMC zO`xCEyEd%r=6d0xKx>?X4p1Nj8i9k~zRz2yB*a4!m&WS%#3*~3LPUA|0>WD2_(8y_ zQ&YECv55>;R@XV_$)^((2Rp)xAoVqHM%Ug~lc>W5{T*qQN4z0)(nUT)omL!F=GlXS-qYIA?ph)EO_|!I{{|J zTG722I49S~{s_6(oUpRwi>^khOjfKcU84FZ&`sBk@tD~7U-vidEkm$aT;_1nPlbgB z4RcBJZNw^N`&XuRtr~C*oYUuBgzQJHpet1uPob*O+&5phVKil|>vwvLHf{8({f}1#6Q(zo;cF>rWL!cp`s!--U(P0_I^Jd4*udaN0DA_L2T9SY9zveaEOH0ppC8`J~4J*^Xl|Fko{4@!J zlEa+5J#qSa=x4tIw&s1@R{eSsl#E+E5>U2&WQM?_73Qo_x;Y&~uKuuTx_IP?hG-RC zUbw_rJRO;zx&~j5(Xf9fYpJ&Kj6m`qQ&j zpBgXie1^&B;5=@NJEcvSUS)aqp7KC4pJ88e%oExk%m;QgsK9ojOzk4>vG~U}Zw-r8 zkBU%#`KT{UhUwoUzf@>47tZlL1@bP2kTxS*~MY6)joTdiy#X;i0oA|_>%SlfZ+q+{M zm19Gx%jIN8RiwyV*dx$F)#iX*%5{@SJ<&sy+Woz^VV6JAN{;?^t(Bxgq)S`Hvu!)B zck4^5E!4-KrQTiKlw~EH60E@=B&&;4$F6ZIL9a zz35*Y&V1ias&?pk%la*yHTrJ(Ym~x$7sC!s6<&Rk&xcEGiE~B37t3G`sK%n2$>k++ zZq(*ta%;E*H?X+U@S^v(D{#Q&w??6LxU1JD2s{-0i5{hK58pp! z)~%-Ue9(CnrF9ur6c9>Y7)p%D#G4YAWDXG(@G(W+hZYF| zd1K~+{Fq?=!BSgJtNAvldf*B$0hij-pM2Wby#|WV%Bj!bq#M> z3T%v}7BTUF`jN($6$mC@Zs9vjWIkCJvOi|=+&!V@@lXB6*gExu9YTK*bmyf7e5UmzAf;fBbS%E`O=m@0u8IO!W6u4W(7)wyl~7-`%kW9~FvIIi+V@cluS>8$)#6Td^ahpXLS$&ZdQu zzid3Xxb3w`lpnQOWg8Raw2^$Q8$GmBy zUivOd`Oex1IBfP%lGD$xoW%qNs|^HYy?bw2^vq`ov|RfstwBjfP<=(`o%eY%Q(br8 z{ga36y00U&;@wtAq+Jques<`{YPxOt>&WfA;lA|>CnRiML>mhmIZY)% zUX@~ZHw;GidG}tBg!i)J>=~<7A?ynV97UWv*tfIDX*F>B9iZQUK98F>*ryMq(4}pT zJyDCTZu371Tr_BEZ`3vB%Tbi}*z3OaYKVQgh7!MCbF4iump2@sG@YdeDQogxew2iV zO`?t;fL0`34<^V>QD?88*CWcI^AXYfGbgyOuEB{1&~yo#VnNo)gOo1X(C1CkUNvM*bW#7Au8!#1qmHzEF=o{FhC@u+!E8}*=;lapU*Fd?J1JrF z?q?k*-hm*kU+dN1Cc?%*V%G7$-Wd3Ns} zNNa0Ig5A2!KId4Llm9I$Nn?FPY=pLZgmhowqUyMumWyLluyF9m@!9Jy0hh6sYUVBE zw0q$=F1}0qlN8hAb2TUaFrb&Hh(Czhh={r0d1v$ERSk2SPGSIE9Z~YaEWzq5YKZa8 zMLN$P>_)c?Ri)aN4$SqzO{Arc*rOzrsN-iLUVH3G*t|hwfJ|K3%E>iH-nyHIu^b#T za=yl~RE{O&6U=e%k$yX-#6xYq_EAMM1!c*ODjBTUEyCbSneqbL(7X zp+!$W__ms}s3N=|Q1dBaB%#j7p&TFy?vvuoP7a8H997a;e{UBxpWAvgdqkz`%Qkhy zYFI{p*>$FAjmVB6Rnhf5={k0DECc%L%%0B&Td_AHOhdo{dPq*YHfa)2#<}_N*Ew~> z*ZK&b#ksAS`96mIFzSXiU-Oy3c8^w-WqaFKYPp!$7ma;tL*Wx%h zpFQ6p(8_9DPrzaF59HZ)JUT;NZsy96kzFnkb)wxqZ_;S*QTKCwG=Y$AB_>E%S`wF5 ze0$aq0(bNJ#kLZy=ZVY>=BFR??ZPt?<}uYRZT>wEj_@U6x1@RTaDDNIH;=cOLQ9w7 zT9dg4;??wsiLy<#T`ZJDV&;J4YYBVD7yKYLK8Wrd_UOh&fYce(bEM;ST zQySRkzeTf`*mI#HQlZD1y(?(P;gg=Q>{ZW}3Y@XhYnp;kL) z_M}?Cg!s5;70oK(t0b&k^K9!K19CZw9pQ#!Qt;N< zhJHJe43y}nPU(qFV^t)LA}8HL@X&SWpzO%N4e<*f`LK)jSc^8H^o65}fAS|jhy}Y0 zrXkCtriy^E)(JMXYk6P#cIu>8u|&$%4h$Rucx~}N_9O!F`QKb~iKK_GSxZ-OUfNfY zo0M)cCtxpDyFp81SC~cKuQ~px0ub^*9w?yF4=r@HX!e9aH=gC8)dP|%*V!&PujPP1 z{TGnM4*y2QW!=*y8cB}0<=H}(1j759ujK}zA0MA@PBJqGU*;?;-srO@9c>$gt%&nG zRUs|{-0s!{({h|P&GHC8o#}8f=EZo(f3}r~uCe&tHa!n1t+TLSpT()^e*&_<9hd$r z#Z;I8bbULuuKE_4@^(01nRM6`^2u>SX5G^#zJ;s~=Gne0K!d|mPfY*S3oPeQ1&Pkk zZH+#&F}%HOi!V9Tz^q$0Bb@ZEvacgjJSM(A-i~~-cLD>lR3>{@Ip$oDgUmp*_L%03 z8h}Dehs+&&P6YGq;7@>z<33ns7)0`&W7b0$=a5RLp3iBl?WhT4nMcUC8g-Mosgn3Y za7G#yOXwK5QJ0lPM;RIUx&LiqiVw~-rb9440vI)L(Llb&R73I57c=(bcka#Ic!>Lw z4`S%Zg1;t1e2d7q-`O4XJDp`v{9n2$lv9Ca7EoFZffyMtpOm3~3|+xtK>AkoJtjl_ zCf=}Q!elO*_f?>_;}={KpN(Y>KG2}=0|!^$Y^4C&VR|j^!BhCi zExaEA>Dxp2{vJQD8PI)aM0_>SzfMs!gQ;=w8;J?#IGNawbW{)ZS#WuRsaFhC%T|I%R9T>^lqX- zg3!2pzq*ZUaf4FzOX*?+aGPYy#Gh{VM<2hB>$U|a@n?@RoK^|Q$Q|XW0(O5rj<1>h zZ}~QsdH$12A3}$bk%kDv zVimv^)>a2o{e09ZuJx4GU$8frbwd)CIQQo6N|H8o^y36bT3yp6zD0MIb#@aGQ;*9N z15me2hb5Yd0XOz8oCMq$Jmc;E5L~%dd2B_GluNxdQ>d_>Gwkh)x>dJ`jCBOz9GE}G zjshtnau0-jyPRe+w|93U5bC2(@w^(4G}6mvuTt~QD-1EsWPLPPvIDCB-aiRw!(Y3^ z79;E<7Vfryg+G|fH+WK)Yk-JqPFM=71gm${zUc7>%-gew9WW#Mg80Tk~blyjj4HG{%2ZWk1pQd-II0l2i!`_z~w z`|;~Be{e7AJrJfQ=5j1s$Bar0*m3IgQ;ZCa59S0@pG6s9QwlOIMf=Tb$Tn~Fw_*Wl zZQdf?^eikKYB0Nnce7MpAU`3}Js?u%k{{m3^{fR~h=SGZ?kz;~JHMs?VSy+uFhM6> zB_R6R4P-Uqt0MTbvIe1)_meP|A(J?+!c3rN_`7;8m4hXwY~0qWA#TvY41$N8rW<_9 z{`8jylTbLcA^V(vk9j1RX1YTem^k&nyz0#;3}Gng^nc z*Xu84ZFn{VEaa5|mRXF**a(&d;i)2Y(0$@-k|Zo(Ta0dl#@oP0*>BVl4ngYzvd!1bU^A%hz5wtg`GEUQ7jA&7BJqv0tQp7IjumiQ_Lp^T-&1|iNxFva;7=a_|u zQO3>+2~H}8ipY%fSXf>>83}9;tIE7u4dw|2tAghz#Gk*s`#<_NgAYm>XBf=Tgf$LiPGy(#I_ZpbF1Hwm4A@G)9g9BtgZh9u{@5nJ=9o@NjNCxE3Fo110L}>WA zk<)nFHmGnbh=%}8FSE75?~(ue-HSS+hL>R;D6QSokV+FzL9*Z@!w#g}poeuLjw3y) z_L|s&RdOuN0#L@`VU@^3`|<+O%Q!VCJe!>Y(!R7iM}U>G4lw7+-1a1c`8SLnD@FZ) zu~AHG&*B@%ls~#9*5T0kh-o#RS>I+4F*!Rx?80>NzBLkTCQ*%}Z>>Hac|)w>B`IQO ze-J1zePjzT3SpZ-2h};d+qK1F(OSh!e<<|R+TO~>hr-=iz)NuFS0XR5LlBz!QURZ? z>lk#R14zfc;>+4lN!bq3L4XA`@Au_^Yf%w2NNlq1y#LmZbbV8+uk7!nhkgDVCMJ|C=6e}mm0!Y4A9nEo8zb4Br* z&ZG7~USsdIp)`=&GKq=_Fyg6}i+HzoGn12slPU}rvx<}lfQ`9u@_J6DvEvAI0tlC( zA;kem)E}rh5yC&aUh=BW&ll>zXj-xFMj|YTRZs%yU*jwt3#74%UOw`Y4y_erp@Tl8 zLAp*`fRzDdcFZETf!!_#qqLj^|2`wkZ7YrX(b{GTWffHlza>V8Lpn}*K<~)nC!Iir z(kD&kd{iMPSI_YM>bEu;g7f;44x{bYUv0C=>fO8@Xw)k43ufXZrf*r)kAJaDof6_S zde1_<3YYcwkDDu+>f(1o%vY?**TE&FQvzy1_8=Mr&jz52oo&!%Hn=67b|`>yY(H{; z-d#*(C+8@FtUPb@{ost6ZYqG(FEpSok#%YUm@(mm<{i8t2bjU+)DM7rEpjaJHsj3k!j z@tPV<2@Z2=hapIHhZqa6$;rnG90@*m5MO&iigG|ww5IwPRjI!|{$1F`pX767_Od}Uf2>IZ?%_4^y=`R=lSU4m|ZCMMl zuT5CdmUjaWL-v%T;)#Tjb@)6{?X{we*j?ZRvk3cUbVUKwADk)i>qMFxes6jOjYz~t z2;ZdX{2b&ZeXRk)ytiGP!~KW&d8M~hR{NJD?;)$ffw9_YOC6?qKX8D)*#klUM(>q8 zS<#Sq`$^mv z%LUF5{hLunw1gJnxQv=pOPV#zhhs2R&m3Jr;i%JV(cu`osxY%0B+qZfwI@E=KU_P0 z65VVpin?6X92*Y~xj(}Xn$6$fnf1tpbYa3cFBLvrYU|h|WwBy?YNNqqnzlEfaRD)U z_=Nw@+=>Y*e*%OfJ;vC*jHNT+b|17Pt~CEpOtC_)#((UVT{^gUeZ~!6;|Ux^6_bKx zhncq>Tb7MK108zbW|!zzLl(}nyq!$0U8)@CvcLRT&2Vao>v=N5vks)MM8Q497? zDvHT3-gW|q+HHIJ{S4V437)#wVo2Bl-Wl=Ql2%Lo4L7fbH}(po{w5M9s&khgjwi6= zj)HY_QdwSW8 z^Zem_ECZTKYfDthm&YG3)~5}rd8yxO-|OQ&n{rZ>=};eQVDLa%_!0!Oqyxz**EWLC zrRFMb#dbGP+j6vJd3qR)ov(q9sl=^!a*Ni|Hb3sy@w2cb-tFKD=6kBcGVYz4rM69v zl9FY4!%SkH3~{dCZT@AQ3go#WH(IM5I0t5axF+IOT!Z~TMg{Ps zSd0FX)o{)C%`2S9xFImB>w|`F-<=F?^D~Ye235GPjM&wO?j|Cw3j}5#p^MkIfs!N; z%w4R;-l5+u?_-Mp`!l+$_Be!&fWpl`PKLhmQ^D6)0ZMnrVY#*!1o5ZIqeCyH;0+Ck zu1yuFrc%H_15)g!IB#$gK2Z?OMkm}#N5h|1y0>c);=jAPdN!Tof1)rlIytJvbHE=O zr|lS`y18N~tta6`5CQjkt{5Fb88`c_#WyExE*VS#M~dx_p>$a8-h%Bh5@hIDR-+0jgNIO*~q^Ubqa{`A3`Z9y8(x!r?`IVhCx?j1+t% z_Bdr~zxpoMh^BS)&o!#|9?icUBM?Iv6D+T*RLQZ@+Qv)NNqwFb+oB3Y0k5~kexHeH z_^(B;?iHtn`xz6m18F<}Y@qgO2K5*wr@~y9b|e0K)%FC7cVlwj)zP0xHfBu*gt~Iv zdYXw{>-g-W7DJ10Q|loQ6mJ)N+)GB32$bGApEV#QI>NvWkNNPzY9HGi#KM{f8#Aa8 zEv(pZp!RDgvf-C~>!Z`Ej__MTqLS)Vm@|)})gO(o*tHIdCpganIEsHk=IQzE+Na{r z-zMq#G+v|5?1fi=Ns^WcfkfUV@%T6P{Nx9}qO0ft;Rg8k$A)V@bET|-3c$OX7$s1| zlQKB`-esk0L<)j08~E+6HN%KbQNqCy-xGU*r3ftmVXmpfG!MNzHy93ONb>7qcW_7e z@OAAw+?4{|pTJ}#7b7BNhX?zKb2+Aly*`JP%Iy~;5B9r-{X&cYTk8=isS%gG1BS)9 zACL1Zw}FE{rJF#-9G1^y{`1f)PWRYFquHC3ZFY$VFro)v7;aR4}<|do&Kszqs^c+ z0LdLczttHju|NFUmde_Q8Vy}~ezcbO){@!^TOkjtXyy9ge$29o$!tr`908B4zTw?QSZBFWnFVp!R>-!GS*-t`lwLPyb- zmgP^DvGK>16gBv`$O1_p-|AcMcUTkheF4|LVoew3*U+yE^nGr-fKc^CgRo15`K*&! zp!WV}Uyci;sR^B@WaOpDw%f@c#Ds;33U<~ zZDZDk%@$K*a@t3MTTbFVDQvjz6RF9&&+@7TruZS1l}@{`!WUb6{9M3iRit;kUlA-|s4e zK6oZElS*+J57Kd2F&@N2p{Ds>#$%_Cp3Fza-vPz}vegzO%!3`(AR+x_;MtXV$BPev z(pf|P8eewwT~M@Z-8brRwKoG)Z?7|#N^3(0?SK7{(>{fzr>feAqZSc2h&`%h*a!~i z_kom455tqsJsCx6c!R|FuUd}UHx~ER#7W{@{Q2kym(Nc>#edSvbH!l&hIc5Wtu&nK zzaL@#AFz^V$D<}b9d{oW%)v6mC_ms0iEsDzzd7`aH?OguWc<0OTlNHC+2CTm=?V`^ zG2WvbxSWC~z-bj(D6B;O>b#J9?IHvlY?NG9rq{A(8ED}vPE!$?)$4$-*}<(|p#qKu zwFmQU^^PClq>ZPlGo$CYzII zz|1BDR)GSKKc#g9c42<>4CyXcBbWNFT)Qjg)+E!+ow`r&eW8WT*Aj7^MG^0UZk8(t zMp}Dfo$%Tls81W}3iq1r5UkF5w2fIsX`KWon{^oFU^=zXLO9Xt1dDl6<(rlCQM5%N~f*p#5pr&Q!>OnQT4tlGgJp=o7>HsO*XUAadx9vV$H?5VDRh( zXQ-Ym5q(4g(jpoah7u*P+@+*Z`_@80;Nq-#yy0RXcKo6 zb3?m5ydNJ)r!@SmeF$zhJeO}(1qv$f&xF&r9N!pCl@7Sgiq+xj8Rl5FNakN-w}3JQ zV?Sj|Rt+&!0+x=E6epBC8JEsAnj&qe8dx>oJX_mHBc3OI_W$Z>yJ^3E)Qep1)t@X8 z*6?VF1o|qCGe`L2prE)rL=^(@1l}AAtT65Tv^)>oIuin|9%H-KWm1G?1pwOF#_Zr` zB<3xiuE=(SWP(sbF$&p$z}w^VlALHcF*Ev9tk!8yyO#;xj|6w z-6PBYV=Zk7IBGBO$+^8E1FEpEyySa1i@J0=1DD89h_cssd|B5;%G0$2 zMdlfep9t#?~J{z`!c=axm?Cu(38tq4}?_>TbWcjN-Ak1+Na{s0%(h{7%_ zW*(eP*{Y6U9`yLAk(?45>Le3tFM)f*aVvWfx(M76IE~p4+0Jvk zbB}KXXN)K8eN7<&3L+JAmJsiO_0&Y7xSeM;e|~NeaHE8G&TbMV@|NfJ+wG$~14IGxH49a9mTo~&qFHI1R*d@+ov4KO+5 zCQ%8I8V0(Ax;yOt#0}NHG$rSpG-lq0@A5sV;Sldyp+%x}IVjVvop9w%!k$CNs^9bS zmK?g|mv%(@`G0?cABd`!T%xcC#MJva)`rxR^c8zZIqj%+P_x+mZchWN0VU+MSy`@g zfAQ-qXK@dMb@;~Dzk5Z1+a=}H_%1XTa<&y-?;!;l5=_w=t#{7ObT!+5b7Nc7{4A8i z!beGEjlY3E=J!W+x2c4NcM~#s>G$tI0CsOSy?kow2yZ7l&W&;DFk2*^))bL&Zev`@ zh@Jk2)i?cf?hWv4s(ifxa{k<$s5E9X_f8A2Em=3CzwD4S$BW^bw5|Qf3B&}>>iE1R zv8q(|{WX?X3bp>}cjht01;#;M-MQ|f;K$0KhOpd3epUVRo>;IUe@kx8-CqFI%v{dg z2o#ZJ>mIVa)(zz7$}B$jpYZ~`th^q=Z!fjIxT{LMUaTAl4Apw{b%ZfFRGtZsoOAi# zHtTCYAD#1WF(fMLpXp|KMS%c6`t@B#!I@*A448owW0Re>#H_DAP4#nEKXT>N z2XK+eWbcKh#V}2GegVm4dBOvu{AdI>AIxXKg^=0N%S8!|=vazon)Qzc1f+CxVOffI z0pLK3F6YQhU1ztH;9T$aV(|)8QjlF0(g!U`l!y0QZS5=zMf+YnhI7 zokae1_GlT-l?z~y#1>Rj6FEhPcHi$R+rJ#wEolm+z2>+eS3nIiizFZMmIM6yXuAl1 z)S=6)STlNn7{3^Xd(Als5qEg77xVF^l@W174;*J9rigOM{D*+5Z>OIj|od z7dt+eKOjqVqaKX@1Xx$F zBiSS43|JMwv|ZnxSrdCoj9@=9BvOF&?OJ6*mn9E90^I${Ic+lM+_(PaRjiE+VQdxb z$=oLXLQY5M&z^4q69GKqZt-<;8Eyo0(#~=*ewWwHg25{yI1He535aO_;b}HWmTsHtiydJ+Z803+%*!|D~LbC#_5hTcjHQ4h26_ou79l!!7 z3$^(IUu(Tt$)%!_?a~eYe<94SpoU>XO;Cw7rw9MVNlT32EH@CVDsjZuha}8F2ZCZw z<;f>v@bOMh)ItdVH^6*@8ld(Sb|P|GZt*@Kn!))18!D`TQjby%r%5_iM_40%A3rKa zW==#OiXRmA)wsG5fpL-?SZrBPsf29&e{@sZX!wdM6<)@Vmda_gF{ zD{(!Zp!UVH{-X&L9R1h(@5876UNq zdni+gcq~YL0rYw|7Y3lPO9HK<15ornO1M;fDs@iFNhRhw(xsDA;ECxbfG_q@{cuw< zP3Ndr%XQMrvT6JUgJtz`DVuh?*5srrC>LmA5v^fWECw`*G}e_QhyTUr%c}iTyKi4s z<8(Cd1AG37K+DIf7z|LCwTYTCmWmDc$eB6@?OgaH)7M~mctQ%kk;*b)zD3B1Pk}Ux zY<|fK=l{_D9A5a;(c>AKXEj-CO5p&rE3kAD1fJ zoo`VR0T+Y$kKt)JcXr=;r$VA!tXXw!TVgz@I;Cck(oy`mCHE@nmazTW_elgsAn z0OOax4>YSBLTQ=Ig$6kA>|outNFD53U3f0EPWVXl`=&PJ0}yZ6MMWVw;5%q!83Z0f z^yp6Z{0x9`qW{-Y^G{Uk#2kGEq8-u&!AUxMz8;Jzs6rJ$e_U!WcLmL+BWO2oQfe<} zZWqzmpc=1>k2J~&N-6j^o!J`TgnIk{xmf$`w`dz}(C2oShV;XQyMYd_lNv(hocW~= z&}jq;hoJKd8M|6|2xQxR?j{v=vt<@F={L6jDgm8TpkeI&-4DLP$MA8`fpvJ^fUYFG zD?X%^e&&MFkm?RzRH&)qV7X~JDXbsie>ZOMcYp@tJQ&jx_h;=TZV@UC1vrieS<#W) z{Z0OFIg_CEu09ZTt7bJ`wX1w>>>6Rf&`Gc1TF4wPLJJeYJu+t5BMsnzF*H^{EsGKnIvTL_q2M+I-jYaj<$sFleqIM&@x%n5K!~>EvgfA zfY?1QN)172i81(`JLdyFwdXOhNm#VzB+=@f%p6VOlP}^B?$E0WnI%bfoUOB^6X@N% z!D1Z%-8ERR2V1=se}}zO%OLe-TEJY`IXSb<+J9uG3Q<|KdAj4z&wqGZ6nRd=zg7?% Y4ZqamO!-vMc?&t&?WI)i3OM`!0Qes`;Q#;t literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 72520c78..63c5e611 100644 --- a/index.html +++ b/index.html @@ -72,47 +72,6 @@
- \ No newline at end of file diff --git a/src/CameraController.hx b/src/CameraController.hx index ecf8e07c..283f3cf7 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -118,7 +118,7 @@ class CameraController extends Object { deltaposY = 0; } - var factor = isTouch ? Util.lerp(1 / 1500, 1 / 50, + var factor = isTouch ? Util.lerp(1 / 250, 1 / 10, Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 2500, 1 / 100, Settings.controlsSettings.cameraSensitivity); CameraPitch += deltaposY * factor; diff --git a/src/Marble.hx b/src/Marble.hx index a5fd0404..b77acd6a 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -1347,7 +1347,7 @@ class Marble extends GameObject { if (Key.isDown(Settings.controlsSettings.jump) || MarbleGame.instance.touchInput.jumpButton.pressed) { move.jump = true; } - if (Key.isDown(Settings.controlsSettings.powerup) || MarbleGame.instance.touchInput.powerupButton.pressed) { + if (Util.isTouchDevice() ? MarbleGame.instance.touchInput.powerupButton.pressed : Key.isDown(Settings.controlsSettings.powerup)) { move.powerup = true; } if (MarbleGame.instance.touchInput.movementInput.pressed) { diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 129a4cf8..c687182d 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1009,8 +1009,11 @@ class MarbleWorld extends Scheduler { var egg:EndGameGui = null; #if js var pointercontainer = js.Browser.document.querySelector("#pointercontainer"); + pointercontainer.hidden = false; #end + MarbleGame.instance.touchInput.setControlsEnabled(false); egg = new EndGameGui((sender) -> { + MarbleGame.instance.touchInput.hideControls(@:privateAccess this.playGui.playGuiCtrl); this.dispose(); var pmg = new PlayMissionGui(); PlayMissionGui.currentSelectionStatic = mission.index + 1; @@ -1022,12 +1025,14 @@ class MarbleWorld extends Scheduler { MarbleGame.canvas.popDialog(egg); this.setCursorLock(true); this.restart(); + #if js + pointercontainer.hidden = true; + #end + MarbleGame.instance.touchInput.setControlsEnabled(true); + // @:privateAccess playGui.playGuiCtrl.render(scene2d); }, mission, finishTime); MarbleGame.canvas.pushDialog(egg); this.setCursorLock(false); - #if js - pointercontainer.hidden = true; - #end return 0; } diff --git a/src/touch/CameraInput.hx b/src/touch/CameraInput.hx index 2c949196..6473ecca 100644 --- a/src/touch/CameraInput.hx +++ b/src/touch/CameraInput.hx @@ -9,9 +9,13 @@ class CameraInput { var doing = false; + public var enabled = false; + public function new() {} - public function update(touchState:TouchEventState) { + public function update(touchState:TouchEventState, joycam:Bool) { + if (!enabled) + return; if (!doing) { // Check for touches on the right half of the screen for (touch in touchState.changedTouches) { @@ -35,6 +39,9 @@ class CameraInput { #if js scaleFactor = js.Browser.window.devicePixelRatio / Settings.zoomRatio; #end + if (joycam) { + scaleFactor /= 2.5; + } MarbleGame.instance.world.marble.camera.orbit(touch.deltaPosition.x / scaleFactor, touch.deltaPosition.y / scaleFactor, true); return; @@ -43,6 +50,8 @@ class CameraInput { } } } + + doing = false; } } } diff --git a/src/touch/MovementInput.hx b/src/touch/MovementInput.hx index f095740f..6583868a 100644 --- a/src/touch/MovementInput.hx +++ b/src/touch/MovementInput.hx @@ -56,34 +56,43 @@ class MovementInput { this.touchId = e.touchId; - var xPos = Util.clamp(e.relX - this.area.graphics.x, 50, 250); - var yPos = Util.clamp(e.relY - this.area.graphics.x, 50, 250); + // var xPos = Util.clamp(e.relX - this.area.graphics.x, 50, 250); + // var yPos = Util.clamp(e.relY - this.area.graphics.x, 50, 250); - this.value.x = (xPos - 150) / 150; - this.value.y = (yPos - 150) / 150; + // this.value.x = (xPos - 150) / 100; + // this.value.y = (yPos - 150) / 100; - this.joystick.graphics.setPosition(this.area.graphics.x + xPos, this.area.graphics.y + yPos); + // this.joystick.graphics.setPosition(this.area.graphics.x + xPos, this.area.graphics.y + yPos); + + var stopped = false; collider.startCapture((emove) -> { + if (e.touchId != emove.touchId) { + emove.propagate = true; + return; + } if (emove.kind == EMove) { var xPos = Util.clamp(emove.relX, 50, 250); var yPos = Util.clamp(emove.relY, 50, 250); - this.value.x = (xPos - 150) / 150; - this.value.y = (yPos - 150) / 150; + this.value.x = (xPos - 150) / 100; + this.value.y = (yPos - 150) / 100; this.joystick.graphics.setPosition(this.area.graphics.x + xPos, this.area.graphics.y + yPos); } if (emove.kind == ERelease || emove.kind == EReleaseOutside) { + stopped = true; collider.stopCapture(); } }, () -> { - this.area.graphics.alpha = 0; - this.joystick.graphics.alpha = 0; + if (stopped) { + this.area.graphics.alpha = 0; + this.joystick.graphics.alpha = 0; - pressed = false; + pressed = false; - this.value = new Vector(0, 0); + this.value = new Vector(0, 0); + } }, e.touchId); } } @@ -101,4 +110,12 @@ class MovementInput { parentGui.removeChild(this.area); added = false; } + + public function setVisible(enabled:Bool) { + this.area.graphics.visible = enabled; + } + + public function dispose() { + this.area.dispose(); + } } diff --git a/src/touch/PauseButton.hx b/src/touch/PauseButton.hx new file mode 100644 index 00000000..3130fabd --- /dev/null +++ b/src/touch/PauseButton.hx @@ -0,0 +1,21 @@ +package touch; + +import src.MarbleGame; +import h3d.Vector; +import src.ResourceLoader; + +class PauseButton extends TouchButton { + public function new() { + var offset = MarbleGame.instance.world != null ? (MarbleGame.instance.world.totalGems > 0 ? 30 : 0) : 0; + super(ResourceLoader.getImage("data/ui/touch/pause-button.png").resource, new Vector(55, 55 + offset), 35); + this.guiElement.horizSizing = Right; + this.guiElement.vertSizing = Bottom; + + this.onClick = () -> { + if (MarbleGame.instance.world != null) { + @:privateAccess MarbleGame.instance.paused = true; + MarbleGame.instance.handlePauseGame(); + } + } + } +} diff --git a/src/touch/TouchButton.hx b/src/touch/TouchButton.hx index db078bb7..2c59ac62 100644 --- a/src/touch/TouchButton.hx +++ b/src/touch/TouchButton.hx @@ -59,8 +59,13 @@ class TouchButton { } else { g.alpha = 0.5; } + this.identifier = e.touchId; } this.collider.onRelease = (e) -> { + if (e.touchId != this.identifier) + return; + + this.identifier = -1; onRelease(); if (this.enabled) { @@ -103,6 +108,10 @@ class TouchButton { } } + public function setVisible(enabled:Bool) { + this.guiElement.graphics.visible = enabled; + } + public dynamic function onClick() { pressed = true; } @@ -110,4 +119,8 @@ class TouchButton { public dynamic function onRelease() { pressed = false; } + + public function dispose() { + this.guiElement.dispose(); + } } diff --git a/src/touch/TouchInput.hx b/src/touch/TouchInput.hx index e086c53e..a92dc9bc 100644 --- a/src/touch/TouchInput.hx +++ b/src/touch/TouchInput.hx @@ -42,6 +42,8 @@ class TouchInput { public var powerupButton:PowerupButton; + public var pauseButton:PauseButton; + public var currentTouchState:TouchEventState; public var previousTouchState:TouchEventState; @@ -53,6 +55,7 @@ class TouchInput { this.movementInput = new MovementInput(); this.jumpButton = new JumpButton(); this.powerupButton = new PowerupButton(); + this.pauseButton = new PauseButton(); this.currentTouchState = new TouchEventState(); this.previousTouchState = new TouchEventState(); } @@ -94,20 +97,43 @@ class TouchInput { } public function update() { - this.cameraInput.update(currentTouchState); + this.cameraInput.update(currentTouchState, jumpButton.pressed || powerupButton.pressed); previousTouchState = currentTouchState; currentTouchState = new TouchEventState(); } public function showControls(parentGui:GuiControl) { + jumpButton.dispose(); + powerupButton.dispose(); + movementInput.dispose(); + pauseButton.dispose(); + this.cameraInput.enabled = true; + this.movementInput = new MovementInput(); + this.jumpButton = new JumpButton(); + this.powerupButton = new PowerupButton(); + this.pauseButton = new PauseButton(); + pauseButton.add(parentGui); jumpButton.add(parentGui); powerupButton.add(parentGui); movementInput.add(parentGui); } + public function setControlsEnabled(enabled:Bool) { + this.jumpButton.setVisible(enabled); + this.powerupButton.setVisible(enabled); + this.movementInput.setVisible(enabled); + this.pauseButton.setVisible(enabled); + } + public function hideControls(parentGui:GuiControl) { jumpButton.remove(parentGui); powerupButton.remove(parentGui); movementInput.remove(parentGui); + pauseButton.remove(parentGui); + jumpButton.dispose(); + powerupButton.dispose(); + movementInput.dispose(); + pauseButton.dispose(); + this.cameraInput.enabled = false; } }