Better emulation of main menu behavior.

- Pressing 'Esc' will now always enter the MainMenuExit state.
- Returning from MainMenuExit state does not reset button states: these must be manually reset by calling the reset() method.

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
Jeffrey Han 2014-12-30 00:41:32 -05:00
parent 2592faec44
commit b0649541eb
3 changed files with 39 additions and 16 deletions

View File

@ -176,6 +176,7 @@ public class GameRanking extends BasicGameState {
game.enterState(Opsu.STATE_GAME, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); game.enterState(Opsu.STATE_GAME, new FadeOutTransition(Color.black), new FadeInTransition(Color.black));
} else if (exitButton.contains(x, y)) { } else if (exitButton.contains(x, y)) {
SoundController.playSound(SoundController.SOUND_MENUBACK); SoundController.playSound(SoundController.SOUND_MENUBACK);
((MainMenu) game.getState(Opsu.STATE_MAINMENU)).reset();
game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black));
} else if (Utils.getBackButton().contains(x, y)) { } else if (Utils.getBackButton().contains(x, y)) {
MusicController.pause(); MusicController.pause();

View File

@ -156,6 +156,8 @@ public class MainMenu extends BasicGameState {
musicNext.setHoverScale(1.5f); musicNext.setHoverScale(1.5f);
musicPrevious.setHoverScale(1.5f); musicPrevious.setHoverScale(1.5f);
reset();
// menu background // menu background
try { try {
backgroundImage = new Image("menu-background.jpg").getScaledCopy(width, height); backgroundImage = new Image("menu-background.jpg").getScaledCopy(width, height);
@ -294,16 +296,22 @@ public class MainMenu extends BasicGameState {
@Override @Override
public void enter(GameContainer container, StateBasedGame game) public void enter(GameContainer container, StateBasedGame game)
throws SlickException { throws SlickException {
logoClicked = false; // reset button hover states if mouse is not currently hovering over the button
logoTimer = 0; int mouseX = input.getMouseX(), mouseY = input.getMouseY();
logo.setX(container.getWidth() / 2); if (!logo.contains(mouseX, mouseY))
logo.setScale(1f); logo.setScale(1f);
playButton.setScale(1f); if (!playButton.contains(mouseX, mouseY))
exitButton.setScale(1f); playButton.setScale(1f);
musicPlay.setScale(1f); if (!exitButton.contains(mouseX, mouseY))
musicPause.setScale(1f); exitButton.setScale(1f);
musicNext.setScale(1f); if (!musicPlay.contains(mouseX, mouseY))
musicPrevious.setScale(1f); musicPlay.setScale(1f);
if (!musicPause.contains(mouseX, mouseY))
musicPause.setScale(1f);
if (!musicNext.contains(mouseX, mouseY))
musicNext.setScale(1f);
if (!musicPrevious.contains(mouseX, mouseY))
musicPrevious.setScale(1f);
} }
@Override @Override
@ -368,11 +376,6 @@ public class MainMenu extends BasicGameState {
public void keyPressed(int key, char c) { public void keyPressed(int key, char c) {
switch (key) { switch (key) {
case Input.KEY_ESCAPE: case Input.KEY_ESCAPE:
if (logoClicked)
logoTimer = MOVE_DELAY;
else
game.enterState(Opsu.STATE_MAINMENUEXIT);
break;
case Input.KEY_Q: case Input.KEY_Q:
game.enterState(Opsu.STATE_MAINMENUEXIT); game.enterState(Opsu.STATE_MAINMENUEXIT);
break; break;
@ -392,6 +395,23 @@ public class MainMenu extends BasicGameState {
Utils.takeScreenShot(); Utils.takeScreenShot();
break; break;
} }
}
/**
* Resets the button states.
*/
public void reset() {
// reset logo
logo.setX(container.getWidth() / 2);
logoClicked = false;
logoTimer = 0;
logo.setScale(1f);
playButton.setScale(1f);
exitButton.setScale(1f);
musicPlay.setScale(1f);
musicPause.setScale(1f);
musicNext.setScale(1f);
musicPrevious.setScale(1f);
} }
} }

View File

@ -352,6 +352,7 @@ public class SongMenu extends BasicGameState {
// back // back
if (Utils.getBackButton().contains(x, y)) { if (Utils.getBackButton().contains(x, y)) {
SoundController.playSound(SoundController.SOUND_MENUBACK); SoundController.playSound(SoundController.SOUND_MENUBACK);
((MainMenu) game.getState(Opsu.STATE_MAINMENU)).reset();
game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black));
return; return;
} }
@ -424,6 +425,7 @@ public class SongMenu extends BasicGameState {
searchTimer = SEARCH_DELAY; searchTimer = SEARCH_DELAY;
} else { } else {
SoundController.playSound(SoundController.SOUND_MENUBACK); SoundController.playSound(SoundController.SOUND_MENUBACK);
((MainMenu) game.getState(Opsu.STATE_MAINMENU)).reset();
game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black));
} }
break; break;