From 90c10d21da14ff2ae675ab0bbd260bc116a6b159 Mon Sep 17 00:00:00 2001 From: Jeffrey Han Date: Fri, 16 Jan 2015 00:36:05 -0500 Subject: [PATCH] Follow-up to 516e628: Fix resetting game data too soon. Instead of resetting immediately, set a variable in SongMenu to reset data when entering the state. Fixes some weird behaviors, and also allows resetting in more scenarios. Signed-off-by: Jeffrey Han --- src/itdelatrisu/opsu/Opsu.java | 1 + src/itdelatrisu/opsu/states/GamePauseMenu.java | 4 ++-- src/itdelatrisu/opsu/states/GameRanking.java | 5 +++-- src/itdelatrisu/opsu/states/SongMenu.java | 18 ++++++++++++++++-- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/itdelatrisu/opsu/Opsu.java b/src/itdelatrisu/opsu/Opsu.java index 2afb6c14..44be05a1 100644 --- a/src/itdelatrisu/opsu/Opsu.java +++ b/src/itdelatrisu/opsu/Opsu.java @@ -168,6 +168,7 @@ public class Opsu extends StateBasedGame { // start playing track at preview position MusicController.pause(); MusicController.playAt(MusicController.getOsuFile().previewTime, true); + ((SongMenu) this.getState(Opsu.STATE_SONGMENU)).resetGameDataOnLoad(); this.enterState(Opsu.STATE_SONGMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); return false; } diff --git a/src/itdelatrisu/opsu/states/GamePauseMenu.java b/src/itdelatrisu/opsu/states/GamePauseMenu.java index e3b9faaa..218f8ea3 100644 --- a/src/itdelatrisu/opsu/states/GamePauseMenu.java +++ b/src/itdelatrisu/opsu/states/GamePauseMenu.java @@ -138,7 +138,7 @@ public class GamePauseMenu extends BasicGameState { MusicController.stop(); MusicController.playAt(MusicController.getOsuFile().previewTime, true); SoundController.playSound(SoundEffect.MENUBACK); - gameState.resetGameData(); + ((SongMenu) game.getState(Opsu.STATE_SONGMENU)).resetGameDataOnLoad(); game.enterState(Opsu.STATE_SONGMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); } else { SoundController.playSound(SoundEffect.MENUBACK); @@ -182,7 +182,7 @@ public class GamePauseMenu extends BasicGameState { MusicController.pause(); // lose state MusicController.playAt(MusicController.getOsuFile().previewTime, true); SoundController.playSound(SoundEffect.MENUBACK); - gameState.resetGameData(); + ((SongMenu) game.getState(Opsu.STATE_SONGMENU)).resetGameDataOnLoad(); game.enterState(Opsu.STATE_SONGMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); } } diff --git a/src/itdelatrisu/opsu/states/GameRanking.java b/src/itdelatrisu/opsu/states/GameRanking.java index 3319562a..57206a16 100644 --- a/src/itdelatrisu/opsu/states/GameRanking.java +++ b/src/itdelatrisu/opsu/states/GameRanking.java @@ -151,6 +151,7 @@ public class GameRanking extends BasicGameState { MusicController.pause(); MusicController.playAt(MusicController.getOsuFile().previewTime, true); SoundController.playSound(SoundEffect.MENUBACK); + ((SongMenu) game.getState(Opsu.STATE_SONGMENU)).resetGameDataOnLoad(); game.enterState(Opsu.STATE_SONGMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); break; case Input.KEY_F12: @@ -174,13 +175,13 @@ public class GameRanking extends BasicGameState { } else if (exitButton.contains(x, y)) { SoundController.playSound(SoundEffect.MENUBACK); ((MainMenu) game.getState(Opsu.STATE_MAINMENU)).reset(); - ((Game) game.getState(Opsu.STATE_GAME)).resetGameData(); + ((SongMenu) game.getState(Opsu.STATE_SONGMENU)).resetGameDataOnLoad(); game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); } else if (Utils.getBackButton().contains(x, y)) { MusicController.pause(); MusicController.playAt(MusicController.getOsuFile().previewTime, true); SoundController.playSound(SoundEffect.MENUBACK); - ((Game) game.getState(Opsu.STATE_GAME)).resetGameData(); + ((SongMenu) game.getState(Opsu.STATE_SONGMENU)).resetGameDataOnLoad(); game.enterState(Opsu.STATE_SONGMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); } } diff --git a/src/itdelatrisu/opsu/states/SongMenu.java b/src/itdelatrisu/opsu/states/SongMenu.java index cb2e914f..afafc079 100644 --- a/src/itdelatrisu/opsu/states/SongMenu.java +++ b/src/itdelatrisu/opsu/states/SongMenu.java @@ -139,6 +139,11 @@ public class SongMenu extends BasicGameState { */ private Animation loader; + /** + * Whether or not to reset game data upon entering the state. + */ + private boolean resetGame = false; + // game-related variables private GameContainer container; private StateBasedGame game; @@ -586,8 +591,12 @@ public class SongMenu extends BasicGameState { else if (MusicController.isPaused()) MusicController.resume(); - // destroy skin images, if any - GameImage.destroySkinImages(); + // reset game data + if (resetGame) { + ((Game) game.getState(Opsu.STATE_GAME)).resetGameData(); + GameImage.destroySkinImages(); // destroy skin images, if any + resetGame = false; + } } @Override @@ -703,6 +712,11 @@ public class SongMenu extends BasicGameState { return oldFocus; } + /** + * Triggers a reset of game data upon entering this state. + */ + public void resetGameDataOnLoad() { resetGame = true; } + /** * Starts the game. * @param osu the OsuFile to send to the game