From 62feade05da387cd6b230e7a0edf558c6fd7c099 Mon Sep 17 00:00:00 2001 From: Kodexky <kodexky@gmail.com> Date: Tue, 9 Dec 2014 23:27:25 -0430 Subject: [PATCH] Add extra buttons to Android GUI. All icons are licensed by freepik.com under CC BY 3.0 --- src/touchscreengui.cpp | 86 ++++++++++++++++++++++++--- src/touchscreengui.h | 9 ++- textures/base/pack/camera_btn.png | Bin 0 -> 789 bytes textures/base/pack/debug_btn.png | Bin 0 -> 960 bytes textures/base/pack/drop_btn.png | Bin 0 -> 561 bytes textures/base/pack/fast_btn.png | Bin 0 -> 935 bytes textures/base/pack/fly_btn.png | Bin 0 -> 783 bytes textures/base/pack/noclip_btn.png | Bin 0 -> 1151 bytes textures/base/pack/rangeview_btn.png | Bin 0 -> 1604 bytes 9 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 textures/base/pack/camera_btn.png create mode 100644 textures/base/pack/debug_btn.png create mode 100644 textures/base/pack/drop_btn.png create mode 100644 textures/base/pack/fast_btn.png create mode 100644 textures/base/pack/fly_btn.png create mode 100644 textures/base/pack/noclip_btn.png create mode 100644 textures/base/pack/rangeview_btn.png diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index a04b7fe5e..1a5d42e9d 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -40,10 +40,17 @@ const char** touchgui_button_imagenames = (const char*[]) { "down_arrow.png", "left_arrow.png", "right_arrow.png", + "inventory_btn.png", + "drop_btn.png", "jump_btn.png", "down.png", - "inventory_btn.png", - "chat_btn.png" + "fly_btn.png", + "noclip_btn.png", + "fast_btn.png", + "debug_btn.png", + "chat_btn.png", + "camera_btn.png", + "rangeview_btn.png" }; static irr::EKEY_CODE id2keycode(touch_gui_button_id id) @@ -62,17 +69,38 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) case backward_id: key = "backward"; break; + case inventory_id: + key = "inventory"; + break; + case drop_id: + key = "drop"; + break; case jump_id: key = "jump"; break; - case inventory_id: - key = "inventory"; + case crunch_id: + key = "sneak"; + break; + case fly_id: + key = "freemove"; + break; + case noclip_id: + key = "noclip"; + break; + case fast_id: + key = "fastmove"; + break; + case debug_id: + key = "toggle_debug"; break; case chat_id: key = "chat"; break; - case crunch_id: - key = "sneak"; + case camera_id: + key = "camera_mode"; + break; + case range_id: + key = "rangeselect"; break; } assert(key != ""); @@ -186,6 +214,11 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) rect<s32>(0, m_screensize.Y - (button_size/2), (button_size/2), m_screensize.Y), L"inv", true); + /* init drop button */ + initButton(drop_id, + rect<s32>(2.5*button_size, m_screensize.Y - (button_size/2), + 3*button_size, m_screensize.Y), L"drop", true); + /* init jump button */ initButton(jump_id, rect<s32>(m_screensize.X-(1.75*button_size), @@ -202,11 +235,48 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) m_screensize.Y), L"H",false); + /* init fly button */ + initButton(fly_id, + rect<s32>(m_screensize.X - (0.75*button_size), + m_screensize.Y - (2.25*button_size), + m_screensize.X, m_screensize.Y - (button_size*1.5)), + L"fly", true); + + /* init noclip button */ + initButton(noclip_id, + rect<s32>(m_screensize.X - (0.75*button_size), 2.25*button_size, + m_screensize.X, 3*button_size), + L"clip", true); + + /* init fast button */ + initButton(fast_id, + rect<s32>(m_screensize.X - (0.75*button_size), 1.5*button_size, + m_screensize.X, 2.25*button_size), + L"fast", true); + + /* init debug button */ + initButton(debug_id, + rect<s32>(m_screensize.X - (0.75*button_size), 0.75*button_size, + m_screensize.X, 1.5*button_size), + L"dbg", true); + /* init chat button */ initButton(chat_id, - rect<s32>(m_screensize.X-(1.5*button_size), 0, - m_screensize.X, button_size), + rect<s32>(m_screensize.X - (0.75*button_size), 0, + m_screensize.X, 0.75*button_size), L"Chat", true); + + /* init camera button */ + initButton(camera_id, + rect<s32>(m_screensize.X - (1.5*button_size), 0, + m_screensize.X - (0.75*button_size), 0.75*button_size), + L"cam", true); + + /* init rangeselect button */ + initButton(range_id, + rect<s32>(m_screensize.X - (2.25*button_size), 0, + m_screensize.X - (1.5*button_size), 0.75*button_size), + L"far", true); } touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) diff --git a/src/touchscreengui.h b/src/touchscreengui.h index 8dc482034..4fe731513 100644 --- a/src/touchscreengui.h +++ b/src/touchscreengui.h @@ -38,10 +38,17 @@ typedef enum { backward_id, left_id, right_id, + inventory_id, + drop_id, jump_id, crunch_id, - inventory_id, + fly_id, + noclip_id, + fast_id, + debug_id, chat_id, + camera_id, + range_id, after_last_element_id } touch_gui_button_id; diff --git a/textures/base/pack/camera_btn.png b/textures/base/pack/camera_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..f61b0cc4a434126f32321ffecd63476ad8dc10e8 GIT binary patch literal 789 zcmV+w1M2*VP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-V6)@6(tt6-68-00-{Mo zK~#9!?U~O@RY4TTzc*i+ks(D!5gL(YSSH~jqS{K)Cfc<vv!ZO#N;Cp#k@!yp5mAel zS#1&*k@N!#Qc>CkwMbK2Bs_heHaEBo?_TeF_o>(3`M`q*GvApxXU@!=nJXEFVHk#C z7=~dOhG7`xg|}KA0h=VXNotbRC~3Q-t$y*mq-jZ0lEx){@H}r}-Fp|<33LHNzyk64 z1H1-q0Cnrp@DspOAWL$xz!Ttj>X!h}D(SwYcBd#O>5HUcNu!d+Bz>1O>zCI`+9j!3 zQmdrX{(pCTgOa*E&-;|N8LtKgfJJBaz5%^JLlJH61@8E51X%?7f$Fpve+rm%1~~~_ z1}Y<TH9)iftBI&r1#|#YP9GD%$+a}x1A2g^z@X-UYd}SarV_XcymfR-z#E_w*chU% z0Imb`j;?zxjIRP7Iy3SDsE^Pz0ndR8z;573$g&v&4o0-o0K9ZG52B*2)W&ZChMigH z0lWy!AwPuc@|4}qv-8gYP0K`IuM<T>z~+@Uz7lv9=yVo18zWjKfxd{){*}iG6U)si zaL!+L{}>EgLZw>sj{}|k1dhef-SX>SjHojbk^|g~(S92+9nd^lDF<9}LbN5O?xU}{ z8{ycQ5C^=E*~d{QiY}Gf_<G=X;2ds`soMtReBBRVM?{3=BL~#R?CVTmL!ATml+pqB z0)y%=K-c0J^c6Vo=Kzf%r+~}h0{R;W==$PlGDW1!*#xQfK1t6C^#6te>Sl}7t;!N8 zhIA}}gqz^I1P&NU#U_~W80<{ofR5B0g9#F$4Dh)K<41u^Y7(J@sqle_vpyfw!2Z;w z!X>y2jmI!P-IpP|4%>ss|MethkD}%NEME2>M(op=VHk#C7=~dOhG7_nQD*!F5B2bC T#=b{r00000NkvXXu0mjfP7YyO literal 0 HcmV?d00001 diff --git a/textures/base/pack/debug_btn.png b/textures/base/pack/debug_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..66bd41f7abc7e16fa061b881747ba2920177ee4d GIT binary patch literal 960 zcmV;x13&zUP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-V6)@7bz_@^NRog15HUp zK~#9!?U-F?j$s&p?{`KcYY}54VX>ulprjOqA|fftfiZI6r~IvOKqNV#{2gEp{6shu za%7gjG*%*iOK2k6vMsd6w#&)==IQBszkS&HUa$K)`M&S|dA|3)-{-lX=YB*C!!QiP zFbu;m48t(~GlJe26c{QZ%|Q@!II<cM`79!LMC4u&1osn{O`s335oiUrIr2iFi(k~o z<(YGPF!(|dxhNttRI~#?L?((zi8tHsCGqX|1D=u@uYtMhHvm|alq4)5bGm?|nv70h z>c1X*E^wPa=P}T?oBt>Q^5PcwVPFNYCq+=zz-(YRFa}r$d`gpqW!~6hflEMv{(b|r z0fXZbd~up!jzsv31{yruCSW-bc(xZ+{}gzq-@gG9bjA(Kb^<CQf`0+zr16{M+1Ezc zt&SM~3-Ao61^Q$&0Vg9KaC<j?0r1hW|L(qhpd8o_Gy@&LCfzLt0S6twI-n?<2^a<} z25P(nEXlyP*7I2pl&J2iBd<!~drNiG<5CMYd%<k!#y$slA2EB%fGNOb{k=AY|9;h- z0E**~fSLZ9_6wS4KR+V)=CF1+_2o<o|7yqQShj;N0FI{!W@m)`NT;IvTvMA;;E8i! zss#E1`M_S4zX1+~C(3Ll;6a+L@Deati&rVI0r=qAv;a$i13<ZsnXgOau@=Zw%!<qU zU(DaJGGg3uS}UfhU8l~Ruy*W=(`oRUKGfCUXovuwr>hk@b{X&kxal0eE&!wAlz=f| zN2k;GgxCM4V|fPS=L6&ZrN(HmPT7#J+9*{4=N)-Fu+{OK0Tcm?fOEi_SiR}rNPxf1 zopW^kfmgbfm8xtAa9U?gz4itn6|w68Ge|%YunIT@yz~z<s&|jR<GmT<(x_WrGA>P0 zBx@mXCWBhh01QlG0<L?3?$%{e3_Nt?Z^K?8X}8EN?zZUZr#reEz>uDPhMX+tAV);p z#_5}<Z*#uS6p>wtN<a_<KSZR-5lsSCggu6c?DbskCb0%orYLx=dPWFo)9bMjNlZYl z-t07{*#WNf<{FeNFM|#dnI|G6MC6g9Y8R0%{jBS*XGqFyC<o5!rD~pDik66B7=~dO ihG7_nVHk$dbNmFcKF<cw=UvnQ0000<MNUMnLSTZ%CbS#? literal 0 HcmV?d00001 diff --git a/textures/base/pack/drop_btn.png b/textures/base/pack/drop_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..58789e4582874c826306a017f3d32b9cd27a4765 GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi$M52LuHLDS>+3=E9>JY5_^DsH`<wOfxRP~!Oi<En|V zivlW`O;YwYRIq;J(8@o=yh0_eAumvnRl2pU!zn*jX;I?#iSyHrynVAF%`&}gU;OsX z>3aX~*QD#+UzZ}$mIy>5!s1!S9Xu~ZeEN9H@_UHH>jO3y9`v$p2vA{UuX(C*WMc_y z(S_%c*Wy(eFD5YgG;kU)svTgN!5|Ffv@UthfA8yVRb4NsDO+C6S)G0-ZvGNg&;Ci* z<`kd5c#EZ~@oc$opO(QJ$?`Xu9djy<@v7ghSUQQLGwi@F^&55u7gjMWV0lw{Ecb|1 z-JEAN6F$ssnDSx0&#?-@HJ-aNKiyrkWbOH>7hF<2gIq7gOjg`JNiTVA6X$|yMbB29 z-19Ar!GJ|(*_wJ*AD7x_##0CGnqPi+XY(JX8@`e6<z}2by7w#l)C*c4=l`^yQgHQL zcicUdC+0QMDo^Zd*f{43{}UIo(y!qbvNHd(-2GXU;^E~U8h$^@g_bo0Kj6_gZP4_< zXxhh&OaG)eOaAbC&VHkJ#pa%(&22?#rOSdLA4@zK_1<5$Sl!^p!t_d!b&Utt&E@se uw#aO0X{`JC|ND1&lTH6VBtb)Ys`xtPx+I~A)qcRpW$<+Mb6Mw<&;$T61@N%| literal 0 HcmV?d00001 diff --git a/textures/base/pack/fast_btn.png b/textures/base/pack/fast_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..4572a7b54ce1edaafd0bbc908d62cb26c127bf7d GIT binary patch literal 935 zcmV;Y16cftP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-V6)@7Zn0pj|>0+12joQ zK~#9!?U+x9l~okLe`k6#sSOoTR8v&iKO~4~V=7qC!aymAT(pWXH$jwCi^LYS2#Hps z&>xJbmAPnBB2iLALPS<Bk^zHhF_9v~)HGRR&acfK`1ttd>%DJY_1?VugSWZ&ob&Fv z=iKw%b0L$-WHOmdCX>lzGMP-KhfyC@zfw=DpQ@XdYBT=D#SQ`Mft3x^&qT!WlD+4E zmr8Q;z~+efxEG_f(dL{}R~2lHs(&sbd!i>ZAT9hlpw&QiHX=?J?5qR6sF7b45oee4 z*}t|XTc*{<fo%1VlXn6efUAMufl1)Ah?t6qDfL5ObA{@7M3`(`2y6#NfHxyzrXQla zRh_7b@R#Zqbxb`{7@t?)NKT`+)I){&k9ytl5p{nDh4FKBy}Ci&rmij7db=e5eOHU1 zx(m3Yfv@L*mm}hvf~{fT{Y6r`b{W7S;2>}e_zSofcoMj^B=>McyxYwhFxoKK7XT|t zV|y!{{{$EZCV(q|J*g&?1GY8&>e$_m^Z!@suTJN;$WtYmF?F`V{b5dhrq|E@rRgfW z!1EO{uQqW0uzGt>U4&{j;RfI#U?L(uD9zmjoB)O^RHu{PjleZ&>?CkBA|{v1rRQKx zly@%oZf{*heOTb6I@0a`Y%OuY7pE%UDZfR;xr*@@YmVjah?wi8Xg#uoZf~N(-liJ) zW2wESmonfz;Kzo#r%KMR0QS|$KN}JA%k|uc`c_T!zf)WN?BGyJ@0%;;E>{n<ab&(# z@9NhLI9zb#h`LjKT-~Ss(m~xgufCG{h`w=tO^3yCR=r1kP(51H6^`}G28^haZ8|@h zp1z9u52WvZ)mLF<zih&l>R$EiB92d~yVTJ|^e<9htI*rijrB#FPTUV{>CpBJ@WR5g zlzIuU5x5N)0?q(m1IHJhwEkfY+kgW}7vK+IZAAR=Uu?kBz<nLso&z3>h@ZNcP2<25 zg`xcsv4cS&wbDPA`v2>fVsogUHXtIVf!7N|!|6GULCS)wN(FUBy=)*dAZ5WR;GM$I zC~)_nWx*Qt*TUs#HG_tFi@H5MuVpfsOeT}bWHOmdCX>mu&EH%D+2K_HnacnG002ov JPDHLkV1lNG#C8Ax literal 0 HcmV?d00001 diff --git a/textures/base/pack/fly_btn.png b/textures/base/pack/fly_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..a095b92a79d3dac0f44c5d3782b9ebee9f9b7afd GIT binary patch literal 783 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHi$M52J+4A35!G1_q`%o-U3d6}R5bh|f5iC~<uM`V*{6 zkF@^roNT=<%&RRRBJ$KTe=pC8I~T+#cuuLVUw0?qom%~3m$Y?d8;@mdJLx5~F6Ek7 zp<&IPJ?i=U@6F$Q|IM7ak8S2#%`Lw7yz<`n%Kdx)s~$GsK|(!Thf)jK%)D<YXF6Pp z_4J=p%q*(N@IdA7ukO<emQ0^i^{0IO61(SjF8nuP`q93PZI6LvVG$GW^vMk2e?%rM zk)E`zKUuH2?#map`Et+iY@Z~kV8|6UxA^OUP*3a6Ewxj>cwEx<G@Uffd)CyAFZ(CO zsj$2%J=ZHzdV)dw=V7;aGu{_!_Vx|j2ktD`_ws<%1Bn9JinBK=`0p^!>Q+3|9J9Lf zQ`UoEm7UKuJ?}HV`m`mK_YK=Qrd-Xh$0HdB>sb7m`X&SkmAyggW`j_b{d8HZC6 zI4?YL4{#5N_g=`lf?w+PtVf&mFI{xYU;R~C;h6P<gkv@5RA1c)=vjF|ZZ?<T{>z<D z>X@>bt91*sU3(NCuozeez2|z6sIqM3jP9hqzQ7-GekxWxS5#`U8ncsQIA(|DG#pcC zYzsVgr+>|Z&&qY(4WBEm?#{j4tJYI6^}K+w@h0mSuaAG<yv;q3l_0ud$C7hb9M$F0 zduB6#VgJ}J{4KRHH|u1aRzs}gqU>V=|BoIoQ#*D4*Qb4x_D3<zja<gGLH@^t8Endp zwT=P%w&=XO?s(|0=C@r_)^;zca9FMXE6$9c=fE_V`aGuNe=Y5MR|V|pm~s2mtEs9_ zHDoTaZejV)E-X8bea^{Uo2M)iX#cb816u`~jK>Y>AeLLwf9#@y-ZQcaWVS82l5YGw z#<6&g$;14jbG*O(wz;1X5A|elPulIcv@?Kp4%4y|sLABxGxO_3uR}it)LaB6T?S8A KKbLh*2~7a1En&(4 literal 0 HcmV?d00001 diff --git a/textures/base/pack/noclip_btn.png b/textures/base/pack/noclip_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..1aadad414e22eb6b26e4c0a5a13548d9922f4faf GIT binary patch literal 1151 zcmV-_1c3XAP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru-V6=|IR{oI{RjX61Pn<; zK~#9!?V3x79Yqv|ztgwxLY+|)ANVA`f=JLYJ|IR^5Q#fQaN#4m2neF?L=YdKXxvCp zOb{1QM2K!gF_@i#D{&DGf@l^|qLF|S%!nuoP9GOJ4ac%-=H9;D_ja&;D5g2Ly1LI_ z=ULN`k&%&+k&%&+k&%({KZLZon5u3E&HySvXRMcq$lWVVEL(o?CBQiW0X50mCHcYn zGV1zm6HwXs95|F9K%GolBtmVR0^B$&0_vAI2<!`#S0l$OUbt&%;klJr;0>eRSa#`y zHq?y;;6z|QaMY1dOz0LGak*X);GgpnaFLU}4eW}{mxcsXO{}TtC=h92miGn91Ka~# zJjw1QEN(2cO+b|xDWAOBWeg3jW6GsQW3=r8f7@8HQIqm#V*c-@?2^k4le)ufEI?IP zo0*>nYyj3cBHl^3%O`HmT3{0}2<nJV3#zgO#TP7?t#jgYf!l#a3wH0De6yvg1Hj8J z6I=znU~{emo|#t3SWc+?!@!PZrkn~q1l(owHak<VYk&>F)<{a5N+~T9D8ChWA`t&# z=KQOb#UU1f-M|mP*{1xuK>01U&R~rCKwZE+3wVHI&A>ICSb(ao50u{vTo1f%CjJrd zEHI2%#Qn<z&_{tIru<X_VN(~l(_QZqk!y{Zde?4?D8C%`T1;4UJ1@PB0V49Gs#d_6 zz=Q6m0Wfd*J%(3-D}WO$1s(uC1rFQ2<usL_C<uzk(}|dJY2ub$mJN1CnxJ8#F_PXA zkicocTtxnd)dItaiKnVM>9qwUus$Jw!?MHB1-R5MPtE*WB|ud#16D<TIs)u*J73IN z>8_fg4-@hot}j@rZ9YB;P}L72?QV@9Bc0w<>ipISP}Mc6`jo2P9LVQXb&uu!6n0uU zT)IxN>I(^@#(;0lhf&p|z&BO{#LC@+rqqQ_b_Z~aH97n3xiV}2AIAj-?s^rlF{1om z*4};(YzH0(es;gl1KX_g>x~tRO2C!CS1XwL9PpE+x*_m|9fj=-<~|3U><&Tt?*bz7 zC2+Z_o)6p#oNoU7ort{WVnVHa>DGSNTxOeF@)6+qp!(BUxWia=fQTH5>}a^&z>V6< zz6M?d9y8fSJ2^Vs*4bVk>HvZrEdnw=wg6e<UgC$K$29@5X2uiomYaJMuzJ>YLD9jQ zv19GJ1pW;8El7`{^4f4TBCzO)*w_o!R`Hsfw-6j>H65u+bL!n-sC>o0|3NAi3l@M2 zfL9W8o1ki94P{3$;3STn|4BeV{gQ9m-@*#3Hco+R<>$w#Fv|{NN@2CarpSwgJJe<h z?8OHX^|{_CpU8As_>4?I+usP4fj`a)^*2IGWMpJyWMpJyWMpJyWMupY{{R6UOU=5! R&O-nI002ovPDHLkV1m655jp?> literal 0 HcmV?d00001 diff --git a/textures/base/pack/rangeview_btn.png b/textures/base/pack/rangeview_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..fbcd80a1df893b560fb1dd05cda0ec17221b98c9 GIT binary patch literal 1604 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 Cf7rbM literal 0 HcmV?d00001 -- GitLab