diff --git a/.gitignore b/.gitignore index ebdc524f..1668a52a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ /Songs/ /.opsu.log /.opsu.cfg -/.opsu.db +/.opsu.db* /.opsu_scores.db # Eclipse diff --git a/src/itdelatrisu/opsu/Opsu.java b/src/itdelatrisu/opsu/Opsu.java index 8d2003ef..c8487dc4 100644 --- a/src/itdelatrisu/opsu/Opsu.java +++ b/src/itdelatrisu/opsu/Opsu.java @@ -161,7 +161,6 @@ public class Opsu extends StateBasedGame { String[] icons = { "icon16.png", "icon32.png" }; app.setIcons(icons); app.setForceExit(true); - app.setUpdateOnlyWhenVisible(false); app.start(); diff --git a/src/itdelatrisu/opsu/Utils.java b/src/itdelatrisu/opsu/Utils.java index 75fada10..0b4d631e 100644 --- a/src/itdelatrisu/opsu/Utils.java +++ b/src/itdelatrisu/opsu/Utils.java @@ -138,6 +138,7 @@ public class Utils { container.setShowFPS(false); container.getInput().enableKeyRepeat(); container.setAlwaysRender(true); + container.setUpdateOnlyWhenVisible(false); int width = container.getWidth(); int height = container.getHeight(); diff --git a/src/itdelatrisu/opsu/audio/MusicController.java b/src/itdelatrisu/opsu/audio/MusicController.java index 6ae14843..a38f0316 100644 --- a/src/itdelatrisu/opsu/audio/MusicController.java +++ b/src/itdelatrisu/opsu/audio/MusicController.java @@ -70,9 +70,8 @@ public class MusicController { * @param osu the OsuFile to play * @param loop whether or not to loop the track * @param preview whether to start at the preview time (true) or beginning (false) - * @param reset plays at the preview time even if it has the same preview time as the last */ - public static void play(final OsuFile osu, final boolean loop, final boolean preview, final boolean reset) { + public static void play(final OsuFile osu, final boolean loop, final boolean preview) { // new track: load and play if (lastOsu == null || !osu.audioFilename.equals(lastOsu.audioFilename)) { reset(); @@ -95,7 +94,7 @@ public class MusicController { } // new track position: play at position - else if (osu.previewTime != lastOsu.previewTime || reset) + else if (osu.previewTime != lastOsu.previewTime) playAt(osu.previewTime, loop); lastOsu = osu; @@ -277,13 +276,22 @@ public class MusicController { */ public static boolean trackEnded() { return trackEnded; } + /** + * Loops the current track if it has ended. + * @param preview whether to start at the preview time (true) or beginning (false) + */ + public static void loopTrackIfEnded(boolean preview) { + if (trackEnded && trackExists()) + playAt((preview) ? lastOsu.previewTime : 0, false); + } + /** * Plays the theme song. */ public static void playThemeSong() { OsuFile osu = Options.getOsuTheme(); if (osu != null) { - play(osu, true, false, false); + play(osu, true, false); themePlaying = true; } } diff --git a/src/itdelatrisu/opsu/states/ButtonMenu.java b/src/itdelatrisu/opsu/states/ButtonMenu.java index e722b447..57f50fae 100644 --- a/src/itdelatrisu/opsu/states/ButtonMenu.java +++ b/src/itdelatrisu/opsu/states/ButtonMenu.java @@ -28,6 +28,7 @@ import itdelatrisu.opsu.OsuGroupNode; import itdelatrisu.opsu.ScoreData; import itdelatrisu.opsu.UI; import itdelatrisu.opsu.Utils; +import itdelatrisu.opsu.audio.MusicController; import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; @@ -584,6 +585,7 @@ public class ButtonMenu extends BasicGameState { public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException { UI.update(delta); + MusicController.loopTrackIfEnded(false); if (menuState != null) menuState.update(container, delta, input.getMouseX(), input.getMouseY()); } diff --git a/src/itdelatrisu/opsu/states/DownloadsMenu.java b/src/itdelatrisu/opsu/states/DownloadsMenu.java index 450abfe1..72c6aa2d 100644 --- a/src/itdelatrisu/opsu/states/DownloadsMenu.java +++ b/src/itdelatrisu/opsu/states/DownloadsMenu.java @@ -28,6 +28,7 @@ import itdelatrisu.opsu.OsuParser; import itdelatrisu.opsu.OszUnpacker; import itdelatrisu.opsu.UI; import itdelatrisu.opsu.Utils; +import itdelatrisu.opsu.audio.MusicController; import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; import itdelatrisu.opsu.downloads.BloodcatServer; @@ -319,6 +320,7 @@ public class DownloadsMenu extends BasicGameState { public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException { UI.update(delta); + MusicController.loopTrackIfEnded(false); int mouseX = input.getMouseX(), mouseY = input.getMouseY(); UI.getBackButton().hoverUpdate(delta, mouseX, mouseY); prevPage.hoverUpdate(delta, mouseX, mouseY); diff --git a/src/itdelatrisu/opsu/states/GameRanking.java b/src/itdelatrisu/opsu/states/GameRanking.java index e8fe500a..66462026 100644 --- a/src/itdelatrisu/opsu/states/GameRanking.java +++ b/src/itdelatrisu/opsu/states/GameRanking.java @@ -125,7 +125,8 @@ public class GameRanking extends BasicGameState { if (data.isGameplay()) { retryButton.hoverUpdate(delta, mouseX, mouseY); exitButton.hoverUpdate(delta, mouseX, mouseY); - } + } else + MusicController.loopTrackIfEnded(true); UI.getBackButton().hoverUpdate(delta, mouseX, mouseY); } diff --git a/src/itdelatrisu/opsu/states/MainMenu.java b/src/itdelatrisu/opsu/states/MainMenu.java index 2aaa8619..18b6ee3c 100644 --- a/src/itdelatrisu/opsu/states/MainMenu.java +++ b/src/itdelatrisu/opsu/states/MainMenu.java @@ -312,6 +312,8 @@ public class MainMenu extends BasicGameState { 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); @@ -377,9 +379,6 @@ public class MainMenu extends BasicGameState { logo.setX(container.getWidth() / 2); } } - - if (MusicController.trackEnded()) - nextTrack(); } @Override diff --git a/src/itdelatrisu/opsu/states/OptionsMenu.java b/src/itdelatrisu/opsu/states/OptionsMenu.java index 3934f572..10c0a583 100644 --- a/src/itdelatrisu/opsu/states/OptionsMenu.java +++ b/src/itdelatrisu/opsu/states/OptionsMenu.java @@ -25,6 +25,7 @@ import itdelatrisu.opsu.Options; import itdelatrisu.opsu.Options.GameOption; import itdelatrisu.opsu.UI; import itdelatrisu.opsu.Utils; +import itdelatrisu.opsu.audio.MusicController; import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; @@ -259,6 +260,7 @@ public class OptionsMenu extends BasicGameState { public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException { UI.update(delta); + MusicController.loopTrackIfEnded(false); int mouseX = input.getMouseX(), mouseY = input.getMouseY(); UI.getBackButton().hoverUpdate(delta, mouseX, mouseY); } diff --git a/src/itdelatrisu/opsu/states/SongMenu.java b/src/itdelatrisu/opsu/states/SongMenu.java index 65340596..f203ee8b 100644 --- a/src/itdelatrisu/opsu/states/SongMenu.java +++ b/src/itdelatrisu/opsu/states/SongMenu.java @@ -460,6 +460,7 @@ public class SongMenu extends BasicGameState { public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException { UI.update(delta); + MusicController.loopTrackIfEnded(true); int mouseX = input.getMouseX(), mouseY = input.getMouseY(); UI.getBackButton().hoverUpdate(delta, mouseX, mouseY); selectModsButton.hoverUpdate(delta, mouseX, mouseY); @@ -566,10 +567,6 @@ public class SongMenu extends BasicGameState { hoverOffset = 0f; hoverIndex = -1; } - if (MusicController.trackEnded()) { - OsuFile osu = focusNode.osuFiles.get(focusNode.osuFileIndex); - MusicController.play(osu, false, true, true); - } } @Override @@ -1167,7 +1164,7 @@ public class SongMenu extends BasicGameState { startNode = node; focusNode = OsuGroupList.get().getNode(node, osuFileIndex); OsuFile osu = focusNode.osuFiles.get(focusNode.osuFileIndex); - MusicController.play(osu, false, preview, false); + MusicController.play(osu, false, preview); Utils.loadGlyphs(osu); // load scores