Fix Android Music, Add flip_card sfx

- fix secondary music not playing on Android (let assetmanager unload them on exit)
- fix MapDialog audio bgm fade
- add Flip sfx on RewardActor flip and transform setstate effect
This commit is contained in:
Anthony Calosa
2023-03-21 21:56:41 +08:00
parent 92c6bd1365
commit 865d228cb2
9 changed files with 49 additions and 28 deletions

View File

@@ -526,7 +526,7 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars {
if (state == CardStateName.FaceDown) { if (state == CardStateName.FaceDown) {
view.updateHiddenId(game.nextHiddenCardId()); 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; return true;

View File

@@ -16,7 +16,13 @@ public class GameEventCardStatsChanged extends GameEvent {
public final Collection<Card> cards; public final Collection<Card> cards;
public GameEventCardStatsChanged(Card affected) { public GameEventCardStatsChanged(Card affected) {
this(affected, false);
}
public GameEventCardStatsChanged(Card affected, boolean isTransform) {
players = Arrays.asList(affected.getController());
cards = Arrays.asList(affected); cards = Arrays.asList(affected);
transform = isTransform;
} }
public GameEventCardStatsChanged(Collection<Card> affected) { public GameEventCardStatsChanged(Collection<Card> affected) {

View File

@@ -201,7 +201,7 @@ public class DuelScene extends ForgeScene {
@Override @Override
public void enter() { public void enter() {
GameHUD.getInstance().unloadAudio(); GameHUD.getInstance().stopAudio();
Set<GameType> appliedVariants = new HashSet<>(); Set<GameType> appliedVariants = new HashSet<>();
appliedVariants.add(GameType.Constructed); appliedVariants.add(GameType.Constructed);
AdventurePlayer advPlayer = Current.player(); AdventurePlayer advPlayer = Current.player();

View File

@@ -309,24 +309,9 @@ public class GameHUD extends Stage {
} }
if (GameScene.instance().isNotInWorldMap()) { if (GameScene.instance().isNotInWorldMap()) {
SoundSystem.instance.pause(); 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(); playAudio();
} else { } else {
unloadAudio(); stopAudio();
SoundSystem.instance.resume(); // resume World BGM SoundSystem.instance.resume(); // resume World BGM
} }
} }
@@ -334,17 +319,35 @@ public class GameHUD extends Stage {
private Pair<FileHandle, Music> audio = null; private Pair<FileHandle, Music> audio = null;
public void playAudio() { 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) { if (audio != null) {
audio.getRight().setLooping(true); audio.getRight().setLooping(true);
audio.getRight().play(); audio.getRight().play();
} }
} }
public void fadeAudio(float v) {
public void unloadAudio() { if (audio != null) {
audio.getRight().setVolume(v);
}
}
public void stopAudio() {
if (audio != null) { if (audio != null) {
audio.getRight().setOnCompletionListener(null);
audio.getRight().stop(); audio.getRight().stop();
Forge.getAssets().manager().unload(audio.getLeft().path());
} }
} }
@@ -353,7 +356,7 @@ public class GameHUD extends Stage {
private void setAudio(MusicPlaylist playlist) { private void setAudio(MusicPlaylist playlist) {
if (playlist.equals(currentAudioPlaylist)) if (playlist.equals(currentAudioPlaylist))
return; return;
unloadAudio(); stopAudio();
audio = getMusic(playlist); audio = getMusic(playlist);
} }
@@ -363,9 +366,10 @@ public class GameHUD extends Stage {
if (music != null) { if (music != null) {
currentAudioPlaylist = playlist; currentAudioPlaylist = playlist;
return Pair.of(file, music); return Pair.of(file, music);
} else {
currentAudioPlaylist = null;
return null;
} }
currentAudioPlaylist = null;
return null;
} }
private void openDeck() { private void openDeck() {

View File

@@ -15,11 +15,11 @@ import forge.Forge;
import forge.adventure.character.EnemySprite; import forge.adventure.character.EnemySprite;
import forge.adventure.data.DialogData; import forge.adventure.data.DialogData;
import forge.adventure.player.AdventurePlayer; import forge.adventure.player.AdventurePlayer;
import forge.adventure.stage.GameHUD;
import forge.adventure.stage.MapStage; import forge.adventure.stage.MapStage;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.localinstance.properties.ForgePreferences; import forge.localinstance.properties.ForgePreferences;
import forge.model.FModel; import forge.model.FModel;
import forge.sound.SoundSystem;
import forge.util.Localizer; import forge.util.Localizer;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -196,7 +196,7 @@ public class MapDialog {
fade += 0.1f; fade += 0.1f;
if (fade > 1f) if (fade > 1f)
fade = 1f; fade = 1f;
SoundSystem.instance.fadeModifier(fade); GameHUD.getInstance().fadeAudio(fade);
} }
}, delay); }, delay);
} }
@@ -211,7 +211,7 @@ public class MapDialog {
fade -= 0.1f; fade -= 0.1f;
if (fade < 0.1f) if (fade < 0.1f)
fade = 0.1f; fade = 0.1f;
SoundSystem.instance.fadeModifier(fade); GameHUD.getInstance().fadeAudio(fade);
} }
}, delay); }, delay);
} }

