chore(ui/slider): refactor

This commit is contained in:
2025-10-03 07:35:26 +07:00
parent dc4abdd578
commit 88dbbb4be7
2 changed files with 98 additions and 33 deletions

View File

@ -5,11 +5,9 @@ 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;
@ -20,12 +18,10 @@ 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 org.vibecoders.moongazer.ui.UISlider;
import java.util.HashMap;
import static com.badlogic.gdx.scenes.scene2d.ui.Slider.*;
import static org.vibecoders.moongazer.Constants.*;
public class SettingsScene extends Scene {
@ -33,7 +29,9 @@ public class SettingsScene extends Scene {
private UITextButton currentEditingButton = null;
private String currentKeybindAction = "";
private HashMap<String, UITextButton> keybindButtons = new HashMap<>();
private Slider musicSlider;
private UISlider masterVolSlider;
private UISlider musicSlider;
private UISlider sfxSlider;
public SettingsScene(Game game) {
super(game);
@ -52,30 +50,35 @@ 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));
String[] volumes = { "Master Volume", "Music Volume", "SFX Volume" };
// TODO: implement audio manager
for (String volume : volumes) {
Table row = new Table();
row.setBackground(tintedBg);
row.add(new Label(volume, labelStyle)).expandX().left().padLeft(40).pad(15);
musicSlider = new Slider(0f, 1f, 0.01f, false, sliderStyle);
musicSlider.setValue(0.5f);
row.add(musicSlider).width(300).right().padRight(40);
if (volume.equals("Master Volume")) {
masterVolSlider = new UISlider();
masterVolSlider.onChanged(() -> {
Settings.setMasterVolume(masterVolSlider.getValue());
});
row.add(masterVolSlider.slider).width(300).right().padRight(40);
} else if (volume.equals("Music Volume")) {
musicSlider = new UISlider();
musicSlider.onChanged(() -> {
Settings.setMusicVolume(musicSlider.getValue());
});
row.add(musicSlider.slider).width(300).right().padRight(40);
} else if (volume.equals("SFX Volume")) {
sfxSlider = new UISlider();
sfxSlider.onChanged(() -> {
Settings.setSfxVolume(sfxSlider.getValue());
});
row.add(sfxSlider.slider).width(300).right().padRight(40);
}
mainPanel.add(row).width(700).height(60).padBottom(5);
mainPanel.row();
}
@ -143,7 +146,8 @@ public class SettingsScene extends Scene {
if (isEditingKeybind && currentEditingButton != null) {
if (keycode == Input.Keys.ESCAPE) {
if (currentEditingButton != null) {
((TextButton)(currentEditingButton.button)).setText(getKeyName(Settings.getKeybind(currentKeybindAction)));
((TextButton) (currentEditingButton.button))
.setText(getKeyName(Settings.getKeybind(currentKeybindAction)));
}
isEditingKeybind = false;
currentEditingButton = null;

View File

@ -0,0 +1,61 @@
package org.vibecoders.moongazer.ui;
import org.vibecoders.moongazer.managers.Assets;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.EventListener;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
import com.badlogic.gdx.scenes.scene2d.ui.Slider.SliderStyle;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
public class UISlider {
public Slider slider;
public UISlider() {
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));
slider = new Slider(0f, 1f, 0.01f, false, sliderStyle);
slider.setValue(1f);
slider.setProgrammaticChangeEvents(true);
}
public void setValue(float value) {
slider.setValue(value);
}
public float getValue() {
return slider.getValue();
}
public void setSize(float width, float height) {
slider.setSize(width, height);
}
public void setPosition(float x, float y) {
slider.setPosition(x, y);
}
public void addListener(EventListener listener) {
slider.addListener(listener);
}
public void onChanged(Runnable action) {
slider.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
action.run();
}
});
}
}