From 86f32df3aef99f36ee21bb3b75dd27d3517611fd Mon Sep 17 00:00:00 2001 From: Gordon Weeks <627684+gcweeks@users.noreply.github.com> Date: Sat, 31 Jan 2026 23:04:56 -0800 Subject: [PATCH] Add icons instead of text for input key hint bar --- assets/ui/switch_button_a.png | Bin 0 -> 491 bytes assets/ui/switch_button_b.png | Bin 0 -> 465 bytes assets/ui/switch_button_l.png | Bin 0 -> 308 bytes assets/ui/switch_button_r.png | Bin 0 -> 362 bytes assets/ui/switch_button_x.png | Bin 0 -> 512 bytes assets/ui/switch_button_y.png | Bin 0 -> 475 bytes assets/ui/switch_button_zl.png | Bin 0 -> 367 bytes assets/ui/switch_button_zr.png | Bin 0 -> 411 bytes assets/ui/switch_dpad_down.png | Bin 0 -> 467 bytes assets/ui/switch_dpad_left.png | Bin 0 -> 471 bytes assets/ui/switch_dpad_right.png | Bin 0 -> 475 bytes assets/ui/switch_dpad_up.png | Bin 0 -> 464 bytes src/samples/ghhb_game.h | 66 +++++++++++++++----------------- 13 files changed, 31 insertions(+), 35 deletions(-) create mode 100644 assets/ui/switch_button_a.png create mode 100644 assets/ui/switch_button_b.png create mode 100644 assets/ui/switch_button_l.png create mode 100644 assets/ui/switch_button_r.png create mode 100644 assets/ui/switch_button_x.png create mode 100644 assets/ui/switch_button_y.png create mode 100644 assets/ui/switch_button_zl.png create mode 100644 assets/ui/switch_button_zr.png create mode 100644 assets/ui/switch_dpad_down.png create mode 100644 assets/ui/switch_dpad_left.png create mode 100644 assets/ui/switch_dpad_right.png create mode 100644 assets/ui/switch_dpad_up.png diff --git a/assets/ui/switch_button_a.png b/assets/ui/switch_button_a.png new file mode 100644 index 0000000000000000000000000000000000000000..9202083294257fe17c226512031e8f6e51863d01 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T-^(N{*wsKU+hW*Y8NO8 z@(X6@e=on^{{H-U{`L9w`se*$&#(W%z`z*p>Eaj?arkZ6?V?r%o+&3(6{d?QI&OLX&ucIB2S20dJYM{HZbO1% zL&9Q51=**adwSU#3oL>wq)Qurob$Wq7MoCMe&W=v8=MTYTjz&eEEWAKeR)U7-l#JR zZTYes!Dt_8V~TdB|R0-+|t;~|MOabT;KDohu5RIyLK(Q68&Ae#$ZjRL~7NM{}CqN=cJU+ v)s49^Ek0J{X=!QV@h_dp-WIkM28YBCxTP7oKM`3641NYrS3j3^P6F)T?`iMA5Og(;PY+athV5tHyBg*NbI@#e&*yp;xXGIxIbHchwv(W`|&-<*87_VVc?TmL8o{y6^T;JnxVGJBuBy{79K@9{lJ VA>~@iBw!#jc)I$ztaD0e0swq|2fqZm|vDEDAD1u|9k4+M)x+e-TMx=M#YL)tjyF4SkI7L*Lzvl zVeUO9eSxrsX3+&ZS-973VtTXY!C@{V?Gyyjognf+p;2=sY`uwzj})xW2R#6lCl&or5ikrIp4o~Dok78 z$Mua_XQ8;$Eaj?arkZ6?P)CvJd3jZWa;1NRiLPuLJAakOg1gdEmr}QxRWw};H*srcxudb@YC0eO z^u(t0$xm=hc-ODufpYB_$;?mxPa!zqRpl4T^EMBK& zETzrp{ybOaWzR0J28l%3uiH=8Hrnci98qDK9jyN+OrgX`Pw>XAX*r+07R*z9cKO@A zE5WV$kEK-KzYKi(BW+&TUDFf7_b*6FpA|S!ID2Q>C2QS)&wUbWwwYDh#kGChV8hgR z&G9Q+)&ifW(%&Ba6>|yZD{jp>JTbU(61UHn;{r?n-1v2CO;7&cwdZ&KwoT`>zaJHF zLsa#?Rs4hI1YhRM%cOtwyMET6{AAtYW!$$v#oSdo7cO4LF~52R!{KIj+dmA)j-+gt Tc`M-pj1vY=S3j3^P6*NE; literal 0 HcmV?d00001 diff --git a/assets/ui/switch_button_y.png b/assets/ui/switch_button_y.png new file mode 100644 index 0000000000000000000000000000000000000000..1f854de4872306de0a174d59c7ea0913b6b0a579 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T-^(N{*wsKU+hW*Y8NO8 z@(X5ozrKI|dHs0){q^$q?fvt)gzbeG7#Q6>T^vIq4!@mtyR5~4!&TM1Xzs)R`?sy0 z>$kd%CFuIA$Si6{4wJ>-T3)m=Nzxnx9O}tynlDyqsyC_C9dUfbV{+! zvT}IzSB&ZX#Vd?yeNS!HG5lF}@~j2#gItSii?j}`p803O1;&hjPZT1U8}1ylRM6!A zEbw5;_k#ixmL67NoN+~TdsaH_W1VJ+@BXy6XjNOTko20 fv*$1+d literal 0 HcmV?d00001 diff --git a/assets/ui/switch_button_zl.png b/assets/ui/switch_button_zl.png new file mode 100644 index 0000000000000000000000000000000000000000..8e23733324cd513794f160bc1fe9400ddb0a27c4 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T-^(N{*wsKU+hW*Y8NO8 z@(X4-zkYuIe*XCP`ttVo>;3cN7@v9p;3aRVxQSDFfg)vx;TbJ9DY0Prckp2k1MO9&Z1}k_itP4 ztu3ZvqVL!KJEQ2lM%u#Hvu3?pn<&M2;E|`)oJlO-B@FaebCoeiTu^ni(#byYd#~z` zz?8qnlSGRC$#tIkA^M4-q+TjPhhKsD69ZFa1LI7F<17*>Of2FFGa2UdU1U@if3Sn$ z@6=1z8TT1|xfgp|vND|gLecu(BZh(utM4CM>A)WG`QJJ#zx% z<%9c~omd@QTQ{=3_4&^t+W)-da6H4W%N6y@eU99(kURgfGmt?>KL6lzGaj7-GUw-1 zHLTNI60deio?*c`{ySS0X3RD$Jt?$De8o<=+`rRyJP`c;IeV9>>0KZGOH$cWS*KN9 Q1_l>{r>mdKI;Vst0Lys8F#rGn literal 0 HcmV?d00001 diff --git a/assets/ui/switch_dpad_down.png b/assets/ui/switch_dpad_down.png new file mode 100644 index 0000000000000000000000000000000000000000..8462aca5a8b5258799061b0bc892da50fdf9352d GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!k^_7~T-^(N{u2$J8@fF+a(iy% z2GIdz{QdO#^NdA*o<9G1`oimoj91>VFYE%}71jT`apyx__qRzFmRqX;v`)Ar z$S;^7ety0@zy1FA_3Q7S@7KTIU+=%r&+-rh10#>8i(^Q{;kVOY@--{)Gz3mOe0!s1 z`TM`~i<)M3vS%co?)&j~mEm6}P1UXor@9#XgDyI*WIy{niGiK#M!rUhbdRY1s50n36EtB_9`4SzPjSN#YHZsEiMgC;f$BKei$)c&rfQZ zuRX_2Ptbjt*(tLhRgL#e9cvzX_9XuN`1-iy(g}Y`zSZ68W4PD(U&-RmleVkr*^YPf zex8fkP%av>cEKjGIah@A_+odQX6n<+&FR`v_d@2$;Xg7O8tqL&zjnrb`P}`LJ>%#R ZW_js2c>~UGmw~~?;OXk;vd$@?2>@>E@fiRB literal 0 HcmV?d00001 diff --git a/assets/ui/switch_dpad_left.png b/assets/ui/switch_dpad_left.png new file mode 100644 index 0000000000000000000000000000000000000000..bd7f2c6e2eb7fab22f33efe4d45532ca0653b69b GIT binary patch literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!(gJ)!T-^(N{u2kD8@fI>as#S; zZs_*h0K|A^==uyIV&wMo^o75lKL2_8{L9jHFYE%}71h6v$oM>C(c9FL4|Ux)F8$mF zv{9@i$S;_|etx|Ceg69W@B7#5pWk1fe?Q*;egB-7X;T>(7`Z%M977@wzrA)_s7XP9 zEg?kUgme0pQ+)6LPvZ2=yg7^e=9MS)t&8i7H>`0wF~d-nvn60VhhW0}=dToHI8V4c zC^25`l2yoQ?4kcjrE2FqJ4c^I3@P#wFpo2lArto=SAs{@v%$fx6^(2OBCU zsVM}kuw&qiWn^M%uVZKz-*}}v;DE!5=?bs37V916Wcw2>ct!l(5lg;=_xb6YjxkLB zxcZK`$C=~TH~+V;?)|ovX@&NI+3t4I4wrt_B!;stR6h`N>cslv-RIvkf7?~hZkIEe fb6frKKc(kb8**~Dm)w2`3^xW(S3j3^P6W<3nBd=NXH>?>qXgsQztg z3De3~=0HnDOM?7@8RF;P=a;vy-~WDn|9SoV`u+Fg-}jeo`B2Qjz{un2;usQf`0e$Z zLQM)HYzd+_V@`>k+4T3XywL?oUC|`Xo74c#@u!W%g^%B(mlb|)lPB)8+qft}e-KbzGBXE3fl-(Ngo z7DM#^uxqTFo@KSZsh=Adef%0j3G0W?lA9Sd-ngTe~DWM4fk-h0! literal 0 HcmV?d00001 diff --git a/assets/ui/switch_dpad_up.png b/assets/ui/switch_dpad_up.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f45710472fbd5f0b0dde42d11385d0cfc13f5e GIT binary patch literal 464 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!k^_7~T-^(N{)54DLstj`5Bc24 z?U|wLa|1W179$Yj&(r50>big3xbw<8_Jv*GyQ2En5gFe$?R=YB^7qr{pQkVI8#+Az zS|?Hxu6<3D>X<|RK~UfHb~WRT6B=HYnn zp#KJazS{x^xfr@i8y-Y(Cp_2JaNPV+EF|6Wscr-JKUEQ{eLNY-A7uVaOE@H9ap=Yp zX?@1lHyk2<3#^zNKAAB-wlQ_@WK9oi^m?VAC-&i&Wnh}4TlK1o=S_^c+>W?9xGiK# z67eu^H2HsIN}O?x-()4<+}xa724>vHwyPZw_gi$}X!rH?#+?Qq1K-ycY5cNhnQ6Dr z=BwC;_OD-sE(A2z%rTU2yrikayz9U$CKnIsr+;l~s`y;~|GPDj?{~KPp?B{O#1}I? Y6H9%jH8=eTFw7V{UHx3vIVCg!0N5eq2mk;8 literal 0 HcmV?d00001 diff --git a/src/samples/ghhb_game.h b/src/samples/ghhb_game.h index b105e3b..75adc7f 100644 --- a/src/samples/ghhb_game.h +++ b/src/samples/ghhb_game.h @@ -31,16 +31,16 @@ constexpr float MIN_SUSTAIN_FALLBACK_SEC = 0.05f; constexpr float MIN_GLYPH_DURATION_SEC = 0.1f; const int GAMEPAD_BUTTONS[LANE_COUNT] = { - GAMEPAD_BUTTON_LEFT_FACE_LEFT, // Left - GAMEPAD_BUTTON_LEFT_FACE_UP, // Up - GAMEPAD_BUTTON_LEFT_FACE_RIGHT, // Right - GAMEPAD_BUTTON_LEFT_FACE_DOWN, // Down - GAMEPAD_BUTTON_RIGHT_FACE_LEFT, // X - GAMEPAD_BUTTON_RIGHT_FACE_UP, // Y - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, // B - GAMEPAD_BUTTON_RIGHT_FACE_DOWN, // A GAMEPAD_BUTTON_LEFT_TRIGGER_2, // LT GAMEPAD_BUTTON_LEFT_TRIGGER_1, // LB + GAMEPAD_BUTTON_LEFT_FACE_LEFT, // Left + GAMEPAD_BUTTON_LEFT_FACE_UP, // Up + GAMEPAD_BUTTON_LEFT_FACE_DOWN, // Down + GAMEPAD_BUTTON_LEFT_FACE_RIGHT, // Right + GAMEPAD_BUTTON_RIGHT_FACE_LEFT, // X + GAMEPAD_BUTTON_RIGHT_FACE_UP, // Y + GAMEPAD_BUTTON_RIGHT_FACE_DOWN, // A + GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, // B GAMEPAD_BUTTON_RIGHT_TRIGGER_1, // RB GAMEPAD_BUTTON_RIGHT_TRIGGER_2, // RT }; @@ -49,6 +49,21 @@ const char* const GAMEPAD_BUTTON_LABELS[LANE_COUNT] = { "<", "^", ">", "v", "X", "Y", "B", "A", "LT", "LB", "RB", "RT", }; +const char* const GAMEPAD_BUTTON_ICONS[LANE_COUNT] = { + "assets/ui/switch_button_zl.png", + "assets/ui/switch_button_l.png", + "assets/ui/switch_dpad_left.png", + "assets/ui/switch_dpad_up.png", + "assets/ui/switch_dpad_down.png", + "assets/ui/switch_dpad_right.png", + "assets/ui/switch_button_x.png", + "assets/ui/switch_button_y.png", + "assets/ui/switch_button_a.png", + "assets/ui/switch_button_b.png", + "assets/ui/switch_button_r.png", + "assets/ui/switch_button_zr.png", +}; + constexpr int COMBO_TIER_COUNT = 20; constexpr int COMBO_DISPLAY_THRESHOLD = 5; constexpr int COMBO_NOTES_PER_TIER = 10; @@ -59,21 +74,6 @@ const char* const COMBO_TIER_LABELS[COMBO_TIER_COUNT] = { "Stellar!", "Legendary!", "Epic!", "Divine!", "Godlike!", }; -const int KEY_KEYS[LANE_COUNT] = { - KEY_Q, - KEY_W, - KEY_E, - KEY_R, - KEY_A, - KEY_S, - KEY_D, - KEY_F, - KEY_Z, - KEY_X, - KEY_C, - KEY_V, -}; - /* One color per track (track index % MAX_INSTRUMENT_TYPES). */ const Color INSTRUMENT_COLORS[MAX_INSTRUMENT_TYPES] = { {220, 100, 100, 255}, // red @@ -472,10 +472,6 @@ public: bool is_lane_pressed(int lane) const { - if (IsKeyPressed(KEY_KEYS[lane])) - { - return true; - } for (int i = 0; i < MAX_GAMEPADS; i++) { if (IsGamepadAvailable(i) && IsGamepadButtonPressed(i, GAMEPAD_BUTTONS[lane])) @@ -989,17 +985,17 @@ public: } } - const float button_label_font_size = 28.0f; - float label_height = MeasureTextEx(font, "X", button_label_font_size, 1).y; - float button_label_y = (upper_bar_y + hit_line_y) / 2.0f - label_height / 2.0f; + const float button_icon_height = 50.0f; + float button_icon_y = (upper_bar_y + hit_line_y) / 2.0f - button_icon_height / 2.0f; + auto* tex_svc = get_service(); for (int lane = 0; lane < LANE_COUNT; lane++) { - const char* label = GAMEPAD_BUTTON_LABELS[lane]; - float label_w = MeasureTextEx(font, label, button_label_font_size, 1).x; + Texture2D& tex = tex_svc->get_texture(GAMEPAD_BUTTON_ICONS[lane]); + float scale = button_icon_height / static_cast(tex.height); + float w = static_cast(tex.width) * scale; float cx = lane_center_x(lane); - DrawTextEx(font, label, - {cx - label_w / 2.0f, button_label_y}, - button_label_font_size, 1, Color{220, 220, 240, 255}); + DrawTextureEx(tex, {cx - w / 2.0f, button_icon_y}, 0.0f, scale, + Color{220, 220, 240, 255}); } std::string score_text = "Score: " + std::to_string(score);