From ac37bb43ebefa6cb55b5545b76c1880089459716 Mon Sep 17 00:00:00 2001 From: GiaQuang Date: Tue, 30 Sep 2025 23:51:29 +0700 Subject: [PATCH] chore: add UI image button --- .../vibecoders/moongazer/managers/Assets.java | 4 ++ .../vibecoders/moongazer/scenes/MainMenu.java | 18 ++++++++ .../moongazer/ui/UIImageButton.java | 41 ++++++++++++++++++ .../resources/textures/ui/IconExitGame.png | Bin 0 -> 480 bytes .../resources/textures/ui/ImgReShaSoundOn.png | Bin 0 -> 2545 bytes .../textures/ui/UI_Gcg_Icon_Close.png | Bin 0 -> 869 bytes .../resources/textures/ui/UI_Icon_Setting.png | Bin 0 -> 1877 bytes 7 files changed, 63 insertions(+) create mode 100644 app/src/main/resources/textures/ui/IconExitGame.png create mode 100644 app/src/main/resources/textures/ui/ImgReShaSoundOn.png create mode 100644 app/src/main/resources/textures/ui/UI_Gcg_Icon_Close.png create mode 100644 app/src/main/resources/textures/ui/UI_Icon_Setting.png diff --git a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java index bd393f9..f0b2d89 100644 --- a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java @@ -89,6 +89,10 @@ public class Assets { assetManager.load("textures/main_menu/background.png", Texture.class); assetManager.load("textures/main_menu/title.png", Texture.class); assetManager.load("textures/ui/text_button.png", Texture.class); + assetManager.load("textures/ui/IconExitGame.png", Texture.class); + assetManager.load("textures/ui/UI_Icon_Setting.png", Texture.class); + assetManager.load("textures/ui/ImgReShaSoundOn.png", Texture.class); + assetManager.load("textures/ui/UI_Gcg_Icon_Close.png", Texture.class); } public static boolean isLoadedAll() { diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java index 082c825..b78d1a8 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java @@ -3,6 +3,7 @@ package org.vibecoders.moongazer.scenes; import static org.vibecoders.moongazer.Constants.*; import org.vibecoders.moongazer.managers.Assets; +import org.vibecoders.moongazer.ui.UIImageButton; import org.vibecoders.moongazer.ui.UITextButton; import org.vibecoders.moongazer.Game; @@ -24,6 +25,19 @@ public class MainMenu extends Scene { UITextButton settingsButton = new UITextButton("Settings", font); UITextButton exitButton = new UITextButton("Exit", font); + UIImageButton settingButton = UIImageButton.settingButton(); + UIImageButton exitImgButton = UIImageButton.exitButton(); + UIImageButton soundButton = UIImageButton.soundButton(); + UIImageButton closeButton = UIImageButton.closeButton(); + settingButton.setSize(50, 50); + exitImgButton.setSize(50, 50); + soundButton.setSize(50, 50); + closeButton.setSize(50, 50); + settingButton.setPosition(20, WINDOW_HEIGHT - 70); + exitImgButton.setPosition(WINDOW_WIDTH - 70, WINDOW_HEIGHT - 70); + soundButton.setPosition(20, 20); + closeButton.setPosition(WINDOW_WIDTH - 70, 20); + int buttonWidth = 220; int buttonHeight = 65; playButton.setSize(buttonWidth, buttonHeight); @@ -45,6 +59,10 @@ public class MainMenu extends Scene { settingsButton.onClick(() -> log.debug("Settings clicked")); exitButton.onClick(() -> log.debug("Exit clicked")); + root.addActor(settingButton.getActor()); + root.addActor(exitImgButton.getActor()); + root.addActor(soundButton.getActor()); + root.addActor(closeButton.getActor()); root.addActor(playButton.getActor()); root.addActor(loadButton.getActor()); root.addActor(settingsButton.getActor()); diff --git a/app/src/main/java/org/vibecoders/moongazer/ui/UIImageButton.java b/app/src/main/java/org/vibecoders/moongazer/ui/UIImageButton.java index 3ae9d46..1f541a2 100644 --- a/app/src/main/java/org/vibecoders/moongazer/ui/UIImageButton.java +++ b/app/src/main/java/org/vibecoders/moongazer/ui/UIImageButton.java @@ -1,10 +1,51 @@ package org.vibecoders.moongazer.ui; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; +import org.vibecoders.moongazer.managers.Assets; public class UIImageButton extends UIButton { + public UIImageButton() { this.button = new ImageButton(new ImageButton.ImageButtonStyle()); this.actor = button; } + + public UIImageButton(UIImageButton other) { + this.button = new ImageButton((ImageButton.ImageButtonStyle) other.button.getStyle()); + this.actor = button; + } + + private static UIImageButton createButton(String texturePath) { + Texture texture = Assets.getAsset(texturePath, Texture.class); + TextureRegionDrawable drawable = new TextureRegionDrawable(new TextureRegion(texture)); + + ImageButton.ImageButtonStyle style = new ImageButton.ImageButtonStyle(); + style.imageUp = drawable; + style.imageDown = drawable; + style.imageOver = drawable; + + UIImageButton button = new UIImageButton(); + button.button.setStyle(style); + return button; + } + + public static UIImageButton settingButton() { + return createButton("textures/ui/UI_Icon_Setting.png"); + } + + public static UIImageButton exitButton() { + return createButton("textures/ui/IconExitGame.png"); + } + + public static UIImageButton soundButton() { + return createButton("textures/ui/ImgReShaSoundOn.png"); + } + + public static UIImageButton closeButton() { + return createButton("textures/ui/UI_Gcg_Icon_Close.png"); + } } diff --git a/app/src/main/resources/textures/ui/IconExitGame.png b/app/src/main/resources/textures/ui/IconExitGame.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5b6f399e477319ba5d13ca42875b8240e4f94a GIT binary patch literal 480 zcmV<60U!Q}P)TjBd>1wnHc~u z$X>4lgkQfXU8xV8lRyrDg!5{^(PaUJ04(U@@YipBmocgcP-AxSHCZ5J29*HJ2#bIK zTfI$?0|MIEE`mG|fBRSRR{+fwGgQ0^G&s{uO6S7<0A&kt!6F@C8F@+oZwP4NmjXU5 z0VJNqJ|MtV0uBKzLj&$mE&K{Vdr&t9yrNEP0Zr7a0YlVwEno*VG+>U}s0D1G=6PWA zw?H4|GQbeqssRqwH{b zLACL13eU(7uIVshn$Cz0*Bp31Z}oBh5%3B1 WddT5n0000V`e$fjOXvXF9fE)~(sV6vDTrhu8qOa@cI6fhC*$;D^JqZg!Yf^c#rfz3Zi zMiVS%rZc5XnV}S~72$ma_-qD*(=@utluQ*g2epghVha(qV#v&5ZekWPji=mt8-!iaC64R_$c{tKLUfe#(n^|vri@v@EH#q%3nB?lbx=~faKGLI=ozO53u-~Ec7?CPZ7Kev+}6+xxt zFf|Me&;?g^ppUwm8mSJVYoo|c#&2fIHH?ZZa#Hg$135VbU3H$x!Fz@MKMTG#IOq@f zz8|z6i@eGgvlV=id8Bq5)wZ`%b8pWFgzU+S1r`l(2npaYI9|Oxi4t2viuv1F&a-b z`8pn=64jJpmvC;KDnKyX=A=q8t5lMy?l?(*6+xx*Y@|J!sO8N+`>$D1&+{%>S^kaX z%*`TeyRb$zVNpjg)z+y3qBsGALWz}R?z57_ZCIi}x~vrycJH8&$ntNjW|o;QJc-HC zs3K3}OPU-^*Dh)bfCA*BRyYf7KB{C}8~ujRtmuVv{#&kSXaj|;WEJ3ns*$(_{7Iqn zjNkFdgTcK#xCs?twsc_|)wsn!B55V@qya$`;1HaLa&5T^s$_FBHNY_;(dVC~oq~K; zq(xFWah#5bq;jY^a)9L?gsh6rUT$EBW$E0VER_ z z*A;DgiFRM9mV*Bo(K~cNGNS46L~}5Dl_AOR!U$VEmZI_`6WU1It!UlXX@~FAWkQ4K zdWbHD=oC1_5XC@bM3*sZk|kObq8e9J=GqYx#hYiLIQSI4a7;yq2B^2D`h8L5iLVAv zL=)xjSjm(#Wz6J{h3MtW)IVCHcPB%%x0}MDO4@EkUwqzwme3?ubufw|nw^Mf4n#|t z@??p2g{eKtGwNPKlP(-f)J`w43Wh=?_9EsE{<3vU$cP4((GYEIp#$#p(%w#oF}VzN zz3p{A`uSkP7d{=_gMwiJro;(u!4OMy0y7=e#`0u{)_>c7+7<2Xr7jiy+i}0uh~BDC zFh&%T@kNVK87)HzxN)pRd%EeITkF<89ejtRLG-m({rw^-U@V!<+{om`6$SbnTBO|< zqU+>Y)ANEs&+|QHG(`9R)Z62VojaOUL*FO{N3Ie}hIQdrOO%+u5^>5k-Z_d?btO(xCEY*Tu zmp;Wod=e4OGK*j(EICVMnRPk}E6oR}VI)L(nWX!%t+dS*{by(7v`P;2`+araq8dlk zE|6u!6%`<1~Ek?clBX9(Z(rKha!Fr zQ=xOGMl-<$Y>3)32=1~ccCT4(8Z(<&$lNA(*UENaVozK&zGT}m`i0iEC=eFu{tE(; z$)qQ?B>`FIL|2;AmGfAxkSStHn0e?zR<;_l!xn8hLO-{Ht|YS>^X6PF5SX0dZ!&4^ z8$+1oa+m@Lmq?yCvYVOe3t>8*sHp6PhR;&Fl(AM)ZkUy1Dj-=h;@gJqrW5X--NrA$ zk1t_XVd#p}GZ3IKu zo*}|Qw<{}m-OBQoLRdxH-thkb$&e6DvZsf_2lsosbUD+Joavrp7*R<#hwaGh%8IDU z3g6fsJS34E==XYFs1J79t$m2C#$4(Srr}4W2h>dWn_`F41~9QmR1Q* zJsxb6efWjDye+|_)Cw$Q-3eAR zYrtx-0`I*A^W+@&*v;4;sB&`_vWV;?b6PCgak#}`8K_{Ef^s8R#@wje_ZrF3myDmY z<4w-yt1u!w!${8o^T2#We>U>46oPsVFc&v*Tv87`x;YEkERY}N$Z9c|4yJ*rpwJw2 z%+VUw9%D`VA!Ohl?#R-r3Kw61e4FG@fY)=GY((*zJeaJq?s1)T?baYu~_j literal 0 HcmV?d00001 diff --git a/app/src/main/resources/textures/ui/UI_Gcg_Icon_Close.png b/app/src/main/resources/textures/ui/UI_Gcg_Icon_Close.png new file mode 100644 index 0000000000000000000000000000000000000000..620d2e088dcb061a9c653f71cbfcef64938ea01a GIT binary patch literal 869 zcmV-r1DgDaP)X&9&5ejBi}^9DsPjD3NJ8;8`E@h&=-mWv=NVA zoOZuqmSJF=0)u>^#I(4a@C{R31E8eL0fr@mA!=RWJ`;}6%~#s_#DLN^Bnnqc)~Bp? z<>e$pYo{w*Mb3nU@Y$nGa57PNl9B;Z3Fu*sD_p^QpqFN%aoTC{Aml93XeQ4LO{C+( z=fEUA6r4|e*b`h_7w+IVRaRI>J|YB=Qn)(E zQ)l^As@&rUy-mO0lth)njV@&c4#`51p#>*A-PWYzD~WBiCdekqu_^h0O=dH_VDZ~I zG)y-iVIXB|Oa~pN`@h0KczstEPt!q$#bORZSLcV6a}@e*<16PP^c%Zf#Fcwz7lsYV zc4}EoO4QQ_;BCDYXOBakddp99#CAm;$QUq4jVnCQM6?}@E)FGJmfU^>Bt7Q} zZ&N_;C;FA%L?aD6<`}*(pq2*llGijdBnBDNy6#-(?8;crevu(9l5em}NrfzD9UIw6 v4W~G#wJa2hMWn27{sg3CG2sI8PlSH}Oh$xJ>Ch4%00000NkvXXu0mjf)S!#p literal 0 HcmV?d00001 diff --git a/app/src/main/resources/textures/ui/UI_Icon_Setting.png b/app/src/main/resources/textures/ui/UI_Icon_Setting.png new file mode 100644 index 0000000000000000000000000000000000000000..18a3d8fc97edfe14111047a011129cbac570510e GIT binary patch literal 1877 zcmV-b2demqP)a{2 z9B0mKh>g!qy!&A^8jbdGv)Qw9DDeI0{_yPj?&F!A`HgokLE_{k@%@#v6!SQnYj}pe z9N`JtbbIi;)x6K=yhNTftyqmR8@VJ8VuQ{`gWLikhE9PLR)`kPq=j&68!fYu>tH|r z9ARl)xySLxW`$2-KId{316D zgE_XqoIIA|QhK$VMv8gm1_d3B%FQ-iTJHBTZymCF<%lVDS*~~t#s5;Ru`>jWb_0!E7+DQtQvxaU4wOn2f zY%DqRpw2K&jc+8AOff^fIC5Zawt+{7$%$v zs+6fx6QDCCI4l)y!h%KaLZ}Ibcu3GqyI)Q&(nIv=IlPr2!G&5*FSaF$f)T>0QK8J& zh9OjE2#yd;l@BEcI1E6U_JCZAtgrsroKpwM;s~NL&ZpQ~>;O;D%@zDpu$~8a-P5;a zzT$X!fmW}a;BO2C12H6{^e-oory^uu4t}FB{}R zR>xL5z&|*HM19=zcuLB-R0S?k8TQGwaH&b|exmY?Rx7fUIRcYh!d>8Q!U1L&#U?5x zQXaWBHU`RDKT7U3%$d?^&vFKHqU9u=Oan*ddxNXnri(wjb{)MGTtJ2o1SjRbt_5=bpNA{Zo*lxy61msezko-C*rz>&= z8&f{vw^)KR$sokE+;%QvJ{DST4%@H|{WcE3PB-C`OOexSVVPkvfo*#l8<;ls-5zdc z1%Ko+ZeqYAx1B3dBcbI4%PA1dF+RfqN^a68m!U*3IjqoD%dLCejq@}&3-09}!2sPp zxpY8IGfcQx0X&T5A;(!L%s=RPbCJJrC}KxZEt z*b*VPgTET(e0}F~2nX29LM+WN=6uXgurz~ex=eu1^GdD{O+apSlw95?Hv@dYkD~`w zr^X`BZsWF)T#ZM#gBbHY;>}l#>jhTB8<=vgX9SXrg_aTr$KB*6&=MxXav2U97U80Q5jK>%F5l&mCA=Qt=oBNw|uXqK>w4qDVt3%P{-I1+Tm)h)0Ij(U1$h8i|yD%hd^A0fkOdcw4` zie)F}!CVJpXgQrpzNSirvZg{6n~9JZ6lo1Vz&kN=7M)Vgc-vJmZMghxGFZ)!Ge2I6 zp8{5M<%-Ncw;E(l3b|{WEoYy+J(tCt3PqmgdEUj8-JIGqId=iCVoHIuI`4G4D4Aw! zGv!LL%8x~g5yN>+lS{Z+2q#p2EU8yAJPdA