diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 0fc3b9723b9..44bf5eaf15e 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -526,7 +526,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { if (state == CardStateName.FaceDown) { view.updateHiddenId(game.nextHiddenCardId()); } - game.fireEvent(new GameEventCardStatsChanged(this)); //ensure stats updated for new characteristics + game.fireEvent(new GameEventCardStatsChanged(this, true)); //ensure stats updated for new characteristics } } return true; diff --git a/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java b/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java index 140e3a2ef00..e5ef7a6400f 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java +++ b/forge-game/src/main/java/forge/game/event/GameEventCardStatsChanged.java @@ -16,7 +16,13 @@ public class GameEventCardStatsChanged extends GameEvent { public final Collection cards; public GameEventCardStatsChanged(Card affected) { + this(affected, false); + } + + public GameEventCardStatsChanged(Card affected, boolean isTransform) { + players = Arrays.asList(affected.getController()); cards = Arrays.asList(affected); + transform = isTransform; } public GameEventCardStatsChanged(Collection affected) { diff --git a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java index 0d916192653..687b4d1a9fb 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/DuelScene.java @@ -201,7 +201,7 @@ public class DuelScene extends ForgeScene { @Override public void enter() { - GameHUD.getInstance().unloadAudio(); + GameHUD.getInstance().stopAudio(); 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 469a3a13d55..10861a02376 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java +++ b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java @@ -309,24 +309,9 @@ public class GameHUD extends Stage { } if (GameScene.instance().isNotInWorldMap()) { SoundSystem.instance.pause(); - switch (GameScene.instance().getAdventurePlayerLocation(false, false)) { - case "capital": - case "town": - setAudio(MusicPlaylist.TOWN); - break; - case "dungeon": - case "cave": - setAudio(MusicPlaylist.CAVE); - break; - case "castle": - setAudio(MusicPlaylist.CASTLE); - break; - default: - break; - } playAudio(); } else { - unloadAudio(); + stopAudio(); SoundSystem.instance.resume(); // resume World BGM } } @@ -334,17 +319,35 @@ public class GameHUD extends Stage { private Pair audio = null; public void playAudio() { + switch (GameScene.instance().getAdventurePlayerLocation(false, false)) { + case "capital": + case "town": + setAudio(MusicPlaylist.TOWN); + break; + case "dungeon": + case "cave": + setAudio(MusicPlaylist.CAVE); + break; + case "castle": + setAudio(MusicPlaylist.CASTLE); + break; + default: + break; + } if (audio != null) { audio.getRight().setLooping(true); audio.getRight().play(); } } - - public void unloadAudio() { + public void fadeAudio(float v) { + if (audio != null) { + audio.getRight().setVolume(v); + } + } + + public void stopAudio() { if (audio != null) { - audio.getRight().setOnCompletionListener(null); audio.getRight().stop(); - Forge.getAssets().manager().unload(audio.getLeft().path()); } } @@ -353,7 +356,7 @@ public class GameHUD extends Stage { private void setAudio(MusicPlaylist playlist) { if (playlist.equals(currentAudioPlaylist)) return; - unloadAudio(); + stopAudio(); audio = getMusic(playlist); } @@ -363,9 +366,10 @@ public class GameHUD extends Stage { if (music != null) { currentAudioPlaylist = playlist; return Pair.of(file, music); + } else { + currentAudioPlaylist = null; + return null; } - currentAudioPlaylist = null; - return null; } private void openDeck() { diff --git a/forge-gui-mobile/src/forge/adventure/util/MapDialog.java b/forge-gui-mobile/src/forge/adventure/util/MapDialog.java index 225676a8f7b..1cc22adcd1d 100644 --- a/forge-gui-mobile/src/forge/adventure/util/MapDialog.java +++ b/forge-gui-mobile/src/forge/adventure/util/MapDialog.java @@ -15,11 +15,11 @@ import forge.Forge; import forge.adventure.character.EnemySprite; import forge.adventure.data.DialogData; import forge.adventure.player.AdventurePlayer; +import forge.adventure.stage.GameHUD; import forge.adventure.stage.MapStage; import forge.card.ColorSet; import forge.localinstance.properties.ForgePreferences; import forge.model.FModel; -import forge.sound.SoundSystem; import forge.util.Localizer; import org.apache.commons.lang3.tuple.Pair; @@ -196,7 +196,7 @@ public class MapDialog { fade += 0.1f; if (fade > 1f) fade = 1f; - SoundSystem.instance.fadeModifier(fade); + GameHUD.getInstance().fadeAudio(fade); } }, delay); } @@ -211,7 +211,7 @@ public class MapDialog { fade -= 0.1f; if (fade < 0.1f) fade = 0.1f; - SoundSystem.instance.fadeModifier(fade); + GameHUD.getInstance().fadeAudio(fade); } }, delay); } diff --git a/forge-gui-mobile/src/forge/adventure/util/RewardActor.java b/forge-gui-mobile/src/forge/adventure/util/RewardActor.java index 13cefacef11..018f4afe026 100644 --- a/forge-gui-mobile/src/forge/adventure/util/RewardActor.java +++ b/forge-gui-mobile/src/forge/adventure/util/RewardActor.java @@ -41,6 +41,8 @@ import forge.card.CardRenderer; import forge.game.card.CardView; import forge.gui.GuiBase; import forge.item.PaperCard; +import forge.sound.SoundEffectType; +import forge.sound.SoundSystem; import forge.util.ImageFetcher; import forge.util.ImageUtil; import org.apache.commons.lang3.StringUtils; @@ -593,6 +595,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb return; clicked = true; flipProcess = 0; + SoundSystem.instance.play(SoundEffectType.FlipCard, false); } public void sold() { diff --git a/forge-gui/res/sound/flip_card.mp3 b/forge-gui/res/sound/flip_card.mp3 new file mode 100644 index 00000000000..7af06b29cf5 Binary files /dev/null and b/forge-gui/res/sound/flip_card.mp3 differ diff --git a/forge-gui/src/main/java/forge/sound/EventVisualizer.java b/forge-gui/src/main/java/forge/sound/EventVisualizer.java index 0f41ff1f5a0..709ca1dda58 100644 --- a/forge-gui/src/main/java/forge/sound/EventVisualizer.java +++ b/forge-gui/src/main/java/forge/sound/EventVisualizer.java @@ -16,6 +16,7 @@ import forge.game.event.GameEventCardDestroyed; import forge.game.event.GameEventCardPhased; import forge.game.event.GameEventCardRegenerated; import forge.game.event.GameEventCardSacrificed; +import forge.game.event.GameEventCardStatsChanged; import forge.game.event.GameEventCardTapped; import forge.game.event.GameEventDayTimeChanged; import forge.game.event.GameEventFlipCoin; @@ -77,6 +78,12 @@ public class EventVisualizer extends IGameEventVisitor.Base imp return to == ZoneType.Exile ? SoundEffectType.Exile : null; } + + @Override + public SoundEffectType visit(GameEventCardStatsChanged event) { + return event.transform ? SoundEffectType.FlipCard : null ; + } + @Override public SoundEffectType visit(final GameEventCardRegenerated event) { return SoundEffectType.Regen; } @Override diff --git a/forge-gui/src/main/java/forge/sound/SoundEffectType.java b/forge-gui/src/main/java/forge/sound/SoundEffectType.java index b7f057c8645..5302fe62a30 100644 --- a/forge-gui/src/main/java/forge/sound/SoundEffectType.java +++ b/forge-gui/src/main/java/forge/sound/SoundEffectType.java @@ -59,6 +59,7 @@ public enum SoundEffectType { Equip("equip.mp3", false), Exile("exile.mp3", false), FlipCoin("flip_coin.mp3", false), + FlipCard("flip_card.mp3", false), GreenBlackBlueLand("green_black_blue_land.mp3", false), GreenBlackLand("green_black_land.mp3", false), GreenBlueLand("green_blue_land.mp3", false),