View File

@@ -41,6 +41,8 @@ import forge.card.CardRenderer;
import forge.game.card.CardView; import forge.game.card.CardView;
import forge.gui.GuiBase; import forge.gui.GuiBase;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.sound.SoundEffectType;
import forge.sound.SoundSystem;
import forge.util.ImageFetcher; import forge.util.ImageFetcher;
import forge.util.ImageUtil; import forge.util.ImageUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -593,6 +595,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
return; return;
clicked = true; clicked = true;
flipProcess = 0; flipProcess = 0;
SoundSystem.instance.play(SoundEffectType.FlipCard, false);
} }
public void sold() { public void sold() {

Binary file not shown.

View File

@@ -16,6 +16,7 @@ import forge.game.event.GameEventCardDestroyed;
import forge.game.event.GameEventCardPhased; import forge.game.event.GameEventCardPhased;
import forge.game.event.GameEventCardRegenerated; import forge.game.event.GameEventCardRegenerated;
import forge.game.event.GameEventCardSacrificed; import forge.game.event.GameEventCardSacrificed;
import forge.game.event.GameEventCardStatsChanged;
import forge.game.event.GameEventCardTapped; import forge.game.event.GameEventCardTapped;
import forge.game.event.GameEventDayTimeChanged; import forge.game.event.GameEventDayTimeChanged;
import forge.game.event.GameEventFlipCoin; import forge.game.event.GameEventFlipCoin;
@@ -77,6 +78,12 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
return to == ZoneType.Exile ? SoundEffectType.Exile : null; return to == ZoneType.Exile ? SoundEffectType.Exile : null;
} }
@Override
public SoundEffectType visit(GameEventCardStatsChanged event) {
return event.transform ? SoundEffectType.FlipCard : null ;
}
@Override @Override
public SoundEffectType visit(final GameEventCardRegenerated event) { return SoundEffectType.Regen; } public SoundEffectType visit(final GameEventCardRegenerated event) { return SoundEffectType.Regen; }
@Override @Override

View File

@@ -59,6 +59,7 @@ public enum SoundEffectType {
Equip("equip.mp3", false), Equip("equip.mp3", false),
Exile("exile.mp3", false), Exile("exile.mp3", false),
FlipCoin("flip_coin.mp3", false), FlipCoin("flip_coin.mp3", false),
FlipCard("flip_card.mp3", false),
GreenBlackBlueLand("green_black_blue_land.mp3", false), GreenBlackBlueLand("green_black_blue_land.mp3", false),
GreenBlackLand("green_black_land.mp3", false), GreenBlackLand("green_black_land.mp3", false),
GreenBlueLand("green_blue_land.mp3", false), GreenBlueLand("green_blue_land.mp3", false),