Merge branch 'dicesfx' into 'master'

Sound effect for dice rolling!

See merge request core-developers/forge!5176
This commit is contained in:
Michael Kamensky
2021-08-04 05:08:28 +00:00
7 changed files with 21 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import forge.game.event.GameEventRollDie;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import forge.game.ability.AbilityKey; import forge.game.ability.AbilityKey;
@@ -75,6 +76,8 @@ public class RollDiceEffect extends SpellAbilityEffect {
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
int roll = MyRandom.getRandom().nextInt(sides) + 1; int roll = MyRandom.getRandom().nextInt(sides) + 1;
// Play the die roll sound
player.getGame().fireEvent(new GameEventRollDie());
rolls.add(roll); rolls.add(roll);
total += roll; total += roll;
} }

View File

@@ -3,6 +3,7 @@ package forge.game.ability.effects;
import forge.game.Game; import forge.game.Game;
import forge.game.PlanarDice; import forge.game.PlanarDice;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
import forge.game.event.GameEventRollDie;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.util.Localizer; import forge.util.Localizer;
@@ -26,6 +27,8 @@ public class RollPlanarDiceEffect extends SpellAbilityEffect {
game.getPhaseHandler().incPlanarDiceRolledthisTurn(); game.getPhaseHandler().incPlanarDiceRolledthisTurn();
} }
PlanarDice result = PlanarDice.roll(activator, null); PlanarDice result = PlanarDice.roll(activator, null);
// Play the die roll sound
activator.getGame().fireEvent(new GameEventRollDie());
String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", activator.getName(), result.toString()); String message = Localizer.getInstance().getMessage("lblPlayerRolledResult", activator.getName(), result.toString());
game.getAction().notifyOfValue(sa, activator, message, null); game.getAction().notifyOfValue(sa, activator, message, null);

View File

@@ -0,0 +1,9 @@
package forge.game.event;
public class GameEventRollDie extends GameEvent {
@Override
public <T> T visit(IGameEventVisitor<T> visitor) {
return visitor.visit(this);
}
}

View File

@@ -38,6 +38,7 @@ public interface IGameEventVisitor<T> {
T visit(GameEventPlayerPoisoned event); T visit(GameEventPlayerPoisoned event);
T visit(GameEventPlayerPriority event); T visit(GameEventPlayerPriority event);
T visit(GameEventPlayerStatsChanged event); T visit(GameEventPlayerStatsChanged event);
T visit(GameEventRollDie event);
T visit(GameEventTokenStateUpdate event); T visit(GameEventTokenStateUpdate event);
T visit(GameEventScry event); T visit(GameEventScry event);
T visit(GameEventShuffle event); T visit(GameEventShuffle event);
@@ -88,6 +89,7 @@ public interface IGameEventVisitor<T> {
public T visit(GameEventPlayerPoisoned event) { return null; } public T visit(GameEventPlayerPoisoned event) { return null; }
public T visit(GameEventPlayerPriority event) { return null; } public T visit(GameEventPlayerPriority event) { return null; }
public T visit(GameEventPlayerStatsChanged event) { return null; } public T visit(GameEventPlayerStatsChanged event) { return null; }
public T visit(GameEventRollDie event) { return null; }
public T visit(GameEventTokenStateUpdate event) { return null; } public T visit(GameEventTokenStateUpdate event) { return null; }
public T visit(GameEventScry event) { return null; } public T visit(GameEventScry event) { return null; }
public T visit(GameEventShuffle event) { return null; } public T visit(GameEventShuffle event) { return null; }

Binary file not shown.

View File

@@ -23,6 +23,7 @@ import forge.game.event.GameEventLandPlayed;
import forge.game.event.GameEventManaBurn; import forge.game.event.GameEventManaBurn;
import forge.game.event.GameEventPlayerLivesChanged; import forge.game.event.GameEventPlayerLivesChanged;
import forge.game.event.GameEventPlayerPoisoned; import forge.game.event.GameEventPlayerPoisoned;
import forge.game.event.GameEventRollDie;
import forge.game.event.GameEventShuffle; import forge.game.event.GameEventShuffle;
import forge.game.event.GameEventSpellResolved; import forge.game.event.GameEventSpellResolved;
import forge.game.event.GameEventTokenCreated; import forge.game.event.GameEventTokenCreated;
@@ -85,6 +86,8 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> imp
@Override @Override
public SoundEffectType visit(final GameEventFlipCoin event) { return SoundEffectType.FlipCoin; } public SoundEffectType visit(final GameEventFlipCoin event) { return SoundEffectType.FlipCoin; }
@Override @Override
public SoundEffectType visit(final GameEventRollDie event) { return SoundEffectType.RollDie; }
@Override
public SoundEffectType visit(final GameEventPlayerLivesChanged event) { return event.newLives < event.oldLives ? SoundEffectType.LifeLoss : SoundEffectType.LifeGain; } public SoundEffectType visit(final GameEventPlayerLivesChanged event) { return event.newLives < event.oldLives ? SoundEffectType.LifeLoss : SoundEffectType.LifeGain; }
@Override @Override
public SoundEffectType visit(final GameEventManaBurn event) { return SoundEffectType.ManaBurn; } public SoundEffectType visit(final GameEventManaBurn event) { return SoundEffectType.ManaBurn; }

View File

@@ -79,6 +79,7 @@ public enum SoundEffectType {
RedLand("red_land.mp3", false), RedLand("red_land.mp3", false),
Regen("regeneration.mp3", false), Regen("regeneration.mp3", false),
RemoveCounter("remove_counter.mp3", true), RemoveCounter("remove_counter.mp3", true),
RollDie("roll_die.mp3", false),
Sacrifice("sacrifice.mp3", true), Sacrifice("sacrifice.mp3", true),
ScriptedEffect("", false), // Plays the effect defined by SVar:SoundEffect ScriptedEffect("", false), // Plays the effect defined by SVar:SoundEffect
Shuffle("shuffle.mp3", false), Shuffle("shuffle.mp3", false),