@Override public void keyPressed(int key, char c) { switch (key) { case Input.KEY_ESCAPE: case Input.KEY_Q: ((ButtonMenu) game.getState(Opsu.STATE_BUTTONMENU)).setMenuState(MenuState.EXIT); game.enterState(Opsu.STATE_BUTTONMENU); break; case Input.KEY_P: SoundController.playSound(SoundEffect.MENUHIT); if (!logoClicked) { logoClicked = true; logoTimer = 0; playButton.getImage().setAlpha(0f); exitButton.getImage().setAlpha(0f); } else enterSongMenu(); break; case Input.KEY_D: SoundController.playSound(SoundEffect.MENUHIT); game.enterState( Opsu.STATE_DOWNLOADSMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); break; case Input.KEY_R: nextTrack(); break; case Input.KEY_UP: UI.changeVolume(1); break; case Input.KEY_DOWN: UI.changeVolume(-1); break; case Input.KEY_F7: Options.setNextFPS(container); break; case Input.KEY_F10: Options.toggleMouseDisabled(); break; case Input.KEY_F12: Utils.takeScreenShot(); break; } }
@Override public void mousePressed(int button, int x, int y) { // check mouse button if (button == Input.MOUSE_MIDDLE_BUTTON) return; // music position bar if (MusicController.isPlaying()) { if (musicPositionBarContains(x, y)) { float pos = (x - musicBarX) / musicBarWidth; MusicController.setPosition((int) (pos * MusicController.getDuration())); return; } } // music button actions if (musicPlay.contains(x, y)) { if (MusicController.isPlaying()) { MusicController.pause(); UI.sendBarNotification("Pause"); } else if (!MusicController.isTrackLoading()) { MusicController.resume(); UI.sendBarNotification("Play"); } } else if (musicNext.contains(x, y)) { nextTrack(); UI.sendBarNotification(">> Next"); } else if (musicPrevious.contains(x, y)) { if (!previous.isEmpty()) { SongMenu menu = (SongMenu) game.getState(Opsu.STATE_SONGMENU); menu.setFocus(BeatmapSetList.get().getBaseNode(previous.pop()), -1, true, false); if (Options.isDynamicBackgroundEnabled()) bgAlpha = 0f; } else MusicController.setPosition(0); UI.sendBarNotification("<< Previous"); } // downloads button actions else if (downloadsButton.contains(x, y)) { SoundController.playSound(SoundEffect.MENUHIT); game.enterState( Opsu.STATE_DOWNLOADSMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); } // repository button actions else if (repoButton != null && repoButton.contains(x, y)) { try { Desktop.getDesktop().browse(Options.REPOSITORY_URI); } catch (IOException e) { ErrorHandler.error("Could not browse to repository URI.", e, false); } } // update button actions else if (Updater.get().showButton() && updateButton.contains(x, y)) { switch (Updater.get().getStatus()) { case UPDATE_AVAILABLE: SoundController.playSound(SoundEffect.MENUHIT); Updater.get().startDownload(); break; case UPDATE_DOWNLOADED: SoundController.playSound(SoundEffect.MENUHIT); Updater.get().prepareUpdate(); container.setForceExit(false); container.exit(); break; default: break; } } // start moving logo (if clicked) else if (!logoClicked) { if (logo.contains(x, y, 0.25f)) { logoClicked = true; logoTimer = 0; playButton.getImage().setAlpha(0f); exitButton.getImage().setAlpha(0f); SoundController.playSound(SoundEffect.MENUHIT); } } // other button actions (if visible) else if (logoClicked) { if (logo.contains(x, y, 0.25f) || playButton.contains(x, y, 0.25f)) { SoundController.playSound(SoundEffect.MENUHIT); enterSongMenu(); } else if (exitButton.contains(x, y, 0.25f)) { container.exit(); } else if (optionsButton.contains(x, y, 0.25f)) { enterOptionsMenu(); } } }
@Override public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException { UI.update(delta); if (MusicController.trackEnded()) nextTrack(); // end of track: go to next track int mouseX = input.getMouseX(), mouseY = input.getMouseY(); logo.hoverUpdate(delta, mouseX, mouseY, 0.25f); playButton.hoverUpdate(delta, mouseX, mouseY, 0.25f); optionsButton.hoverUpdate(delta, mouseX, mouseY, 0.25f); exitButton.hoverUpdate(delta, mouseX, mouseY, 0.25f); if (repoButton != null) repoButton.hoverUpdate(delta, mouseX, mouseY); updateButton.hoverUpdate(delta, mouseX, mouseY); downloadsButton.hoverUpdate(delta, mouseX, mouseY); // ensure only one button is in hover state at once boolean noHoverUpdate = musicPositionBarContains(mouseX, mouseY); boolean contains = musicPlay.contains(mouseX, mouseY); musicPlay.hoverUpdate(delta, !noHoverUpdate && contains); musicPause.hoverUpdate(delta, !noHoverUpdate && contains); noHoverUpdate |= contains; musicNext.hoverUpdate(delta, !noHoverUpdate && musicNext.contains(mouseX, mouseY)); musicPrevious.hoverUpdate(delta, !noHoverUpdate && musicPrevious.contains(mouseX, mouseY)); // window focus change: increase/decrease theme song volume if (MusicController.isThemePlaying() && MusicController.isTrackDimmed() == container.hasFocus()) MusicController.toggleTrackDimmed(0.33f); // fade in background if (bgAlpha < BG_MAX_ALPHA) { bgAlpha += delta / 1000f; if (bgAlpha > BG_MAX_ALPHA) bgAlpha = BG_MAX_ALPHA; } // buttons if (logoClicked) { if (logoTimer == 0) { // shifting to left if (logo.getX() > container.getWidth() / 3.3f) logo.setX(logo.getX() - delta); else logoTimer = 1; } else if (logoTimer >= MOVE_DELAY) // timer over: shift back to center logoClicked = false; else { // increment timer logoTimer += delta; if (logoTimer <= 500) { // fade in buttons playButton.getImage().setAlpha(logoTimer / 400f); optionsButton.getImage().setAlpha(logoTimer / 400f); exitButton.getImage().setAlpha(logoTimer / 400f); } } } else { // fade out buttons if (logoTimer > 0) { float alpha = playButton.getImage().getAlpha(); if (alpha > 0f) { playButton.getImage().setAlpha(alpha - (delta / 200f)); optionsButton.getImage().setAlpha(alpha - (delta / 200f)); exitButton.getImage().setAlpha(alpha - (delta / 200f)); } else logoTimer = 0; } // move back to original location if (logo.getX() < container.getWidth() / 2) { logo.setX(logo.getX() + (delta / 3f)); if (logo.getX() > container.getWidth() / 2) logo.setX(container.getWidth() / 2); } } // tooltips if (musicPositionBarContains(mouseX, mouseY)) UI.updateTooltip(delta, "Click to seek to a specific point in the song.", false); else if (musicPlay.contains(mouseX, mouseY)) UI.updateTooltip(delta, (MusicController.isPlaying()) ? "Pause" : "Play", false); else if (musicNext.contains(mouseX, mouseY)) UI.updateTooltip(delta, "Next track", false); else if (musicPrevious.contains(mouseX, mouseY)) UI.updateTooltip(delta, "Previous track", false); else if (Updater.get().showButton() && updateButton.contains(mouseX, mouseY)) UI.updateTooltip(delta, Updater.get().getStatus().getDescription(), true); }