make the footer logo a button, start game when clicking & expand on hover

This commit is contained in:
yugecin 2016-12-20 00:31:15 +01:00
parent 624296deea
commit e648a553ea

View File

@ -259,6 +259,12 @@ public class SongMenu extends BasicGameState {
/** Header and footer end and start y coordinates, respectively. */ /** Header and footer end and start y coordinates, respectively. */
private float headerY, footerY; private float headerY, footerY;
/** Footer pulsing logo button. */
private MenuButton footerLogoButton;
/** Whether the cursor hovers over the footer logo. */
private boolean bottomLogoHovered;
/** Time, in milliseconds, for fading the search bar. */ /** Time, in milliseconds, for fading the search bar. */
private int searchTransitionTimer = SEARCH_TRANSITION_TIME; private int searchTransitionTimer = SEARCH_TRANSITION_TIME;
@ -335,6 +341,14 @@ public class SongMenu extends BasicGameState {
Fonts.SMALL.getLineHeight(); Fonts.SMALL.getLineHeight();
footerY = height - GameImage.SELECTION_MODS.getImage().getHeight(); footerY = height - GameImage.SELECTION_MODS.getImage().getHeight();
// logo coordinates
float footerHeight = height - footerY;
Image logo = GameImage.MENU_LOGO.getImage();
logo = logo.getScaledCopy(footerHeight * 3.25f / logo.getWidth());
footerLogoButton = new MenuButton(logo, width - footerHeight * 0.8f, height - footerHeight * 0.65f);
footerLogoButton.setHoverAnimationDuration(1);
footerLogoButton.setHoverExpand(1.4f);
// initialize sorts // initialize sorts
for (BeatmapSortOrder sort : BeatmapSortOrder.values()) for (BeatmapSortOrder sort : BeatmapSortOrder.values())
sort.init(width, headerY - SongMenu.DIVIDER_LINE_WIDTH / 2); sort.init(width, headerY - SongMenu.DIVIDER_LINE_WIDTH / 2);
@ -499,25 +513,25 @@ public class SongMenu extends BasicGameState {
g.resetLineWidth(); g.resetLineWidth();
// opsu logo in bottom bar // opsu logo in bottom bar
float footerHeight = height - footerY;
Image logo = GameImage.MENU_LOGO.getImage();
float logoSize = footerHeight * 3.25f;
logo = logo.getScaledCopy(logoSize / logo.getWidth());
Float position = MusicController.getBeatProgress(); Float position = MusicController.getBeatProgress();
if (position == null) { if (position == null) {
position = System.currentTimeMillis() % 1000 / 1000f; position = System.currentTimeMillis() % 1000 / 1000f;
} }
float x = width - footerHeight * 0.8f; if (bottomLogoHovered) {
float y = height - footerHeight * 0.65f; footerLogoButton.draw();
Image ghostLogo = logo.getScaledCopy((float) (1 - (0 - position) * 0.15)); } else {
logo = logo.getScaledCopy((float) (1 - (position) * 0.15)); float expand = position * 0.15f;
logoSize = logo.getWidth(); footerLogoButton.draw(Color.white, 1f - expand);
logo.draw(x - logoSize / 2, y - logoSize / 2); Image ghostLogo = GameImage.MENU_LOGO.getImage();
logoSize = ghostLogo.getWidth(); ghostLogo = ghostLogo.getScaledCopy((height - footerY) * 3.25f / ghostLogo.getWidth());
float a = Colors.GHOST_LOGO.a; ghostLogo = ghostLogo.getScaledCopy(1f + expand);
Colors.GHOST_LOGO.a *= (1f - position); float scaleposmodx = ghostLogo.getWidth() / 2;
ghostLogo.draw(x - logoSize / 2, y - logoSize / 2, Colors.GHOST_LOGO); float scaleposmody = ghostLogo.getHeight() / 2;
Colors.GHOST_LOGO.a = a; float a = Colors.GHOST_LOGO.a;
Colors.GHOST_LOGO.a *= (1f - position);
ghostLogo.draw(footerLogoButton.getX() - scaleposmodx, footerLogoButton.getY() - scaleposmody, Colors.GHOST_LOGO);
Colors.GHOST_LOGO.a = a;
}
// header // header
if (focusNode != null) { if (focusNode != null) {
@ -774,7 +788,18 @@ public class SongMenu extends BasicGameState {
} }
updateDrawnSongPosition(); updateDrawnSongPosition();
// mouse hover // mouse hover (logo)
if (footerLogoButton.contains(mouseX, mouseY, 0.25f)) {
footerLogoButton.hoverUpdate(delta, true);
bottomLogoHovered = true;
// reset beatmap node hover
hoverIndex = null;
return;
}
footerLogoButton.hoverUpdate(delta, false);
bottomLogoHovered = false;
// mouse hover (beatmap nodes)
BeatmapSetNode node = getNodeAtPosition(mouseX, mouseY); BeatmapSetNode node = getNodeAtPosition(mouseX, mouseY);
if (node != null) { if (node != null) {
if (node == hoverIndex) if (node == hoverIndex)
@ -817,6 +842,11 @@ public class SongMenu extends BasicGameState {
if (isScrollingToFocusNode) if (isScrollingToFocusNode)
return; return;
if (bottomLogoHovered) {
startGame();
return;
}
songScrolling.pressed(); songScrolling.pressed();
startScorePos.pressed(); startScorePos.pressed();
} }