fix clipping buttons when logo scale changes

This commit is contained in:
yugecin 2018-07-07 15:19:26 +02:00
parent 84f2a5b99a
commit f8d5106fea
No known key found for this signature in database
GPG Key ID: 2C5AC035A7068E44

View File

@ -304,6 +304,29 @@ public class MainMenu extends BaseOpsuState {
// draw downloads button // draw downloads button
downloadsButton.draw(); downloadsButton.draw();
// scale stuff for logo
final float clickScale = this.logoClickScale.getValue();
Float beatPosition = MusicController.getBeatProgress();
Float beatLength = MusicController.getBeatLength();
final boolean renderPiece = beatPosition != null;
if (beatPosition == null) {
beatPosition = System.currentTimeMillis() % 1000 / 1000f;
beatLength = 1000f;
}
final float hoverScale = logo.getCurrentHoverExpandValue();
if (beatPosition < this.lastPulseProgress) {
this.pulseData.add(new PulseData((int) (beatPosition*beatLength), hoverScale));
}
this.lastPulseProgress = beatPosition;
final float smoothExpandProgress;
if (beatPosition < 0.05f) {
smoothExpandProgress = 1f - IN_CUBIC.calc(beatPosition / 0.05f);
} else {
smoothExpandProgress = (beatPosition - 0.05f) / 0.95f;
}
final float logoScale = (0.9726f + smoothExpandProgress * 0.0274f) * clickScale;
final float totalLogoScale = hoverScale * logoScale;
// draw buttons // draw buttons
final float buttonProgress = this.buttonsAnimation.getValue(); final float buttonProgress = this.buttonsAnimation.getValue();
if (this.logoState != LogoState.DEFAULT && buttonProgress > 0f) { if (this.logoState != LogoState.DEFAULT && buttonProgress > 0f) {
@ -318,8 +341,9 @@ public class MainMenu extends BaseOpsuState {
MENU_OPTIONS.getImage(), MENU_OPTIONS.getImage(),
MENU_EXIT.getImage() MENU_EXIT.getImage()
}; };
final float cr = MENU_LOGO.getImage().getHeight() * 0.44498f; final float circleradius = MENU_LOGO.getImage().getHeight() * 0.44498f;
final float halfradius = cr / 2f; final float halfradius = circleradius / 2f;
final float cr = circleradius * totalLogoScale;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
final float yoff = (i - 1f) * halfradius; final float yoff = (i - 1f) * halfradius;
final double cliptop = cr * cos(asin((yoff - btnhalfheight) / cr)); final double cliptop = cr * cos(asin((yoff - btnhalfheight) / cr));
@ -332,7 +356,6 @@ public class MainMenu extends BaseOpsuState {
} }
// draw logo (pulsing) // draw logo (pulsing)
final float clickScale = this.logoClickScale.getValue();
Color color = OPTION_COLOR_MAIN_MENU_LOGO.state ? Cursor.lastCursorColor : Color.white; Color color = OPTION_COLOR_MAIN_MENU_LOGO.state ? Cursor.lastCursorColor : Color.white;
for (PulseData pd : this.pulseData) { for (PulseData pd : this.pulseData) {
final float progress = OUT_CUBIC.calc(pd.position / 1000f); final float progress = OUT_CUBIC.calc(pd.position / 1000f);
@ -341,28 +364,10 @@ public class MainMenu extends BaseOpsuState {
p.setAlpha(0.15f * (1f - IN_QUAD.calc(progress))); p.setAlpha(0.15f * (1f - IN_QUAD.calc(progress)));
p.drawCentered(logo.getX(), logo.getY(), color); p.drawCentered(logo.getX(), logo.getY(), color);
} }
Float position = MusicController.getBeatProgress(); logo.draw(color, logoScale);
Float beatLength = MusicController.getBeatLength();
boolean renderPiece = position != null;
if (position == null) {
position = System.currentTimeMillis() % 1000 / 1000f;
beatLength = 1000f;
}
final float hoverScale = logo.getCurrentHoverExpandValue();
if (position < this.lastPulseProgress) {
this.pulseData.add(new PulseData((int) (position*beatLength), hoverScale));
}
this.lastPulseProgress = position;
final float smoothExpandProgress;
if (position < 0.05f) {
smoothExpandProgress = 1f - IN_CUBIC.calc(position / 0.05f);
} else {
smoothExpandProgress = (position - 0.05f) / 0.95f;
}
logo.draw(color, (0.9726f + smoothExpandProgress * 0.0274f) * clickScale);
if (renderPiece) { if (renderPiece) {
final Image piece = MENU_LOGO_PIECE.getScaledImage(hoverScale * clickScale); final Image piece = MENU_LOGO_PIECE.getScaledImage(hoverScale * clickScale);
piece.rotate(position * 360); piece.rotate(beatPosition * 360f);
piece.drawCentered(logo.getX(), logo.getY(), color); piece.drawCentered(logo.getX(), logo.getY(), color);
} }
final float ghostScale = hoverScale * 1.0186f - smoothExpandProgress * 0.0186f; final float ghostScale = hoverScale * 1.0186f - smoothExpandProgress * 0.0186f;