Moved track volume dimming into MusicController.

- Fixes an issue where the first few milliseconds of the theme song would always play at full volume, even if container is not focused.
- Allows easier application to any song.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
Jeffrey Han 2015-01-16 16:02:02 -05:00
parent 31a97fbc5d
commit f5df00255f
2 changed files with 23 additions and 15 deletions

View File

@ -71,6 +71,11 @@ public class MusicController {
*/ */
private static float pauseTime = 0f; private static float pauseTime = 0f;
/**
* Whether the current track volume is dimmed.
*/
private static boolean trackDimmed = false;
// This class should not be instantiated. // This class should not be instantiated.
private MusicController() {} private MusicController() {}
@ -148,6 +153,7 @@ public class MusicController {
else else
player.play(); player.play();
pauseTime = 0f; pauseTime = 0f;
trackDimmed = false;
} }
} }
@ -302,6 +308,20 @@ public class MusicController {
return (themePlaying && trackExists()); return (themePlaying && trackExists());
} }
/**
* Returns whether or not the volume of the current track, if any,
* has been dimmed.
*/
public static boolean isTrackDimmed() { return trackDimmed; }
/**
* Toggles the volume dim state of the current track.
*/
public static void toggleTrackDimmed() {
setVolume((trackDimmed) ? Options.getMusicVolume() : Options.getMusicVolume() / 3f);
trackDimmed = !trackDimmed;
}
/** /**
* Stops and releases all sources, clears each of the specified Audio * Stops and releases all sources, clears each of the specified Audio
* buffers, destroys the OpenAL context, and resets SoundStore for future use. * buffers, destroys the OpenAL context, and resets SoundStore for future use.

View File

@ -106,11 +106,6 @@ public class MainMenu extends BasicGameState {
*/ */
private float bgAlpha = 0f; private float bgAlpha = 0f;
/**
* Whether the theme song volume has been dimmed.
*/
private boolean volumeDimmed = false;
// game-related variables // game-related variables
private GameContainer container; private GameContainer container;
private StateBasedGame game; private StateBasedGame game;
@ -259,16 +254,9 @@ public class MainMenu extends BasicGameState {
repoButton.hoverUpdate(delta, mouseX, mouseY); repoButton.hoverUpdate(delta, mouseX, mouseY);
// window focus change: increase/decrease theme song volume // window focus change: increase/decrease theme song volume
if (MusicController.isThemePlaying()) { if (MusicController.isThemePlaying() &&
boolean hasFocus = container.hasFocus(); MusicController.isTrackDimmed() == container.hasFocus())
if (volumeDimmed == hasFocus) { MusicController.toggleTrackDimmed();
if (hasFocus) // restored focus
MusicController.setVolume(Options.getMusicVolume());
else // lost focus
MusicController.setVolume(Options.getMusicVolume() / 3f);
volumeDimmed = !hasFocus;
}
}
// fade in background // fade in background
if (bgAlpha < 0.9f) { if (bgAlpha < 0.9f) {