diff --git a/.gitattributes b/.gitattributes index 9ef04c3f889..ff02e544ea8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14232,7 +14232,6 @@ src/main/java/forge/game/event/GameEventCounterRemoved.java -text src/main/java/forge/game/event/GameEventDrawCard.java -text src/main/java/forge/game/event/GameEventDuelFinished.java -text src/main/java/forge/game/event/GameEventDuelOutcome.java -text -src/main/java/forge/game/event/GameEventEndOfTurn.java -text src/main/java/forge/game/event/GameEventFlipCoin.java -text src/main/java/forge/game/event/GameEventGameRestarted.java -text src/main/java/forge/game/event/GameEventLandPlayed.java -text @@ -14245,6 +14244,8 @@ src/main/java/forge/game/event/GameEventPlayerPoisoned.java -text src/main/java/forge/game/event/GameEventShuffle.java -text src/main/java/forge/game/event/GameEventSpellResolved.java -text src/main/java/forge/game/event/GameEventTokenCreated.java -text +src/main/java/forge/game/event/GameEventTurnBegan.java -text +src/main/java/forge/game/event/GameEventTurnEnded.java -text src/main/java/forge/game/event/GameEventTurnPhase.java -text src/main/java/forge/game/event/IGameEventVisitor.java -text src/main/java/forge/game/event/package-info.java -text diff --git a/src/main/java/forge/GameLogFormatter.java b/src/main/java/forge/GameLogFormatter.java index e4ea2c60431..c677d8d6008 100644 --- a/src/main/java/forge/GameLogFormatter.java +++ b/src/main/java/forge/GameLogFormatter.java @@ -9,8 +9,11 @@ import com.google.common.eventbus.Subscribe; import forge.game.GameOutcome; import forge.game.event.GameEventCardDamaged; import forge.game.event.GameEventCardDamaged.DamageType; +import forge.game.event.GameEventLandPlayed; import forge.game.event.GameEventPlayerDamaged; import forge.game.event.GameEventPlayerPoisoned; +import forge.game.event.GameEventSpellResolved; +import forge.game.event.GameEventTurnBegan; import forge.game.event.IGameEventVisitor; import forge.game.event.GameEventDuelOutcome; import forge.game.event.GameEvent; @@ -47,6 +50,15 @@ public class GameLogFormatter extends IGameEventVisitor.Base { } + /* (non-Javadoc) + * @see forge.game.event.IGameEventVisitor.Base#visit(forge.game.event.GameEventSpellResolved) + */ + @Override + public GameLogEntry visit(GameEventSpellResolved ev) { + String messageForLog = ev.hasFizzled ? ev.spell.getSourceCard().getName() + " ability fizzles." : ev.spell.getStackDescription(); + return new GameLogEntry(GameLogEntryType.STACK_RESOLVE, messageForLog); + } + private GameLogEntry generateSummary(List gamesPlayed) { GameOutcome outcome1 = gamesPlayed.get(0); int[] wins = new int[outcome1.getNumPlayers()]; @@ -103,6 +115,20 @@ public class GameLogFormatter extends IGameEventVisitor.Base { return new GameLogEntry(GameLogEntryType.DAMAGE, message); } + /* (non-Javadoc) + * @see forge.game.event.IGameEventVisitor.Base#visit(forge.game.event.GameEventLandPlayed) + */ + @Override + public GameLogEntry visit(GameEventLandPlayed ev) { + String message = String.format("%s played %s", ev.player, ev.land); + return new GameLogEntry(GameLogEntryType.LAND, message); + } + + @Override + public GameLogEntry visit(GameEventTurnBegan event) { + String message = String.format( "Turn %d (%s)", event.turnNumber, event.turnOwner); + return new GameLogEntry(GameLogEntryType.TURN, message); + } @Override public GameLogEntry visit(GameEventPlayerDamaged ev) { diff --git a/src/main/java/forge/game/event/GameEventLandPlayed.java b/src/main/java/forge/game/event/GameEventLandPlayed.java index f8e9a9b962d..bcfdad0c81e 100644 --- a/src/main/java/forge/game/event/GameEventLandPlayed.java +++ b/src/main/java/forge/game/event/GameEventLandPlayed.java @@ -5,12 +5,12 @@ import forge.game.player.Player; public class GameEventLandPlayed extends GameEvent { - public final Player Player; - public final Card Land; + public final Player player; + public final Card land; public GameEventLandPlayed(Player player, Card land) { - Player = player; - Land = land; + this.player = player; + this.land = land; } diff --git a/src/main/java/forge/game/event/GameEventSpellResolved.java b/src/main/java/forge/game/event/GameEventSpellResolved.java index 55cef11b9df..9aba28b3337 100644 --- a/src/main/java/forge/game/event/GameEventSpellResolved.java +++ b/src/main/java/forge/game/event/GameEventSpellResolved.java @@ -1,6 +1,5 @@ package forge.game.event; -import forge.Card; import forge.card.spellability.SpellAbility; /** @@ -9,18 +8,19 @@ import forge.card.spellability.SpellAbility; */ public class GameEventSpellResolved extends GameEvent { - public final Card Source; - public final SpellAbility Spell; + public final SpellAbility spell; + public final boolean hasFizzled; /** * TODO: Write javadoc for Constructor. * @param source * @param sa + * @param hasFizzled */ - public GameEventSpellResolved(Card source, SpellAbility sa) { + public GameEventSpellResolved(SpellAbility sa, boolean hasFizzled) { // TODO Auto-generated constructor stub - Source = source; - Spell = sa; + this.spell = sa; + this.hasFizzled = hasFizzled; } diff --git a/src/main/java/forge/game/event/GameEventTurnBegan.java b/src/main/java/forge/game/event/GameEventTurnBegan.java new file mode 100644 index 00000000000..2322530a0d4 --- /dev/null +++ b/src/main/java/forge/game/event/GameEventTurnBegan.java @@ -0,0 +1,20 @@ +package forge.game.event; + +import forge.game.player.Player; + +public class GameEventTurnBegan extends GameEvent { + + public final Player turnOwner; + public final int turnNumber; + + public GameEventTurnBegan(Player turnOwner, int turnNumber) { + super(); + this.turnOwner = turnOwner; + this.turnNumber = turnNumber; + } + + @Override + public T visit(IGameEventVisitor visitor) { + return visitor.visit(this); + } +} \ No newline at end of file diff --git a/src/main/java/forge/game/event/GameEventEndOfTurn.java b/src/main/java/forge/game/event/GameEventTurnEnded.java similarity index 69% rename from src/main/java/forge/game/event/GameEventEndOfTurn.java rename to src/main/java/forge/game/event/GameEventTurnEnded.java index b93f3e9b002..3c4dcd0607e 100644 --- a/src/main/java/forge/game/event/GameEventEndOfTurn.java +++ b/src/main/java/forge/game/event/GameEventTurnEnded.java @@ -1,10 +1,10 @@ package forge.game.event; -public class GameEventEndOfTurn extends GameEvent { +public class GameEventTurnEnded extends GameEvent { @Override public T visit(IGameEventVisitor visitor) { return visitor.visit(this); } -} +} \ No newline at end of file diff --git a/src/main/java/forge/game/event/IGameEventVisitor.java b/src/main/java/forge/game/event/IGameEventVisitor.java index 0e2da2ad7d9..f7592208550 100644 --- a/src/main/java/forge/game/event/IGameEventVisitor.java +++ b/src/main/java/forge/game/event/IGameEventVisitor.java @@ -19,7 +19,6 @@ public interface IGameEventVisitor { T visit(GameEventDrawCard event); T visit(GameEventDuelFinished event); T visit(GameEventDuelOutcome event); - T visit(GameEventEndOfTurn event); T visit(GameEventFlipCoin event); T visit(GameEventGameRestarted event); T visit(GameEventLandPlayed event); @@ -32,6 +31,8 @@ public interface IGameEventVisitor { T visit(GameEventShuffle event); T visit(GameEventSpellResolved event); T visit(GameEventTokenCreated event); + T visit(GameEventTurnBegan gameEventTurnBegan); + T visit(GameEventTurnEnded event); T visit(GameEventTurnPhase event); @@ -51,7 +52,6 @@ public interface IGameEventVisitor { public T visit(GameEventDrawCard event) { return null; } public T visit(GameEventDuelFinished event) { return null; } public T visit(GameEventDuelOutcome event) { return null; } - public T visit(GameEventEndOfTurn event) { return null; } public T visit(GameEventFlipCoin event) { return null; } public T visit(GameEventGameRestarted event) { return null; } public T visit(GameEventLandPlayed event) { return null; } @@ -63,8 +63,13 @@ public interface IGameEventVisitor { public T visit(GameEventShuffle event) { return null; } public T visit(GameEventSpellResolved event) { return null; } public T visit(GameEventTokenCreated event) { return null; } + public T visit(GameEventTurnBegan event) { return null; } + public T visit(GameEventTurnEnded event) { return null; } public T visit(GameEventTurnPhase event) { return null; } public T visit(GameEventPlayerDamaged event) { return null; } } + + + } diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 09c426f2f85..14ea258984e 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -26,14 +26,14 @@ import org.apache.commons.lang.time.StopWatch; import forge.Card; import forge.CardLists; import forge.FThreads; -import forge.GameLogEntryType; import forge.Singletons; import forge.CardPredicates.Presets; import forge.card.trigger.TriggerType; import forge.game.GameAge; import forge.game.Game; import forge.game.GameType; -import forge.game.event.GameEventEndOfTurn; +import forge.game.event.GameEventTurnBegan; +import forge.game.event.GameEventTurnEnded; import forge.game.event.GameEventGameRestarted; import forge.game.event.GameEventManaBurn; import forge.game.event.GameEventTurnPhase; @@ -197,7 +197,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (this.phase == PhaseType.UNTAP) { this.turn++; - game.getGameLog().add(GameLogEntryType.TURN, "Turn " + this.turn + " (" + this.getPlayerTurn() + ")"); + game.fireEvent(new GameEventTurnBegan(playerTurn, turn)); } game.fireEvent(new GameEventTurnPhase(this.getPlayerTurn(), this.getPhase(), phaseType)); @@ -426,7 +426,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } this.planarDiceRolledthisTurn = 0; // Play the End Turn sound - game.fireEvent(new GameEventEndOfTurn()); + game.fireEvent(new GameEventTurnEnded()); break; default: // no action } diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 94da30ffc99..e2795092158 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -1762,9 +1762,6 @@ public class Player extends GameEntity implements Comparable { // etc...) game.getAction().checkStateEffects(); - // add to log - game.getGameLog().add(GameLogEntryType.LAND, this + " played " + land); - // play a sound game.fireEvent(new GameEventLandPlayed(this, land)); diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 8ead96df0aa..6a0bfaad85b 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -601,8 +601,7 @@ public class MagicStack extends MyObservable implements Iterable { public SoundEffectType visit(GameEventCounterAdded event) { return event.Amount > 0 ? SoundEffectType.AddCounter : null; } public SoundEffectType visit(GameEventCounterRemoved event) { return event.Amount > 0 ? SoundEffectType.RemoveCounter : null; } public SoundEffectType visit(GameEventDrawCard event) { return SoundEffectType.Draw; } - public SoundEffectType visit(GameEventEndOfTurn event) { return SoundEffectType.EndOfTurn; } + public SoundEffectType visit(GameEventTurnEnded event) { return SoundEffectType.EndOfTurn; } public SoundEffectType visit(GameEventFlipCoin event) { return SoundEffectType.FlipCoin; } public SoundEffectType visit(GameEventLifeLoss event) { return SoundEffectType.LifeLoss; } public SoundEffectType visit(GameEventPlayerPoisoned event) { return SoundEffectType.Poison; } @@ -63,14 +63,12 @@ public class EventVisualizer extends IGameEventVisitor.Base { * ability resolves on the stack. */ public SoundEffectType visit(GameEventSpellResolved evt) { - Card source = evt.Source; - SpellAbility sa = evt.Spell; - - if (sa == null || source == null) { + if (evt.spell == null ) { return null; } - if (sa.isSpell()) { + Card source = evt.spell.getSourceCard(); + if (!evt.spell.isSpell()) { // if there's a specific effect for this particular card, play it and // we're done. if (hasSpecificCardEffect(source)) { @@ -115,18 +113,17 @@ public class EventVisualizer extends IGameEventVisitor.Base { * @return the sound effect type */ public SoundEffectType visit(GameEventLandPlayed event) { - Card land = event.Land; - if (land == null) { + if (event.land == null) { return null; } // if there's a specific effect for this particular card, play it and // we're done. - if (hasSpecificCardEffect(land)) { + if (hasSpecificCardEffect(event.land)) { return SoundEffectType.ScriptedEffect; } - for (SpellAbility sa : land.getManaAbility()) { + for (SpellAbility sa : event.land.getManaAbility()) { String manaColors = sa.getManaPartRecursive().getOrigProduced(); if (manaColors.contains("B")) return SoundEffectType.BlackLand; @@ -168,9 +165,9 @@ public class EventVisualizer extends IGameEventVisitor.Base { Card c = null; if (evt instanceof GameEventSpellResolved) { - c = ((GameEventSpellResolved) evt).Source; + c = ((GameEventSpellResolved) evt).spell.getSourceCard(); } else if (evt instanceof GameEventLandPlayed) { - c = ((GameEventLandPlayed) evt).Land; + c = ((GameEventLandPlayed) evt).land; } return c != null ? c.getSVar("SoundEffect") : "";