diff --git a/src/itdelatrisu/opsu/audio/MusicController.java b/src/itdelatrisu/opsu/audio/MusicController.java index cfe3bb60..2bd2dcce 100644 --- a/src/itdelatrisu/opsu/audio/MusicController.java +++ b/src/itdelatrisu/opsu/audio/MusicController.java @@ -257,6 +257,14 @@ public class MusicController { return (trackExists() && player.setPosition(position / 1000f)); } + /** + * Sets the music volume. + * @param volume [0, 1] + */ + public static void setVolume(float volume) { + SoundStore.get().setMusicVolume(volume); + } + /** * Plays the theme song. */ diff --git a/src/itdelatrisu/opsu/states/MainMenu.java b/src/itdelatrisu/opsu/states/MainMenu.java index 0ea2aa95..2da0d4b6 100644 --- a/src/itdelatrisu/opsu/states/MainMenu.java +++ b/src/itdelatrisu/opsu/states/MainMenu.java @@ -102,6 +102,11 @@ public class MainMenu extends BasicGameState { */ private float bgAlpha = 0f; + /** + * Whether the theme song volume has been dimmed. + */ + private boolean volumeDimmed = false; + // game-related variables private GameContainer container; private StateBasedGame game; @@ -249,6 +254,18 @@ public class MainMenu extends BasicGameState { musicNext.hoverUpdate(delta, mouseX, mouseY); musicPrevious.hoverUpdate(delta, mouseX, mouseY); + // window focus change: increase/decrease theme song volume + if (MusicController.isThemePlaying()) { + boolean hasFocus = container.hasFocus(); + if (volumeDimmed == hasFocus) { + if (hasFocus) // restored focus + MusicController.setVolume(Options.getMusicVolume()); + else // lost focus + MusicController.setVolume(Options.getMusicVolume() / 3f); + volumeDimmed = !hasFocus; + } + } + // fade in background if (bgAlpha < 0.9f) { bgAlpha += delta / 1000f;