From f36fbb9c1ea49c687f84159e4c4f75302d22e986 Mon Sep 17 00:00:00 2001 From: GiaQuang Date: Tue, 30 Sep 2025 16:19:43 +0700 Subject: [PATCH] feat: add button --- .../moongazer/buttons/BaseButton.java | 24 ++++++++++ .../moongazer/buttons/MenuButton.java | 46 +++++++++++++++++++ .../vibecoders/moongazer/scenes/MainMenu.java | 8 +++- gradlew | 0 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/vibecoders/moongazer/buttons/BaseButton.java create mode 100644 app/src/main/java/org/vibecoders/moongazer/buttons/MenuButton.java mode change 100644 => 100755 gradlew diff --git a/app/src/main/java/org/vibecoders/moongazer/buttons/BaseButton.java b/app/src/main/java/org/vibecoders/moongazer/buttons/BaseButton.java new file mode 100644 index 0000000..afa829a --- /dev/null +++ b/app/src/main/java/org/vibecoders/moongazer/buttons/BaseButton.java @@ -0,0 +1,24 @@ +package org.vibecoders.moongazer.buttons; + +import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.EventListener; + +public abstract class BaseButton { + protected Actor actor; + + public Actor getActor() { + return actor; + } + + public void setPosition(int x, int y) { + actor.setPosition(x, y); + } + + public void setSize(int width, int height) { + actor.setSize(width, height); + } + + public void eventListener(EventListener eventListener) { + actor.addListener(eventListener); + } +} diff --git a/app/src/main/java/org/vibecoders/moongazer/buttons/MenuButton.java b/app/src/main/java/org/vibecoders/moongazer/buttons/MenuButton.java new file mode 100644 index 0000000..b454a69 --- /dev/null +++ b/app/src/main/java/org/vibecoders/moongazer/buttons/MenuButton.java @@ -0,0 +1,46 @@ +package org.vibecoders.moongazer.buttons; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; + +public class MenuButton extends BaseButton { + private TextButton textButton; + + public MenuButton(String text, BitmapFont font) { + this(text, font, Color.WHITE, Color.YELLOW); + } + + public MenuButton(String text, BitmapFont font, Color normalColor, Color hoverColor) { + + TextButton.TextButtonStyle style = new TextButton.TextButtonStyle(); + style.font = font; + style.fontColor = normalColor; + style.overFontColor = hoverColor; + style.downFontColor = hoverColor; + + // Transparent backgrounds + style.up = null; + style.down = null; + style.over = null; + style.checked = null; + + textButton = new TextButton(text, style); + + // Add the text button as an actor to this button + this.actor = textButton; + } + + public TextButton getTextButton() { + return textButton; + } + + public void setText(String text) { + textButton.setText(text); + } + + public String getText() { + return textButton.getText().toString(); + } +} \ No newline at end of file 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 66ce7e3..65cd246 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java @@ -2,6 +2,9 @@ package org.vibecoders.moongazer.scenes; import static org.vibecoders.moongazer.Constants.*; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import org.vibecoders.moongazer.buttons.MenuButton; import org.vibecoders.moongazer.managers.Assets; import org.vibecoders.moongazer.Game; @@ -22,6 +25,9 @@ public class MainMenu extends Scene { textLabel = new Label("Moongazer", new LabelStyle(font, Color.BLACK)); textLabel.setPosition(WINDOW_WIDTH / 2f - textLabel.getWidth() / 2f, WINDOW_HEIGHT / 2f - textLabel.getHeight() / 2f); game.root.addActor(textLabel); + MenuButton startButton = new MenuButton("Start", font); + startButton.getActor().setPosition(WINDOW_WIDTH / 2f, WINDOW_HEIGHT / 2f); + game.root.addActor(startButton.getActor()); } /** * Renders the main menu scene. @@ -29,7 +35,7 @@ public class MainMenu extends Scene { */ @Override public void render(SpriteBatch batch) { - batch.draw(TEXTURE_WHITE, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + batch.draw(TEXTURE_BLACK, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); // Unneeded as using Scene2D Stage to render the label // textLabel.draw(batch, 1.0f); } diff --git a/gradlew b/gradlew old mode 100644 new mode 100755