From 30766b92359978310c68a4cc6f25618d60215057 Mon Sep 17 00:00:00 2001 From: SkyAnzu Date: Thu, 2 Oct 2025 01:36:58 +0700 Subject: [PATCH] Add settings, keybind system, arrow_button assets --- .../vibecoders/moongazer/managers/Assets.java | 2 + .../vibecoders/moongazer/scenes/Settings.java | 305 ++++++++++++++++-- .../textures/ui/arrow-button-left.png | Bin 0 -> 20417 bytes .../textures/ui/arrow-button-right.png | Bin 0 -> 15423 bytes 4 files changed, 283 insertions(+), 24 deletions(-) create mode 100644 app/src/main/resources/textures/ui/arrow-button-left.png create mode 100644 app/src/main/resources/textures/ui/arrow-button-right.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 0e29c81..d10f8d2 100644 --- a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java @@ -117,6 +117,8 @@ public class Assets { 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); + assetManager.load("textures/ui/arrow-button-left.png", Texture.class); + assetManager.load("textures/ui/arrow-button-right.png", Texture.class); // "Load" unsupported file types as FileHandle loadAny("videos/main_menu_background.webm"); } diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/Settings.java b/app/src/main/java/org/vibecoders/moongazer/scenes/Settings.java index 0e471fc..960c967 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/Settings.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/Settings.java @@ -1,6 +1,18 @@ package org.vibecoders.moongazer.scenes; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.InputListener; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.Drawable; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import static org.vibecoders.moongazer.Constants.*; @@ -9,42 +21,287 @@ import org.vibecoders.moongazer.State; import org.vibecoders.moongazer.managers.Assets; import org.vibecoders.moongazer.ui.UIImageButton; +import static org.vibecoders.moongazer.Constants.WINDOW_HEIGHT; +import static org.vibecoders.moongazer.Constants.WINDOW_WIDTH; + public class Settings extends Scene { + + private Table mainPanel; + private boolean isEditingKeybind = false; + private TextButton currentEditingButton = null; + private String currentKeybindAction = ""; + + private java.util.Map keybinds = new java.util.HashMap<>(); + private java.util.Map keybindButtons = new java.util.HashMap<>(); + public Settings(Game game) { super(game); - // WIP - UIImageButton settingButton = new UIImageButton("textures/ui/UI_Icon_Setting.png"); - UIImageButton exitImgButton = new UIImageButton("textures/ui/IconExitGame.png"); - UIImageButton soundButton = new UIImageButton("textures/ui/ImgReShaSoundOn.png"); - UIImageButton closeButton = new UIImageButton("textures/ui/UI_Gcg_Icon_Close.png"); - 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); - - root.addActor(settingButton.getActor()); - root.addActor(exitImgButton.getActor()); - root.addActor(soundButton.getActor()); - root.addActor(closeButton.getActor()); - settingButton.onClick(() -> log.debug("Settings clicked")); - exitImgButton.onClick(() -> { - log.debug("Exit clicked"); - if (game.transition == null) { + initializeDefaultKeybinds(); + setupUI(); + } + + private void initializeDefaultKeybinds() { + keybinds.put("player1_left", Input.Keys.LEFT); + keybinds.put("player1_right", Input.Keys.RIGHT); + keybinds.put("player2_left", Input.Keys.A); + keybinds.put("player2_right", Input.Keys.D); + } + + private void setupUI() { + root.setFillParent(true); + root.clear(); + + BitmapFont font = Assets.getFont("ui", 24); + Label.LabelStyle labelStyle = new Label.LabelStyle(font, Color.WHITE); + + // 1. Create main panel + mainPanel = new Table(); + mainPanel.setSize(800, 600); + mainPanel.setPosition( + (Gdx.graphics.getWidth() - 800) / 2f, + (Gdx.graphics.getHeight() - 600) / 2f + ); + + // 2. Blurred rectangle background for rows + TextureRegionDrawable rowBgDrawable = new TextureRegionDrawable(Assets.getWhiteTexture()); + Color bgColor = new Color(0.2f, 0.2f, 0.2f, 0.3f); + Drawable tintedBg = rowBgDrawable.tint(bgColor); + + // 3. Add title "Settings" + Label titleLabel = new Label("Settings", new Label.LabelStyle(font, Color.WHITE)); + mainPanel.add(titleLabel).colspan(2).padTop(60).padBottom(40); + mainPanel.row(); + + // 4. Add volume sliders rows (WIP) + String[] volumeLabels = {"Master Volume", "Music Volume", "SFX Volume"}; + for (String volumeLabel : volumeLabels) { + Table volumeRow = new Table(); + volumeRow.setBackground(tintedBg); + + volumeRow.add(new Label(volumeLabel, labelStyle)).expandX().left().padLeft(40).padTop(15).padBottom(15); + volumeRow.add(new Label("[Slider Placeholder]", labelStyle)).right().padRight(40).padTop(15).padBottom(15); + + mainPanel.add(volumeRow).width(700).height(60).padBottom(5); + mainPanel.row(); + } + + // 5. Keybinds Section + Table keybindsSection = new Table(); + keybindsSection.setBackground(tintedBg); + + // Keybinds title + keybindsSection.add(new Label("Keybinds", labelStyle)).colspan(2).expandX().left().padLeft(40).padTop(15).padBottom(10); + keybindsSection.row(); + + // Normal keybinds + TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle(); + textButtonStyle.font = font; + textButtonStyle.fontColor = Color.BLACK; + TextureRegionDrawable keybindBgDrawable = new TextureRegionDrawable(Assets.getWhiteTexture()); + Color buttonColor = new Color(0.7f, 0.7f, 0.7f, 1.0f); + textButtonStyle.up = keybindBgDrawable.tint(buttonColor); + + // Editing keybinds + TextButton.TextButtonStyle editingButtonStyle = new TextButton.TextButtonStyle(); + editingButtonStyle.font = font; + editingButtonStyle.fontColor = Color.WHITE; + Color editingColor = new Color(0.3f, 0.3f, 0.8f, 1.0f); + editingButtonStyle.up = keybindBgDrawable.tint(editingColor); + + // Player 1 + keybindsSection.add(new Label(" Player 1", labelStyle)).colspan(2).left().padLeft(60).padBottom(8); + keybindsSection.row(); + + // Move Left + keybindsSection.add(new Label(" Move Left", labelStyle)).left().padLeft(80); + TextButton player1LeftButton = new TextButton(getKeyName(keybinds.get("player1_left")), textButtonStyle); + setupKeybindButton(player1LeftButton, "player1_left", textButtonStyle, editingButtonStyle); + keybindButtons.put("player1_left", player1LeftButton); + keybindsSection.add(player1LeftButton).width(150).right().padRight(40).padBottom(5); + keybindsSection.row(); + + // Move Right + keybindsSection.add(new Label(" Move Right", labelStyle)).left().padLeft(80); + TextButton player1RightButton = new TextButton(getKeyName(keybinds.get("player1_right")), textButtonStyle); + setupKeybindButton(player1RightButton, "player1_right", textButtonStyle, editingButtonStyle); + keybindButtons.put("player1_right", player1RightButton); + keybindsSection.add(player1RightButton).width(150).right().padRight(40).padBottom(10); + keybindsSection.row(); + + // Player 2 + keybindsSection.add(new Label(" Player 2", labelStyle)).colspan(2).left().padLeft(60).padTop(5).padBottom(8); + keybindsSection.row(); + + // Player 2 Move Left + keybindsSection.add(new Label(" Move Left", labelStyle)).left().padLeft(80); + TextButton player2LeftButton = new TextButton(getKeyName(keybinds.get("player2_left")), textButtonStyle); + setupKeybindButton(player2LeftButton, "player2_left", textButtonStyle, editingButtonStyle); + keybindButtons.put("player2_left", player2LeftButton); + keybindsSection.add(player2LeftButton).width(150).right().padRight(40).padBottom(5); + keybindsSection.row(); + + // Player 2 Move Right + keybindsSection.add(new Label(" Move Right", labelStyle)).left().padLeft(80); + TextButton player2RightButton = new TextButton(getKeyName(keybinds.get("player2_right")), textButtonStyle); + setupKeybindButton(player2RightButton, "player2_right", textButtonStyle, editingButtonStyle); + keybindButtons.put("player2_right", player2RightButton); + keybindsSection.add(player2RightButton).width(150).right().padRight(40).padBottom(15); + keybindsSection.row(); + + mainPanel.add(keybindsSection).width(700).padBottom(20); + mainPanel.row(); + + // Close button + UIImageButton backButton = new UIImageButton("textures/ui/UI_Gcg_Icon_Close.png"); + backButton.setSize(40, 40); + backButton.setPosition(Gdx.graphics.getWidth() - 80, Gdx.graphics.getHeight() - 80); + backButton.getActor().setName("backButton"); + backButton.onClick(() -> { + if (game.transition == null && !isEditingKeybind) { game.transition = new Transition(game, this, game.mainMenuScene, State.MAIN_MENU, 350); } }); - soundButton.onClick(() -> log.debug("Sound clicked")); - closeButton.onClick(() -> log.debug("Close clicked")); + root.addActor(mainPanel); + root.addActor(backButton.getActor()); game.stage.addActor(root); + + // Listener for key input when editing keybind + game.stage.addListener(new InputListener() { + @Override + public boolean keyDown(InputEvent event, int keycode) { + if (isEditingKeybind && currentEditingButton != null) { + // ESC not allowed, cancel editing + if (keycode == Input.Keys.ESCAPE) { + cancelKeybindEdit(); + return true; + } + + // Check if key is already used + if (isKeybindAlreadyUsed(keycode, currentKeybindAction)) { + //Error_msg + currentEditingButton.setText("Key in use!"); + // Delay + new Thread(() -> { + try { + Thread.sleep(1000); + Gdx.app.postRunnable(() -> { + if (isEditingKeybind && currentEditingButton != null) { + currentEditingButton.setText("Press Key..."); + } + }); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }).start(); + return true; + } + + // Update keybind + keybinds.put(currentKeybindAction, keycode); + currentEditingButton.setText(getKeyName(keycode)); + + finishKeybindEdit(); + return true; + } + return false; + } + }); + } + + private void setupKeybindButton(TextButton button, String action, TextButton.TextButtonStyle normalStyle, TextButton.TextButtonStyle editingStyle) { + button.addListener(new ClickListener() { + @Override + public void clicked(InputEvent event, float x, float y) { + if (!isEditingKeybind) { + startKeybindEdit(button, action, editingStyle); + } + } + }); + } + + private void startKeybindEdit(TextButton button, String action, TextButton.TextButtonStyle editingStyle) { + isEditingKeybind = true; + currentEditingButton = button; + currentKeybindAction = action; + + button.setStyle(editingStyle); + button.setText("Press Key..."); + } + + private void finishKeybindEdit() { + if (currentEditingButton != null) { + // Return to normal + TextButton.TextButtonStyle normalStyle = new TextButton.TextButtonStyle(); + BitmapFont font = Assets.getFont("ui", 24); + normalStyle.font = font; + normalStyle.fontColor = Color.BLACK; + TextureRegionDrawable keybindBgDrawable = new TextureRegionDrawable(Assets.getWhiteTexture()); + Color buttonColor = new Color(0.7f, 0.7f, 0.7f, 1.0f); + normalStyle.up = keybindBgDrawable.tint(buttonColor); + + currentEditingButton.setStyle(normalStyle); + } + + isEditingKeybind = false; + currentEditingButton = null; + currentKeybindAction = ""; + } + + private void cancelKeybindEdit() { + if (currentEditingButton != null) { + // Reset text + currentEditingButton.setText(getKeyName(keybinds.get(currentKeybindAction))); + } + finishKeybindEdit(); + } + + private String getKeyName(int keycode) { + switch (keycode) { + case Input.Keys.LEFT: + return "Left Arrow"; + case Input.Keys.RIGHT: + return "Right Arrow"; + case Input.Keys.UP: + return "Up Arrow"; + case Input.Keys.DOWN: + return "Down Arrow"; + case Input.Keys.SPACE: + return "Space_Bar"; + case Input.Keys.SHIFT_LEFT: + return "Left_Shift"; + case Input.Keys.SHIFT_RIGHT: + return "Right_Shift"; + case Input.Keys.CONTROL_LEFT: + return "Left_Ctrl"; + case Input.Keys.CONTROL_RIGHT: + return "Right_Ctrl"; + case Input.Keys.ALT_LEFT: + return "Left_Alt"; + case Input.Keys.ALT_RIGHT: + return "Right_Alt"; + default: + String keyName = Input.Keys.toString(keycode); + return keyName != null ? keyName.toUpperCase() : "Unknown"; + } + } + + private boolean isKeybindAlreadyUsed(int keycode, String currentAction) { + for (java.util.Map.Entry entry : keybinds.entrySet()) { + if (!entry.getKey().equals(currentAction) && entry.getValue().equals(keycode)) { + return true; + } + } + return false; } @Override public void render(SpriteBatch batch) { + if (game.mainMenuScene != null) { + game.mainMenuScene.render(batch); + } + batch.setColor(0, 0, 0, 0.8f); batch.draw(Assets.getWhiteTexture(), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + batch.setColor(Color.WHITE); } } diff --git a/app/src/main/resources/textures/ui/arrow-button-left.png b/app/src/main/resources/textures/ui/arrow-button-left.png new file mode 100644 index 0000000000000000000000000000000000000000..0138044f8eba05389907b6a7f525556a40a5919d GIT binary patch literal 20417 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­T^%WX(SdgM_C`;bhR^ z?yhzceik?>!CZ~A-<9AnhMK+VGK@R_VsLh5HuJRcg^U#+m>KGLialjBx+BrFGdB+W z4befLjp*tM)jpJ*9y06!r39v_6J(lS@nB`cpd!_S7;^MY(V=(Hy&HvC6!{vJ3Q z%U{EI+Ev2qQuhJ0qBztQjyaKQemXvJx7W6dCK0-<4G~};%AV=95#(CubuDPM7Ijz> zJ*R+OCCtCZhT5gE`&qd76@eLIgq}_lJYK0rf|=eG(JVNGS6=Gu9{O@SkOG81e|kk2 z|2HO1?-cvCXIwI_iHc`3edLN_EFSw4> z=Yh;AQQy#(ub_E5UW_(=%sdS$I?M!@P{lKK2{%8xK=-tt*liwtp91*{jpL*OosgSN z`ezf_6m+>n{~~IU`SU|P!eTyo^{*d@5w*)gBv+Jy{S9(w6yirVd!E0zwKxXyfU?Oh z+(j_?cx%yd;wla|{L=ad;rey?AEv(^f=NFa9>d@eRnFS0xZjST_y$S?N7@Ua%O7@> z$fbiErubn2uj^wVm>AN&=lA24sGJ5r|3@u-;$53)%p9r@6a>P?bvxtu0_H_hxQ7faP+#_n_T2J+lhrDmjqMNe zM3MVu*mE4Gy00WQu29X&oyx5xPk;La&D6*8KG!}m{P-ogiC&vQzsNz=;C#s8z>y=z z`Z!?P6>8n$%`e95Z&&$`du8=@d#tQgyH_ub*OsA_uj5oeMsFapi~-D*(8&BaT}8ep zzz^$`-3`+6Iq$q&ru0r;Q8~1tSc#9kv;_JoXno=3u0@3fEcI^0Fd|I>y{+0*Uyx%M2 zkeKkX=ABMZLvFWKqd~t3$NBFM5A0*JE19j7t^oD7e=Q$fHmzFJwGa{6Zy0PFS%#j; z#Bxd*CVqI_5Fh8$9(jC<*IGprp{ho^s@|V}9y20LrbsyZ5HR+G&YUVr{3wo`m;N1F$O`p;D-u z5rC7Z$aRiv6ut@F{OBPrm3KYoA^eehxJ#u`7H*eVaDs2Q0wVVGPU;!V@+gX=7#D zyI1+}6N_r#o^ntv3+x3r2%IlI7t{FgsfGzBOja@W5TXZ*wbYPz37e;W&^p4|M?AX4XK z%ZscRDKb2az>z7_^E-@>-L_tSZl3Ly2W}om8XSy)Ny8*qI=fQwfbztJvW}k0M{Y30 ziGFC3F#NA`0CL)f4d}>^{NFdEwSebG1njIn@i!OwxQ*3JH{|rVJhY7c9v@uy;mI4F zcNgC;(s9}fOdJl}A2)7EXVMY7y|=gfzyg&*L*Q(}O)ri$Ya0?mk|)g<*kd*qnBQCP zf7_b7bz>_q>23SEOr)+>LC|Wmx53VC3*G|F4-rYhQTzL>UW?cI{ehiW@nrw|4ut{@u4NIi+0cl|BythMXl^v4}aM!~` z(?Y?=HO7;tC`^i(|EXkE3+G7y4_xM zajEV!j&H{2%(#UL^)y#hUfieS4?HV~)jGSdu&wE!F|bb{skEtfrp~0M27XX6utC$q zQZ_b9)Pi5Gy_H9YySN69adgmj|?6sS|N!r9+7fxd_^#EpY$FpuL z&kC-vKUQHl>os@Kf^ebtqLYN?q_E`6t~tB^A7`y!m|MZL#8CC~*3Cb6TAmW@4ZSYL z=nky#vw<5?H;AdqFgNycZvd`lb~%-x<6)z=M0hzgycaxJ0kf8gFara2h~77l`|g|ye* zxw|2Zo5fjW#)PJ;w|<^#p4hTMS8>f$`{#EyTJl?b{cpWPXVsj-NHx7?$Lgo=Dr9$d z*m}FRXYBg-|M4@+UvDKtQdTgqF*r;2Zvu6b9S-CG6G_^4`K#a#dc#6su<+#CoC3DY zfxW2Bz&M?8w?2d)JOI)LYbP0l+XkKg`bJ= literal 0 HcmV?d00001 diff --git a/app/src/main/resources/textures/ui/arrow-button-right.png b/app/src/main/resources/textures/ui/arrow-button-right.png new file mode 100644 index 0000000000000000000000000000000000000000..285d128108d1392fd2af5314dda744717f5daf4f GIT binary patch literal 15423 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 literal 0 HcmV?d00001