mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
more events instead of direct calls are used for both log and sound system
This commit is contained in:
@@ -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<GameLogEntry> {
|
||||
}
|
||||
|
||||
|
||||
/* (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<GameOutcome> gamesPlayed) {
|
||||
GameOutcome outcome1 = gamesPlayed.get(0);
|
||||
int[] wins = new int[outcome1.getNumPlayers()];
|
||||
@@ -103,6 +115,20 @@ public class GameLogFormatter extends IGameEventVisitor.Base<GameLogEntry> {
|
||||
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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
20
src/main/java/forge/game/event/GameEventTurnBegan.java
Normal file
20
src/main/java/forge/game/event/GameEventTurnBegan.java
Normal file
@@ -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> T visit(IGameEventVisitor<T> visitor) {
|
||||
return visitor.visit(this);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package forge.game.event;
|
||||
|
||||
public class GameEventEndOfTurn extends GameEvent {
|
||||
public class GameEventTurnEnded extends GameEvent {
|
||||
|
||||
|
||||
@Override
|
||||
public <T> T visit(IGameEventVisitor<T> visitor) {
|
||||
return visitor.visit(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,6 @@ public interface IGameEventVisitor<T> {
|
||||
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> {
|
||||
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<T> {
|
||||
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<T> {
|
||||
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; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -1762,9 +1762,6 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
// etc...)
|
||||
game.getAction().checkStateEffects();
|
||||
|
||||
// add to log
|
||||
game.getGameLog().add(GameLogEntryType.LAND, this + " played " + land);
|
||||
|
||||
// play a sound
|
||||
game.fireEvent(new GameEventLandPlayed(this, land));
|
||||
|
||||
|
||||
@@ -601,8 +601,7 @@ public class MagicStack extends MyObservable implements Iterable<SpellAbilitySta
|
||||
curResolvingCard = source;
|
||||
|
||||
boolean thisHasFizzled = this.hasFizzled(sa, source, false);
|
||||
String messageForLog = thisHasFizzled ? source.getName() + " ability fizzles." : sa.getStackDescription();
|
||||
game.getGameLog().add(GameLogEntryType.STACK_RESOLVE, messageForLog);
|
||||
|
||||
if (thisHasFizzled) { // Fizzle
|
||||
// TODO: Spell fizzles, what's the best way to alert player?
|
||||
Log.debug(source.getName() + " ability fizzles.");
|
||||
@@ -617,7 +616,7 @@ public class MagicStack extends MyObservable implements Iterable<SpellAbilitySta
|
||||
}
|
||||
sa.getSourceCard().setXManaCostPaid(0);
|
||||
|
||||
game.fireEvent(new GameEventSpellResolved(source, sa));
|
||||
game.fireEvent(new GameEventSpellResolved(sa, thisHasFizzled));
|
||||
|
||||
if (source.hasStartOfKeyword("Haunt") && !source.isCreature()
|
||||
&& game.getZoneOf(source).is(ZoneType.Graveyard)) {
|
||||
|
||||
@@ -14,7 +14,7 @@ import forge.game.event.GameEventCounterAdded;
|
||||
import forge.game.event.GameEventCounterRemoved;
|
||||
import forge.game.event.GameEventDrawCard;
|
||||
import forge.game.event.GameEventDuelOutcome;
|
||||
import forge.game.event.GameEventEndOfTurn;
|
||||
import forge.game.event.GameEventTurnEnded;
|
||||
import forge.game.event.GameEvent;
|
||||
import forge.game.event.GameEventFlipCoin;
|
||||
import forge.game.event.GameEventLandPlayed;
|
||||
@@ -43,7 +43,7 @@ public class EventVisualizer extends IGameEventVisitor.Base<SoundEffectType> {
|
||||
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<SoundEffectType> {
|
||||
* 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<SoundEffectType> {
|
||||
* @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<SoundEffectType> {
|
||||
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") : "";
|
||||
|
||||
Reference in New Issue
Block a user