diff --git a/.gitattributes b/.gitattributes index aa24db74f63..98f06325073 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14446,11 +14446,11 @@ src/main/java/forge/game/event/GameEventAnteCardsSelected.java -text src/main/java/forge/game/event/GameEventAttackersDeclared.java -text src/main/java/forge/game/event/GameEventBlockerAssigned.java -text src/main/java/forge/game/event/GameEventBlockersDeclared.java -text +src/main/java/forge/game/event/GameEventCardChangeZone.java -text src/main/java/forge/game/event/GameEventCardDamaged.java -text src/main/java/forge/game/event/GameEventCardDestroyed.java -text src/main/java/forge/game/event/GameEventCardDiscarded.java -text src/main/java/forge/game/event/GameEventCardEquipped.java -text -src/main/java/forge/game/event/GameEventCardExiled.java -text src/main/java/forge/game/event/GameEventCardRegenerated.java -text src/main/java/forge/game/event/GameEventCardSacrificed.java -text src/main/java/forge/game/event/GameEventCardTapped.java -text diff --git a/src/main/java/forge/game/GameAction.java b/src/main/java/forge/game/GameAction.java index 2ba628aa50b..9c3cd93587d 100644 --- a/src/main/java/forge/game/GameAction.java +++ b/src/main/java/forge/game/GameAction.java @@ -58,8 +58,8 @@ import forge.card.trigger.Trigger; import forge.card.trigger.TriggerType; import forge.card.trigger.ZCTrigger; import forge.game.ai.ComputerUtil; +import forge.game.event.GameEventCardChangeZone; import forge.game.event.GameEventCardDestroyed; -import forge.game.event.GameEventCardExiled; import forge.game.event.GameEventCardRegenerated; import forge.game.event.GameEventCardSacrificed; import forge.game.event.GameEventGameFinished; @@ -123,6 +123,10 @@ public class GameAction { * @return a {@link forge.Card} object. */ public Card changeZone(final Zone zoneFrom, final Zone zoneTo, final Card c, Integer position) { + // play the Exile sound + game.fireEvent(new GameEventCardChangeZone(c, zoneFrom, zoneTo)); + + if (c.isCopiedSpell()) { if ((zoneFrom != null)) { zoneFrom.remove(c); @@ -693,10 +697,6 @@ public class GameAction { return c; } final PlayerZone removed = c.getOwner().getZone(ZoneType.Exile); - - // play the Exile sound - game.fireEvent(new GameEventCardExiled()); - return moveTo(removed, c); } diff --git a/src/main/java/forge/game/event/GameEventCardChangeZone.java b/src/main/java/forge/game/event/GameEventCardChangeZone.java new file mode 100644 index 00000000000..d70c275144c --- /dev/null +++ b/src/main/java/forge/game/event/GameEventCardChangeZone.java @@ -0,0 +1,24 @@ +package forge.game.event; + +import forge.Card; +import forge.game.zone.Zone; + +public class GameEventCardChangeZone extends GameEvent { + + + public final Card card; + public final Zone from; + public final Zone to; + + public GameEventCardChangeZone(Card c, Zone zoneFrom, Zone zoneTo) { + card = c; + from = zoneFrom; + to = zoneTo; + } + + @Override + public T visit(IGameEventVisitor visitor) { + return visitor.visit(this); + } +} + diff --git a/src/main/java/forge/game/event/GameEventCardExiled.java b/src/main/java/forge/game/event/GameEventCardExiled.java deleted file mode 100644 index 02e3473b9ea..00000000000 --- a/src/main/java/forge/game/event/GameEventCardExiled.java +++ /dev/null @@ -1,10 +0,0 @@ -package forge.game.event; - -public class GameEventCardExiled extends GameEvent { - - @Override - public T visit(IGameEventVisitor visitor) { - return visitor.visit(this); - } -} - diff --git a/src/main/java/forge/game/event/IGameEventVisitor.java b/src/main/java/forge/game/event/IGameEventVisitor.java index a07c7593005..43f9d2fb853 100644 --- a/src/main/java/forge/game/event/IGameEventVisitor.java +++ b/src/main/java/forge/game/event/IGameEventVisitor.java @@ -12,7 +12,7 @@ public interface IGameEventVisitor { T visit(GameEventCardDestroyed event); T visit(GameEventCardDiscarded event); T visit(GameEventCardEquipped event); - T visit(GameEventCardExiled event); + T visit(GameEventCardChangeZone event); T visit(GameEventCardRegenerated event); T visit(GameEventCardSacrificed event); T visit(GameEventAnteCardsSelected event); @@ -52,7 +52,7 @@ public interface IGameEventVisitor { public T visit(GameEventCardDestroyed event) { return null; } public T visit(GameEventCardDiscarded event) { return null; } public T visit(GameEventCardEquipped event) { return null; } - public T visit(GameEventCardExiled event) { return null; } + public T visit(GameEventCardChangeZone event) { return null; } public T visit(GameEventCardRegenerated event) { return null; } public T visit(GameEventCardSacrificed event) { return null; } public T visit(GameEventAnteCardsSelected event) { return null; } diff --git a/src/main/java/forge/game/limited/LimitedDeckBuilder.java b/src/main/java/forge/game/limited/LimitedDeckBuilder.java index 8731e15b2e4..426d7067d71 100644 --- a/src/main/java/forge/game/limited/LimitedDeckBuilder.java +++ b/src/main/java/forge/game/limited/LimitedDeckBuilder.java @@ -303,7 +303,7 @@ public class LimitedDeckBuilder { final float p = (float) clrCnts[i] / (float) totalColor; final int nLand = Math.round(landsNeeded * p); // desired truncation to int if (Preferences.DEV_MODE) { - System.out.printf("Basics[%s]: %d/%d = %f%% = %d cards", Constant.Color.BASIC_LANDS.get(i), clrCnts[i], totalColor, 100*p, nLand); + System.out.printf("Basics[%s]: %d/%d = %f%% = %d cards%n", Constant.Color.BASIC_LANDS.get(i), clrCnts[i], totalColor, 100*p, nLand); } for (int j = 0; j < nLand; j++) { diff --git a/src/main/java/forge/sound/EventVisualizer.java b/src/main/java/forge/sound/EventVisualizer.java index a632cc83205..d59c4b04f9c 100644 --- a/src/main/java/forge/sound/EventVisualizer.java +++ b/src/main/java/forge/sound/EventVisualizer.java @@ -4,6 +4,7 @@ import forge.Card; import forge.Singletons; import forge.card.spellability.SpellAbility; import forge.game.event.GameEventBlockerAssigned; +import forge.game.event.GameEventCardChangeZone; import forge.game.event.GameEventCardDamaged; import forge.game.event.GameEventCardDestroyed; import forge.game.event.GameEventCardDiscarded; @@ -16,7 +17,6 @@ import forge.game.event.GameEventDrawCard; import forge.game.event.GameEventGameOutcome; import forge.game.event.GameEventTurnEnded; import forge.game.event.GameEvent; -import forge.game.event.GameEventCardExiled; import forge.game.event.GameEventFlipCoin; import forge.game.event.GameEventLandPlayed; import forge.game.event.GameEventLifeLoss; @@ -26,6 +26,7 @@ import forge.game.event.GameEventShuffle; import forge.game.event.GameEventSpellResolved; import forge.game.event.GameEventTokenCreated; import forge.game.event.IGameEventVisitor; +import forge.game.zone.ZoneType; /** * This class is in charge of converting any forge.game.event.Event to a SoundEffectType. @@ -39,7 +40,7 @@ public class EventVisualizer extends IGameEventVisitor.Base { public SoundEffectType visit(GameEventCardDestroyed event) { return SoundEffectType.Destroy; } public SoundEffectType visit(GameEventCardDiscarded event) { return SoundEffectType.Discard; } public SoundEffectType visit(GameEventCardEquipped event) { return SoundEffectType.Equip; } - public SoundEffectType visit(GameEventCardExiled event) { return SoundEffectType.Exile; } + public SoundEffectType visit(GameEventCardChangeZone event) { return event.to.getZoneType() == ZoneType.Exile ? SoundEffectType.Exile : null; } public SoundEffectType visit(GameEventCardRegenerated event) { return SoundEffectType.Regen; } public SoundEffectType visit(GameEventCardSacrificed event) { return SoundEffectType.Sacrifice; } public SoundEffectType visit(GameEventCounterAdded event) { return event.Amount > 0 ? SoundEffectType.AddCounter : null; }