From dc4abdd5786fdf419eef2b979137ea336709078a Mon Sep 17 00:00:00 2001 From: GiaQuang Date: Thu, 2 Oct 2025 23:27:30 +0700 Subject: [PATCH] feat: add music slider --- .../vibecoders/moongazer/managers/Assets.java | 3 +++ .../moongazer/scenes/SettingsScene.java | 22 +++++++++++++++++- .../textures/ui/UI_Scrollbar_Arrow.png | Bin 0 -> 706 bytes .../textures/ui/UI_Scrollbar_Handle.png | Bin 0 -> 209 bytes .../resources/textures/ui/UI_SliderBg.png | Bin 0 -> 1282 bytes .../resources/textures/ui/UI_SliderBg2.png | Bin 0 -> 839 bytes .../resources/textures/ui/UI_SliderKnob.png | Bin 0 -> 1034 bytes 7 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 app/src/main/resources/textures/ui/UI_Scrollbar_Arrow.png create mode 100644 app/src/main/resources/textures/ui/UI_Scrollbar_Handle.png create mode 100644 app/src/main/resources/textures/ui/UI_SliderBg.png create mode 100644 app/src/main/resources/textures/ui/UI_SliderBg2.png create mode 100644 app/src/main/resources/textures/ui/UI_SliderKnob.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 5f24b37..24dd74e 100644 --- a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java @@ -123,6 +123,9 @@ public class Assets { assetManager.load("textures/ui/close.png", Texture.class); assetManager.load("textures/ui/close_hover.png", Texture.class); assetManager.load("textures/ui/close_clicked.png", Texture.class); + assetManager.load("textures/ui/UI_SliderKnob.png", Texture.class); + assetManager.load("textures/ui/UI_SliderBg.png", Texture.class); + assetManager.load("textures/ui/UI_SliderBg2.png", Texture.class); // "Load" unsupported file types as FileHandle loadingThread = new Thread(() -> { loadAny("videos/main_menu_background.webm"); diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java b/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java index 9564d9e..b34967d 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java @@ -5,9 +5,11 @@ 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.graphics.g2d.TextureRegion; 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.Slider; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; @@ -18,9 +20,12 @@ import org.vibecoders.moongazer.Settings; import org.vibecoders.moongazer.managers.Assets; import org.vibecoders.moongazer.ui.UICloseButton; import org.vibecoders.moongazer.ui.UITextButton; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.scenes.scene2d.ui.Slider.SliderStyle; import java.util.HashMap; +import static com.badlogic.gdx.scenes.scene2d.ui.Slider.*; import static org.vibecoders.moongazer.Constants.*; public class SettingsScene extends Scene { @@ -28,6 +33,7 @@ public class SettingsScene extends Scene { private UITextButton currentEditingButton = null; private String currentKeybindAction = ""; private HashMap keybindButtons = new HashMap<>(); + private Slider musicSlider; public SettingsScene(Game game) { super(game); @@ -46,6 +52,18 @@ public class SettingsScene extends Scene { mainPanel.add(title).colspan(2).padTop(60).padBottom(40); mainPanel.row(); + + // slider placeholders + Texture sliderBgTexture = Assets.getAsset("textures/ui/UI_SliderBg2.png", Texture.class); + Texture sliderKnobTexture = Assets.getAsset("textures/ui/UI_SliderKnob.png", Texture.class); + Texture sliderKnobOverTexture = Assets.getAsset("textures/ui/UI_SliderBg.png", Texture.class); + + SliderStyle sliderStyle = new SliderStyle(); + sliderStyle.background = new TextureRegionDrawable(new TextureRegion(sliderBgTexture)); + sliderStyle.knob = new TextureRegionDrawable(new TextureRegion(sliderKnobTexture)); + sliderStyle.knobBefore = new TextureRegionDrawable(new TextureRegion(sliderKnobOverTexture)); + sliderStyle.knobAfter = new TextureRegionDrawable(new TextureRegion(sliderBgTexture)); + // Volume settings TextureRegionDrawable bg = new TextureRegionDrawable(Assets.getWhiteTexture()); var tintedBg = bg.tint(new Color(0.2f, 0.2f, 0.2f, 0.3f)); @@ -55,7 +73,9 @@ public class SettingsScene extends Scene { Table row = new Table(); row.setBackground(tintedBg); row.add(new Label(volume, labelStyle)).expandX().left().padLeft(40).pad(15); - row.add(new Label("[Slider Placeholder]", labelStyle)).right().padRight(40); + musicSlider = new Slider(0f, 1f, 0.01f, false, sliderStyle); + musicSlider.setValue(0.5f); + row.add(musicSlider).width(300).right().padRight(40); mainPanel.add(row).width(700).height(60).padBottom(5); mainPanel.row(); } diff --git a/app/src/main/resources/textures/ui/UI_Scrollbar_Arrow.png b/app/src/main/resources/textures/ui/UI_Scrollbar_Arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2b4b3d2d2c46a840b54129620599154507aa27 GIT binary patch literal 706 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 Ef-{WSng9R* literal 0 HcmV?d00001