diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index 6cc1f07a063..25615eaf47f 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -13,6 +13,7 @@ import forge.adventure.data.EffectData; import forge.adventure.data.EnemyData; import forge.adventure.data.ItemData; import forge.adventure.player.AdventurePlayer; +import forge.adventure.stage.GameHUD; import forge.adventure.stage.IAfterMatch; import forge.adventure.util.Config; import forge.adventure.util.Current; @@ -193,6 +194,7 @@ public class DuelScene extends ForgeScene { @Override public void enter() { + GameHUD.getInstance().unloadAudio(); Set appliedVariants = new HashSet<>(); appliedVariants.add(GameType.Constructed); AdventurePlayer advPlayer = Current.player(); diff --git a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java index 3c3fba27a46..c0e763d3f1f 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java +++ b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java @@ -280,6 +280,8 @@ public class GameHUD extends Stage { } if (!GameScene.instance().isNotInWorldMap()) updateMusic(); + else + SoundSystem.instance.pause(); } Texture miniMapTexture; @@ -306,7 +308,7 @@ public class GameHUD extends Stage { deckActor.setColor(menuActor.getColor()); } if (GameScene.instance().isNotInWorldMap()) { - SoundSystem.instance.pause(); //play another music source + SoundSystem.instance.pause(); switch (GameScene.instance().getAdventurePlayerLocation(false, false)) { case "capital": case "town": @@ -332,22 +334,28 @@ public class GameHUD extends Stage { } } private Pair audio = null; - private void unloadAudio() { + public void unloadAudio() { if (audio != null) { audio.getRight().setOnCompletionListener(null); audio.getRight().stop(); Forge.getAssets().manager().unload(audio.getLeft().path()); } } + private MusicPlaylist currentAudioPlaylist = null; private void setAudio(MusicPlaylist playlist) { + if (playlist.equals(currentAudioPlaylist)) + return; unloadAudio(); audio = getMusic(playlist); } private Pair getMusic(MusicPlaylist playlist) { FileHandle file = Gdx.files.absolute(playlist.getNewRandomFilename()); Music music = Forge.getAssets().getMusic(file); - if (music != null) + if (music != null) { + currentAudioPlaylist = playlist; return Pair.of(file, music); + } + currentAudioPlaylist = null; return null; } diff --git a/forge-gui-mobile/src/forge/sound/AudioMusic.java b/forge-gui-mobile/src/forge/sound/AudioMusic.java index b594554e573..111a409a6db 100644 --- a/forge-gui-mobile/src/forge/sound/AudioMusic.java +++ b/forge-gui-mobile/src/forge/sound/AudioMusic.java @@ -30,7 +30,8 @@ public class AudioMusic implements IAudioMusic { public void pause() { if (music == null) return; - music.pause(); + if (music.isPlaying()) + music.pause(); } public void resume() {