Implemented volume-bg and master volume setting.
- All sounds are now multiplied by a master volume setting. - Changed all default volume levels. - Scrolling in the main menu and game states changes the master volume and displays a volume bar on the right side of the screen. - "volume-bg.png" image by @kouyang. Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
@@ -421,6 +421,7 @@ public class Game extends BasicGameState {
|
||||
cursorCirclePulse.drawCentered(pausedMouseX, pausedMouseY);
|
||||
}
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -429,6 +430,7 @@ public class Game extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
|
||||
skipButton.hoverUpdate(delta, mouseX, mouseY);
|
||||
|
||||
@@ -707,6 +709,11 @@ public class Game extends BasicGameState {
|
||||
hitObjects[objectIndex].mousePressed(x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(int newValue) {
|
||||
Utils.changeVolume((newValue < 0) ? -1 : 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enter(GameContainer container, StateBasedGame game)
|
||||
throws SlickException {
|
||||
|
||||
@@ -104,6 +104,7 @@ public class GamePauseMenu extends BasicGameState {
|
||||
retryButton.draw();
|
||||
backButton.draw();
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -112,6 +113,7 @@ public class GamePauseMenu extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
|
||||
continueButton.hoverUpdate(delta, mouseX, mouseY);
|
||||
retryButton.hoverUpdate(delta, mouseX, mouseY);
|
||||
|
||||
@@ -129,6 +129,7 @@ public class GameRanking extends BasicGameState {
|
||||
exitButton.draw();
|
||||
Utils.getBackButton().draw();
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -137,6 +138,7 @@ public class GameRanking extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
|
||||
Utils.getBackButton().hoverUpdate(delta, mouseX, mouseY);
|
||||
}
|
||||
|
||||
@@ -242,6 +242,7 @@ public class MainMenu extends BasicGameState {
|
||||
new SimpleDateFormat("h:mm a").format(new Date())),
|
||||
marginX, height - marginY - lineHeight);
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -250,6 +251,7 @@ public class MainMenu extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
|
||||
logo.hoverUpdate(delta, mouseX, mouseY);
|
||||
playButton.hoverUpdate(delta, mouseX, mouseY);
|
||||
@@ -402,6 +404,11 @@ public class MainMenu extends BasicGameState {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(int newValue) {
|
||||
Utils.changeVolume((newValue < 0) ? -1 : 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(int key, char c) {
|
||||
switch (key) {
|
||||
|
||||
@@ -107,6 +107,7 @@ public class MainMenuExit extends BasicGameState {
|
||||
"2. No", Color.white
|
||||
);
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -115,6 +116,7 @@ public class MainMenuExit extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
|
||||
// move buttons to center
|
||||
float yesX = yesButton.getX(), noX = noButton.getX();
|
||||
|
||||
@@ -172,14 +172,24 @@ public class Options extends BasicGameState {
|
||||
container.setVSync(getTargetFPS() == 60);
|
||||
}
|
||||
},
|
||||
MUSIC_VOLUME ("Music Volume", "Global music volume.") {
|
||||
MASTER_VOLUME ("Master Volume", "Global volume level.") {
|
||||
@Override
|
||||
public String getValueString() { return String.format("%d%%", masterVolume); }
|
||||
|
||||
@Override
|
||||
public void drag(GameContainer container, int d) {
|
||||
masterVolume = Utils.getBoundedValue(masterVolume, d, 0, 100);
|
||||
container.setMusicVolume(getMasterVolume() * getMusicVolume());
|
||||
}
|
||||
},
|
||||
MUSIC_VOLUME ("Music Volume", "Volume of music.") {
|
||||
@Override
|
||||
public String getValueString() { return String.format("%d%%", musicVolume); }
|
||||
|
||||
@Override
|
||||
public void drag(GameContainer container, int d) {
|
||||
musicVolume = Utils.getBoundedValue(musicVolume, d, 0, 100);
|
||||
container.setMusicVolume(getMusicVolume());
|
||||
container.setMusicVolume(getMasterVolume() * getMusicVolume());
|
||||
}
|
||||
},
|
||||
EFFECT_VOLUME ("Effect Volume", "Volume of menu and game sounds.") {
|
||||
@@ -480,6 +490,7 @@ public class Options extends BasicGameState {
|
||||
* Music options.
|
||||
*/
|
||||
private static final GameOption[] musicOptions = {
|
||||
GameOption.MASTER_VOLUME,
|
||||
GameOption.MUSIC_VOLUME,
|
||||
GameOption.EFFECT_VOLUME,
|
||||
GameOption.HITSOUND_VOLUME,
|
||||
@@ -612,20 +623,25 @@ public class Options extends BasicGameState {
|
||||
*/
|
||||
private static boolean showComboBursts = true;
|
||||
|
||||
/**
|
||||
* Global volume level.
|
||||
*/
|
||||
private static int masterVolume = 35;
|
||||
|
||||
/**
|
||||
* Default music volume.
|
||||
*/
|
||||
private static int musicVolume = 30;
|
||||
private static int musicVolume = 80;
|
||||
|
||||
/**
|
||||
* Default sound effect volume.
|
||||
*/
|
||||
private static int effectVolume = 20;
|
||||
private static int effectVolume = 70;
|
||||
|
||||
/**
|
||||
* Default hit sound volume.
|
||||
*/
|
||||
private static int hitSoundVolume = 20;
|
||||
private static int hitSoundVolume = 70;
|
||||
|
||||
/**
|
||||
* Offset time, in milliseconds, for music position-related elements.
|
||||
@@ -847,6 +863,7 @@ public class Options extends BasicGameState {
|
||||
);
|
||||
}
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -855,6 +872,7 @@ public class Options extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
|
||||
Utils.getBackButton().hoverUpdate(delta, mouseX, mouseY);
|
||||
for (GameMod mod : GameMod.values())
|
||||
@@ -1044,6 +1062,24 @@ public class Options extends BasicGameState {
|
||||
*/
|
||||
public static int getTargetFPS() { return targetFPS[targetFPSindex]; }
|
||||
|
||||
/**
|
||||
* Returns the master volume level.
|
||||
* @return the volume [0, 1]
|
||||
*/
|
||||
public static float getMasterVolume() { return masterVolume / 100f; }
|
||||
|
||||
/**
|
||||
* Sets the master volume level (if within valid range).
|
||||
* @param container the game container
|
||||
* @param volume the volume [0, 1]
|
||||
*/
|
||||
public static void setMasterVolume(GameContainer container, float volume) {
|
||||
if (volume >= 0f && volume <= 1f) {
|
||||
masterVolume = (int) (volume * 100f);
|
||||
container.setMusicVolume(getMasterVolume() * getMusicVolume());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default music volume.
|
||||
* @return the volume [0, 1]
|
||||
@@ -1417,6 +1453,11 @@ public class Options extends BasicGameState {
|
||||
case "LoadVerbose":
|
||||
loadVerbose = Boolean.parseBoolean(value);
|
||||
break;
|
||||
case "VolumeUniversal":
|
||||
i = Integer.parseInt(value);
|
||||
if (i >= 0 && i <= 100)
|
||||
masterVolume = i;
|
||||
break;
|
||||
case "VolumeMusic":
|
||||
i = Integer.parseInt(value);
|
||||
if (i >= 0 && i <= 100)
|
||||
@@ -1551,6 +1592,8 @@ public class Options extends BasicGameState {
|
||||
writer.newLine();
|
||||
writer.write(String.format("LoadVerbose = %b", loadVerbose));
|
||||
writer.newLine();
|
||||
writer.write(String.format("VolumeUniversal = %d", masterVolume));
|
||||
writer.newLine();
|
||||
writer.write(String.format("VolumeMusic = %d", musicVolume));
|
||||
writer.newLine();
|
||||
writer.write(String.format("VolumeEffect = %d", effectVolume));
|
||||
|
||||
@@ -343,6 +343,7 @@ public class SongMenu extends BasicGameState {
|
||||
// back button
|
||||
Utils.getBackButton().draw();
|
||||
|
||||
Utils.drawVolume(g);
|
||||
Utils.drawFPS();
|
||||
Utils.drawCursor();
|
||||
}
|
||||
@@ -351,6 +352,7 @@ public class SongMenu extends BasicGameState {
|
||||
public void update(GameContainer container, StateBasedGame game, int delta)
|
||||
throws SlickException {
|
||||
Utils.updateCursor(delta);
|
||||
Utils.updateVolumeDisplay(delta);
|
||||
int mouseX = input.getMouseX(), mouseY = input.getMouseY();
|
||||
Utils.getBackButton().hoverUpdate(delta, mouseX, mouseY);
|
||||
optionsButton.hoverUpdate(delta, mouseX, mouseY);
|
||||
|
||||
Reference in New Issue
Block a user