From 7ba530553433af648f775de7808206239e02c3ea Mon Sep 17 00:00:00 2001 From: yugecin Date: Tue, 26 Jun 2018 23:46:42 +0200 Subject: [PATCH] add pulse effect to main menu logo --- res/logo2pulse.png | Bin 0 -> 25921 bytes src/itdelatrisu/opsu/GameImage.java | 6 +++ .../opsu/audio/MusicController.java | 11 +++++ src/itdelatrisu/opsu/states/MainMenu.java | 39 +++++++++++++++++- 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 res/logo2pulse.png diff --git a/res/logo2pulse.png b/res/logo2pulse.png new file mode 100644 index 0000000000000000000000000000000000000000..56715f29fa3e564b9fbaa9bd0e75d37b97ada469 GIT binary patch literal 25921 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 zXsrMM000000000000000000000000000025!C$>h$3PA_R^I>s002ovPDHLkV1j@f B$LRn7 literal 0 HcmV?d00001 diff --git a/src/itdelatrisu/opsu/GameImage.java b/src/itdelatrisu/opsu/GameImage.java index 2209ef57..8f474d54 100644 --- a/src/itdelatrisu/opsu/GameImage.java +++ b/src/itdelatrisu/opsu/GameImage.java @@ -308,6 +308,12 @@ public enum GameImage { return img.getScaledCopy(0.75f); } }, + MENU_LOGO_PULSE ("logo2pulse", "png", false, true) { + @Override + protected Image process_sub(Image img, int w, int h) { + return img.getScaledCopy(0.75f); + } + }, MENU_PLAY ("menu-play2", "png", false, false) { @Override protected Image process_sub(Image img, int w, int h) { diff --git a/src/itdelatrisu/opsu/audio/MusicController.java b/src/itdelatrisu/opsu/audio/MusicController.java index a37e1f44..4ebb7781 100644 --- a/src/itdelatrisu/opsu/audio/MusicController.java +++ b/src/itdelatrisu/opsu/audio/MusicController.java @@ -217,6 +217,17 @@ public class MusicController { return (float) ((((trackPosition - beatTime) * 100.0) % beatLength) / beatLength); } + /** + * gets the current beat length + * @return + */ + public static Float getBeatLength() { + if (!updateTimingPoint()) + return null; + + return lastTimingPoint.getBeatLength(); + } + /** * Gets the progress of the current measure. * @return a measure progress value [0,1) where 0 marks the start of the measure and diff --git a/src/itdelatrisu/opsu/states/MainMenu.java b/src/itdelatrisu/opsu/states/MainMenu.java index f09b637d..962b632e 100644 --- a/src/itdelatrisu/opsu/states/MainMenu.java +++ b/src/itdelatrisu/opsu/states/MainMenu.java @@ -37,6 +37,8 @@ import java.awt.Desktop; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Iterator; +import java.util.LinkedList; import java.util.Stack; import org.lwjgl.opengl.Display; @@ -124,6 +126,9 @@ public class MainMenu extends BaseOpsuState { /** The star fountain. */ private StarFountain starFountain; + + private LinkedList pulseData = new LinkedList<>(); + private float lastPulseProgress; @Override protected void revalidate() { @@ -262,11 +267,25 @@ public class MainMenu extends BaseOpsuState { // draw logo (pulsing) Color color = OPTION_COLOR_MAIN_MENU_LOGO.state ? Cursor.lastCursorColor : Color.white; + for (PulseData pd : this.pulseData) { + final float progress = OUT_CUBIC.calc(pd.position / 1000f); + final float scale = pd.initialScale + (0.432f * progress); + final Image p = GameImage.MENU_LOGO_PULSE.getImage().getScaledCopy(scale); + p.setAlpha(0.15f * (1f - IN_QUAD.calc(progress))); + p.drawCentered(logo.getX(), logo.getY(), color); + } Float position = MusicController.getBeatProgress(); + 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); @@ -274,7 +293,6 @@ public class MainMenu extends BaseOpsuState { smoothExpandProgress = (position - 0.05f) / 0.95f; } logo.draw(color, 0.9726f + smoothExpandProgress * 0.0274f); - final float hoverScale = logo.getCurrentHoverExpandValue(); if (renderPiece) { Image piece = GameImage.MENU_LOGO_PIECE.getImage(); piece = piece.getScaledCopy(hoverScale); @@ -364,6 +382,15 @@ public class MainMenu extends BaseOpsuState { @Override public void preRenderUpdate() { int delta = displayContainer.renderDelta; + + final Iterator pulseDataIter = this.pulseData.iterator(); + while (pulseDataIter.hasNext()) { + final PulseData pd = pulseDataIter.next(); + pd.position += delta; + if (pd.position > 1000) { + pulseDataIter.remove(); + } + } UI.update(delta); if (MusicController.trackEnded()) @@ -748,4 +775,14 @@ public class MainMenu extends BaseOpsuState { } displayContainer.switchState(state); } + + private static class PulseData { + private int position; + private float initialScale; + + private PulseData(int position, float initialScale) { + this.position = position; + this.initialScale = initialScale; + } + } }