Added functionality for preferences in 'GameMusic'

This commit is contained in:
Cedric Beck
2024-10-05 11:28:15 +02:00
parent 1d114c8d24
commit 8275778d66
5 changed files with 29 additions and 88 deletions

View File

@@ -275,10 +275,9 @@ private void setupStates() {
*/
private void attachGameMusic() {
//TODO: start volume
final GameMusic gameMusic = new GameMusic(0.5f);
final GameMusic gameMusic = new GameMusic();
logic.addListener(gameMusic);
gameMusic.setEnabled(true);
// gameMusic.setEnabled(GameSound.enabledInPreferences());
gameMusic.setEnabled(GameMusic.enabledInPreferences());
stateManager.attach(gameMusic);
}

View File

@@ -11,22 +11,36 @@
import java.lang.System.Logger;
import java.lang.System.Logger.Level;
import java.util.prefs.Preferences;
import static pp.util.PreferencesUtils.getPreferences;
public class GameMusic extends AbstractAppState implements GameEventListener {
private static final Logger LOGGER = System.getLogger(GameMusic.class.getName());
private AudioNode backgroundMusic;
private float startVolume;
private static final Preferences PREFERENCES = getPreferences(GameMusic.class);
private static final String ENABLED_PREF = "enabled";
private static final String VOLUME_PREF = "volume";
public GameMusic(float startVolume){
this. startVolume = startVolume;
private static final String MUSIC_PATH = "Sound/background.wav";
private AudioNode backgroundMusic;
public static boolean enabledInPreferences(){
return PREFERENCES.getBoolean(ENABLED_PREF, true);
}
public static float volumeInPreferences(){
return PREFERENCES.getFloat(VOLUME_PREF, 0.5f);
}
@Override
public void initialize(AppStateManager stateManager, Application app) {
super.initialize(stateManager, app);
backgroundMusic = loadSound(app, "Sound/background.wav");
setMusicVolume(startVolume);
playMusic();
backgroundMusic = loadSound(app, MUSIC_PATH);
setMusicVolume(volumeInPreferences());
if (isEnabled()) playMusic();
}
private AudioNode loadSound(Application app, String name) {
@@ -51,6 +65,7 @@ else if(!enabled && isEnabled()){
stopMusic();
}
super.setEnabled(enabled);
PREFERENCES.putBoolean(ENABLED_PREF, enabled);
}
public void playMusic(){
@@ -71,6 +86,7 @@ public void stopMusic(){
public void setMusicVolume(float volume){
if(backgroundMusic != null){
backgroundMusic.setVolume(volume);
PREFERENCES.putFloat(VOLUME_PREF, volume);
}
}
}

View File

@@ -45,7 +45,7 @@ class Menu extends Dialog {
public Menu(BattleshipApp app) {
super(app.getDialogManager());
this.app = app;
volumeSlider = new VolumeSlider(0.5f, app.getStateManager().getState(GameMusic.class));
volumeSlider = new VolumeSlider(app.getStateManager().getState(GameMusic.class));
addChild(new Label(lookup("battleship.name"), new ElementId("header"))); //NON-NLS
addChild(new Checkbox(lookup("menu.sound-enabled"),

View File

@@ -1,71 +0,0 @@
package pp.battleship.client;
import com.simsilica.lemur.RangedValueModel;
import com.simsilica.lemur.core.VersionedReference;
public class SliderRangedValueModel implements RangedValueModel {
SliderRangedValueModel(){
}
@Override
public void setValue( double val ){
System.out.println(val);
}
@Override
public double getValue(){
return 0;
}
@Override
public void setPercent( double val ){
System.out.println(val);
}
@Override
public double getPercent(){
return 0;
}
@Override
public void setMaximum( double max ){
}
@Override
public double getMaximum(){
return 0;
}
@Override
public void setMinimum( double min ){
}
@Override
public double getMinimum(){
return 0;
}
@Override
public long getVersion() {
return 0;
}
@Override
public Double getObject() {
return 0.0;
}
@Override
public VersionedReference<Double> createReference() {
return null;
}
}

View File

@@ -6,18 +6,15 @@ public class VolumeSlider extends Slider {
private GameMusic gameMusic;
private float volume;
public VolumeSlider(float startVolume, GameMusic gameMusic){
public VolumeSlider(GameMusic gameMusic){
super();
getModel().setPercent(startVolume);
this.gameMusic = gameMusic;
this.volume = (float) getModel().getPercent();
gameMusic.setMusicVolume(volume);
System.out.println("init");
volume = GameMusic.volumeInPreferences();
getModel().setPercent(volume);
}
public void update(){
if(getModel().getPercent() != volume){
System.out.println(volume);
this.volume = (float) getModel().getPercent();
gameMusic.setMusicVolume(volume);
}