From 9a7f75b76b0403519fda95bb711bcd0f61786cc0 Mon Sep 17 00:00:00 2001 From: Yvonne Schmidt Date: Mon, 25 Nov 2024 00:24:25 +0100 Subject: [PATCH] added effect sound slider --- .../Interface/Lemur/pp-styles.groovy | 15 ++++++--- .../java/pp/monopoly/client/GameMusic.java | 2 +- .../java/pp/monopoly/client/GameSound.java | 31 +++++++++++++++++- .../pp/monopoly/client/gui/SettingsMenu.java | 20 ++++++++---- .../pp/monopoly/client/gui/SoundSlider.java | 32 +++++++++++++++++++ 5 files changed, 87 insertions(+), 13 deletions(-) create mode 100644 Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java diff --git a/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy b/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy index 7bac65e..398fdf1 100644 --- a/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy +++ b/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy @@ -21,9 +21,11 @@ def sliderColor = color(0.6, 0.8, 0.8, 1) def sliderBgColor = color(0.5, 0.75, 0.75, 1) def gradientColor = color(0.5, 0.75, 0.85, 0.5) def tabbuttonEnabledColor = color(0.4, 0.45, 0.5, 1) -def solidWhiteBackground = new QuadBackgroundComponent(color(1, 1, 1, 1)) // Solid white -def greyBackground = color(0.8, 0.8, 0.8, 1) // Grey background color -def redBorderColor = color(1, 0, 0, 1) // Red border color +def solidWhiteBackground = new QuadBackgroundComponent(new ColorRGBA(1, 1, 1, 1)) +def greyBackground = new QuadBackgroundComponent(new ColorRGBA(0.1f, 0.1f, 0.1f, 1.0f)); +def lightGreyBackground = new QuadBackgroundComponent(new ColorRGBA(0.4f, 0.4f, 0.4f, 1.0f)); +def lightGrey = color(0.6, 0.6, 0.6, 1.0) + @@ -246,7 +248,12 @@ selector("tab.button", "pp") { buttonCommands = stdButtonCommands } selector("settings-title", "pp") { - fontSize = 48 // Set font size + def outerBackground = new QuadBackgroundComponent(color(1, 0.5, 0, 1)) // Grey inner border + def innerBackground = new QuadBackgroundComponent(buttonBgColor) // White outer border background + + background = outerBackground + fontSize = 40 + insets = new Insets3f(3, 3, 3, 3) textHAlignment = HAlignment.Center textVAlignment = VAlignment.Center } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java index 791b604..1e6f94e 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java @@ -34,7 +34,7 @@ public class GameMusic extends AbstractAppState{ return PREFERENCES.getBoolean(ENABLED_PREF, true); } - /** + /** * Checks if sound is enabled in the preferences. * * @return float to which the volume is set diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java index f2bb02a..a5b97eb 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java @@ -30,6 +30,7 @@ public class GameSound extends AbstractAppState implements GameEventListener { private static final Logger LOGGER = System.getLogger(GameSound.class.getName()); private static final Preferences PREFERENCES = getPreferences(GameSound.class); private static final String ENABLED_PREF = "enabled"; //NON-NLS + private static final String VOLUME_PREF = "volume"; //NON-NLS private AudioNode passStartSound; private AudioNode eventCardSound; @@ -59,6 +60,15 @@ public class GameSound extends AbstractAppState implements GameEventListener { setEnabled(!isEnabled()); } + /** + * Checks if sound is enabled in the preferences. + * + * @return float to which the volume is set + */ + public static float volumeInPreferences() { + return PREFERENCES.getFloat(VOLUME_PREF, 0.5f); + } + /** * Sets the enabled state of this AppState. * Overrides {@link com.jme3.app.state.AbstractAppState#setEnabled(boolean)} @@ -92,7 +102,7 @@ public class GameSound extends AbstractAppState implements GameEventListener { tradeAcceptedSound = loadSound(app, "Sound/Effects/tradeAccepted.ogg"); tradeRejectedSound = loadSound(app, "Sound/Effects/tradeRejected.ogg"); winnerSound = loadSound(app, "Sound/Effects/winner.ogg"); - looserSound = loadSound(app, "Sound/Effects/looser.ogg"); + looserSound = loadSound(app, "Sound/Effects/loser.ogg"); buttonSound = loadSound(app, "Sound/Effects/button.ogg"); } @@ -193,6 +203,25 @@ public class GameSound extends AbstractAppState implements GameEventListener { if (isEnabled() && buttonSound != null) buttonSound.playInstance(); } + /** + * Sets the volume of the sounds + * @param vol the volume to which the sounds should be set + */ + public void setVolume(float vol){ + passStartSound.setVolume(vol); + eventCardSound.setVolume(vol); + gulagSound.setVolume(vol); + diceRollSound.setVolume(vol); + moneyCollectSound.setVolume(vol); + moneyLostSound.setVolume(vol); + tradeAcceptedSound.setVolume(vol); + tradeRejectedSound.setVolume(vol); + winnerSound.setVolume(vol); + looserSound.setVolume(vol); + buttonSound.setVolume(vol); + + PREFERENCES.putFloat(VOLUME_PREF, vol); + } @Override public void receivedEvent(SoundEvent event) { diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java index 82f7ab6..e847b5b 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java @@ -31,7 +31,8 @@ public class SettingsMenu extends Dialog { private static final Preferences PREFERENCES = getPreferences(SettingsMenu.class); private static final String LAST_PATH = "last.file.path"; private final MonopolyApp app; - private final VolumeSlider slider; + private final VolumeSlider musicSlider; + private final SoundSlider soundSlider; /** * Constructs the Menu dialog for the Battleship application. @@ -41,18 +42,22 @@ public class SettingsMenu extends Dialog { public SettingsMenu(MonopolyApp app) { super(app.getDialogManager()); this.app = app; - slider = new VolumeSlider(app.getStateManager().getState(GameMusic.class)); - addChild(new Label("Einstellungen", new ElementId("header"))); //NON-NLS + musicSlider = new VolumeSlider(app.getStateManager().getState(GameMusic.class)); + soundSlider = new SoundSlider(app.getStateManager().getState(GameSound.class)); + addChild(new Label("Einstellungen", new ElementId("settings-title"))); //NON-NLS addChild(new Label("Sound Effekte", new ElementId("label"))); //NON-NLS + + addChild(soundSlider); + addChild(new Checkbox("Soundeffekte an / aus", new StateCheckboxModel(app, GameSound.class))); addChild(new Label("Hintergrund Musik", new ElementId("label"))); //NON-NLS addChild(new Checkbox("Musik an / aus", new StateCheckboxModel(app, GameMusic.class))); - addChild(slider); + addChild(musicSlider); - addChild(new Button("Zurück zum Spiel")).addClickCommands(s -> ifTopDialog(this::close)); - addChild(new Button("Beenden")).addClickCommands(s -> ifTopDialog(app::closeApp)); + addChild(new Button("Zurück zum Spiel", new ElementId("button"))).addClickCommands(s -> ifTopDialog(this::close)); + addChild(new Button("Beenden", new ElementId("button"))).addClickCommands(s -> ifTopDialog(app::closeApp)); update(); } @@ -66,7 +71,8 @@ public class SettingsMenu extends Dialog { @Override public void update(float delta) { - slider.update(); + musicSlider.update(); + soundSlider.update(); } /** diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java new file mode 100644 index 0000000..143f40b --- /dev/null +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java @@ -0,0 +1,32 @@ +package pp.monopoly.client.gui; + +import com.simsilica.lemur.Slider; +import pp.monopoly.client.GameMusic; +import pp.monopoly.client.GameSound; + +public class SoundSlider extends Slider { + + private final pp.monopoly.client.GameSound sound; + private double vol; + + /** + * Constructs the Volume Slider for the Menu dialog + * @param sound the Effects sound instance + */ + public SoundSlider(GameSound sound) { + super(); + this.sound = sound; + vol = GameSound.volumeInPreferences(); + getModel().setPercent(vol); + } + + /** + * when triggered it updates the volume to the value set with the slider + */ + public void update() { + if (vol != getModel().getPercent()) { + vol = getModel().getPercent(); + sound.setVolume( (float) vol); + } + } +}