Encapsulated game.getEvents into game - now fireEvent and subscribe methods are visible

This commit is contained in:
Maxmtg
2013-05-29 11:23:43 +00:00
parent f82e39df9c
commit 81c98d6000
17 changed files with 65 additions and 56 deletions

2
.gitattributes vendored
View File

@@ -14239,6 +14239,7 @@ src/main/java/forge/game/ai/ComputerUtilCombat.java -text
src/main/java/forge/game/ai/ComputerUtilCost.java -text
src/main/java/forge/game/ai/ComputerUtilMana.java -text
src/main/java/forge/game/event/GameEvent.java -text
src/main/java/forge/game/event/GameEventAnteCardsSelected.java -text
src/main/java/forge/game/event/GameEventBlockerAssigned.java -text
src/main/java/forge/game/event/GameEventCardDamaged.java -text
src/main/java/forge/game/event/GameEventCardDestroyed.java -text
@@ -14247,7 +14248,6 @@ src/main/java/forge/game/event/GameEventCardEquipped.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
src/main/java/forge/game/event/GameEventCardsAnted.java -text
src/main/java/forge/game/event/GameEventCounterAdded.java -text
src/main/java/forge/game/event/GameEventCounterRemoved.java -text
src/main/java/forge/game/event/GameEventDrawCard.java -text

View File

@@ -1154,7 +1154,7 @@ public class Card extends GameEntity implements Comparable<Card> {
}
// play the Add Counter sound
getGame().getEvents().post(new GameEventCounterAdded(addAmount));
getGame().fireEvent(new GameEventCounterAdded(addAmount));
this.updateObservers();
}
@@ -1235,7 +1235,7 @@ public class Card extends GameEntity implements Comparable<Card> {
}
// Play the Subtract Counter sound
getGame().getEvents().post(new GameEventCounterRemoved(delta));
getGame().fireEvent(new GameEventCounterRemoved(delta));
this.updateObservers();
}
@@ -3184,7 +3184,7 @@ public class Card extends GameEntity implements Comparable<Card> {
c.addEquippedBy(this);
// Play the Equip sound
getGame().getEvents().post(new GameEventCardEquipped());
getGame().fireEvent(new GameEventCardEquipped());
// run trigger
final HashMap<String, Object> runParams = new HashMap<String, Object>();
runParams.put("AttachSource", this);
@@ -4078,7 +4078,7 @@ public class Card extends GameEntity implements Comparable<Card> {
this.setTapped(true);
// Play the Tap sound
getGame().getEvents().post(new GameEventCardTapped(true));
getGame().fireEvent(new GameEventCardTapped(this, true));
}
/**
@@ -4094,7 +4094,7 @@ public class Card extends GameEntity implements Comparable<Card> {
getGame().getTriggerHandler().runTrigger(TriggerType.Untaps, runParams, false);
// Play the Untap sound
getGame().getEvents().post(new GameEventCardTapped(false));
getGame().fireEvent(new GameEventCardTapped(this, false));
}
for (final Command var : this.untapCommandList) {
@@ -7406,7 +7406,7 @@ public class Card extends GameEntity implements Comparable<Card> {
}
// Play the Damage sound
game.getEvents().post(new GameEventCardDamaged());
game.fireEvent(new GameEventCardDamaged());
}
getGame().getGameLog().add(GameEventType.DAMAGE, String.format("Dealing %d damage to %s. %s", damageToAdd, this.getName(), additionalLog));

View File

@@ -131,7 +131,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
public static boolean flipCoinNoCall(final Card source, final Player flipper) {
final boolean resultIsHeads = MyRandom.getRandom().nextBoolean();
flipper.getGame().getEvents().post(new GameEventFlipCoin());
flipper.getGame().fireEvent(new GameEventFlipCoin());
final StringBuilder result = new StringBuilder();
result.append(flipper.getName());
result.append("'s flip comes up");

View File

@@ -209,7 +209,7 @@ public class TokenEffect extends SpellAbilityEffect {
for(Card tok : tokens) {
controller.getGame().getAction().moveToPlay(tok);
}
controller.getGame().getEvents().post(new GameEventTokenCreated());
controller.getGame().fireEvent(new GameEventTokenCreated());
// Grant rule changes
if (this.tokenHiddenKeywords != null) {

View File

@@ -43,7 +43,7 @@ import forge.control.KeyboardShortcuts.Shortcut;
import forge.control.input.InputQueue;
import forge.game.GameState;
import forge.game.ai.AiProfileUtil;
import forge.game.event.GameEventCardsAnted;
import forge.game.event.GameEventAnteCardsSelected;
import forge.game.event.GameEventDuelFinished;
import forge.game.event.GameEvent;
import forge.game.event.GameEventTurnPhase;
@@ -377,7 +377,7 @@ public enum FControl {
inputQueue = new InputQueue();
this.game = game0;
game.getEvents().register(Singletons.getControl().getSoundSystem());
game.subscribeToEvents(Singletons.getControl().getSoundSystem());
LobbyPlayer humanLobbyPlayer = getLobby().getGuiPlayer();
// The UI controls should use these game data as models
@@ -401,7 +401,7 @@ public enum FControl {
// some observers were set in CMatchUI.initMatch
// Listen to DuelOutcome event to show ViewWinLose
game.getEvents().register(this);
game.subscribeToEvents(this);
VAntes.SINGLETON_INSTANCE.setModel(game.getRegisteredPlayers());
@@ -425,11 +425,11 @@ public enum FControl {
new ViewWinLose(game.getMatch());
SOverlayUtils.showOverlay();
} });
} else if ( ev instanceof GameEventCardsAnted ) {
} else if ( ev instanceof GameEventAnteCardsSelected ) {
// Require EDT here?
final String nl = System.getProperty("line.separator");
final StringBuilder msg = new StringBuilder();
for (final Pair<Player, Card> kv : ((GameEventCardsAnted) ev).cards) {
for (final Pair<Player, Card> kv : ((GameEventAnteCardsSelected) ev).cards) {
msg.append(kv.getKey().getName()).append(" ante: ").append(kv.getValue()).append(nl);
}
GuiDialog.message(msg.toString(), "Ante");

View File

@@ -1110,7 +1110,7 @@ public class GameAction {
if (c.getCounters(CounterType.LOYALTY) <= 0) {
moveToGraveyard(c);
// Play the Destroy sound
game.getEvents().post(new GameEventCardDestroyed());
game.fireEvent(new GameEventCardDestroyed());
recheck = true;
}
@@ -1164,7 +1164,7 @@ public class GameAction {
}
recheck = true;
// Play the Destroy sound
game.getEvents().post(new GameEventCardDestroyed());
game.fireEvent(new GameEventCardDestroyed());
}
}
@@ -1179,7 +1179,7 @@ public class GameAction {
this.sacrificeDestroy(c);
// Play the Sacrifice sound
game.getEvents().post(new GameEventCardSacrificed());
game.fireEvent(new GameEventCardSacrificed());
// Run triggers
final HashMap<String, Object> runParams = new HashMap<String, Object>();
@@ -1211,7 +1211,7 @@ public class GameAction {
game.getCombat().removeFromCombat(c);
// Play the Regen sound
game.getEvents().post(new GameEventCardRegenerated());
game.fireEvent(new GameEventCardRegenerated());
return false;
}
@@ -1263,7 +1263,7 @@ public class GameAction {
card.setDamage(0);
// Play the Destroy sound
game.getEvents().post(new GameEventCardDestroyed());
game.fireEvent(new GameEventCardDestroyed());
}
};
@@ -1280,7 +1280,7 @@ public class GameAction {
}
// Play the Destroy sound
game.getEvents().post(new GameEventCardDestroyed());
game.fireEvent(new GameEventCardDestroyed());
// Run triggers
final HashMap<String, Object> runParams = new HashMap<String, Object>();
runParams.put("Card", c);

View File

@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -37,6 +36,7 @@ import forge.CardUtil;
import forge.Command;
import forge.Constant;
import forge.CounterType;
import forge.card.MagicColor;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityFactory.AbilityRecordType;
@@ -55,12 +55,12 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityRestriction;
import forge.game.ai.AiController;
import forge.game.player.HumanPlay;
import forge.game.event.GameEventLifeLoss;
import forge.game.player.Player;
import forge.game.player.PlayerControllerAi;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.GuiDialog;
import forge.sound.SoundEffectType;
import forge.util.TextUtil;
@@ -439,7 +439,7 @@ public final class GameActionUtil {
c.getDamageHistory().registerCombatDamage(player);
// Play the Life Loss sound
player.getGame().getEvents().post(SoundEffectType.LifeLoss);
player.getGame().fireEvent(new GameEventLifeLoss());
} // executeCombatDamageToPlayerEffects
/**

View File

@@ -38,6 +38,7 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityStackInstance;
import forge.card.trigger.TriggerHandler;
import forge.card.trigger.TriggerType;
import forge.game.event.GameEvent;
import forge.game.phase.Cleanup;
import forge.game.phase.Combat;
import forge.game.phase.EndOfCombat;
@@ -521,10 +522,14 @@ public class GameState {
}
/**
* @return the events
* Fire only the events after they became real for gamestate and won't get replaced.<br>
* The events are sent to UI, log and sound system. Network listeners are under development.
*/
public EventBus getEvents() {
return events;
public void fireEvent(GameEvent event) {
events.post(event);
}
public void subscribeToEvents(Object subscriber) {
events.register(subscriber);
}
/**

View File

@@ -9,7 +9,7 @@ import com.google.common.collect.Lists;
import forge.Card;
import forge.Singletons;
import forge.game.event.GameEventCardsAnted;
import forge.game.event.GameEventAnteCardsSelected;
import forge.game.event.GameEventDuelFinished;
import forge.game.event.GameEventDuelOutcome;
import forge.game.event.GameEventFlipCoin;
@@ -88,10 +88,10 @@ public class MatchState {
gamesPlayed.add(result);
// The log shall listen to events and generate text internally
game.getEvents().post(new GameEventDuelOutcome(result, gamesPlayedRo));
game.fireEvent(new GameEventDuelOutcome(result, gamesPlayedRo));
// will pull UI
game.getEvents().post(new GameEventDuelFinished());
game.fireEvent(new GameEventDuelFinished());
}
@@ -110,7 +110,7 @@ public class MatchState {
if (useAnte) { // Deciding which cards go to ante
List<Pair<Player, Card>> list = GameNew.chooseCardsForAnte(currentGame);
GameNew.moveCardsToAnte(list);
currentGame.getEvents().post(new GameEventCardsAnted(list));
currentGame.fireEvent(new GameEventAnteCardsSelected(list));
}
// This code was run from EDT.
@@ -229,7 +229,7 @@ public class MatchState {
boolean isFirstGame = lastGameOutcome == null;
if (isFirstGame) {
game.getEvents().post(new GameEventFlipCoin()); // Play the Flip Coin sound
game.fireEvent(new GameEventFlipCoin()); // Play the Flip Coin sound
goesFirst = Aggregates.random(game.getPlayers());
} else {
for(Player p : game.getPlayers()) {

View File

@@ -5,9 +5,9 @@ import org.apache.commons.lang3.tuple.Pair;
import forge.Card;
import forge.game.player.Player;
public class GameEventCardsAnted extends GameEvent {
public class GameEventAnteCardsSelected extends GameEvent {
public final Iterable<Pair<Player,Card>> cards;
public GameEventCardsAnted(Iterable<Pair<Player,Card>> cardz) {
public GameEventAnteCardsSelected(Iterable<Pair<Player,Card>> cardz) {
cards = cardz;
}

View File

@@ -1,10 +1,14 @@
package forge.game.event;
public class GameEventCardTapped extends GameEvent {
public final boolean Tapped;
import forge.Card;
public GameEventCardTapped(boolean tapped) {
Tapped = tapped;
public class GameEventCardTapped extends GameEvent {
public final boolean tapped;
public final Card card;
public GameEventCardTapped(final Card card, final boolean tapped) {
this.tapped = tapped;
this.card = card;
}

View File

@@ -374,7 +374,7 @@ public class Combat {
} else {
this.blockerMap.get(blocker).add(attacker);
}
attacker.getGame().getEvents().post(new GameEventBlockerAssigned());
attacker.getGame().fireEvent(new GameEventBlockerAssigned());
}
public final void removeBlockAssignment(final Card attacker, final Card blocker) {

View File

@@ -200,7 +200,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
game.getGameLog().add(GameEventType.TURN, "Turn " + this.turn + " (" + this.getPlayerTurn() + ")");
}
game.getEvents().post(new GameEventTurnPhase(this.getPlayerTurn(), this.getPhase(), phaseType));
game.fireEvent(new GameEventTurnPhase(this.getPlayerTurn(), this.getPhase(), phaseType));
}
@@ -393,7 +393,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
p.loseLife(burn);
// Play the Mana Burn sound
game.getEvents().post(new GameEventManaBurn());
game.fireEvent(new GameEventManaBurn());
}
p.updateObservers();
}
@@ -426,7 +426,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
}
this.planarDiceRolledthisTurn = 0;
// Play the End Turn sound
game.getEvents().post(new GameEventEndOfTurn());
game.fireEvent(new GameEventEndOfTurn());
break;
default: // no action
}
@@ -716,7 +716,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
// If ever the karn's ultimate resolved
if( game.getAge() == GameAge.RestartedByKarn) {
phase = null;
game.getEvents().post(new GameEventGameRestarted(playerTurn));
game.fireEvent(new GameEventGameRestarted(playerTurn));
return;
}

View File

@@ -509,7 +509,7 @@ public class Player extends GameEntity implements Comparable<Player> {
if (toLose > 0) {
this.subtractLife(toLose);
lifeLost = toLose;
game.getEvents().post(new GameEventLifeLoss());
game.fireEvent(new GameEventLifeLoss());
this.updateObservers();
} else if (toLose == 0) {
// Rule 118.4
@@ -656,7 +656,7 @@ public class Player extends GameEntity implements Comparable<Player> {
source.getController().gainLife(damageToDo, source);
}
source.getDamageHistory().registerDamage(this);
this.getGame().getEvents().post(new GameEventLifeLoss());
this.getGame().fireEvent(new GameEventLifeLoss());
if (isCombat) {
final ArrayList<String> types = source.getType();
@@ -1020,7 +1020,7 @@ public class Player extends GameEntity implements Comparable<Player> {
if (!this.hasKeyword("You can't get poison counters")) {
this.poisonCounters += num;
game.getEvents().post(new GameEventPoisonCounter(this, source, num));
game.fireEvent(new GameEventPoisonCounter(this, source, num));
game.getGameLog().add(GameEventType.DAMAGE_POISON, this + " receives a poison counter from " + source);
this.updateObservers();
@@ -1267,7 +1267,7 @@ public class Player extends GameEntity implements Comparable<Player> {
}
// Play the Draw sound
game.getEvents().post(new GameEventDrawCard());
game.fireEvent(new GameEventDrawCard());
return drawn;
}
@@ -1605,13 +1605,13 @@ public class Player extends GameEntity implements Comparable<Player> {
if (discardToTopOfLibrary) {
game.getAction().moveToLibrary(c, 0);
// Play the Discard sound
game.getEvents().post(new GameEventCardDiscarded());
game.fireEvent(new GameEventCardDiscarded());
this.numDiscardedThisTurn++;
} else {
game.getAction().moveToGraveyard(c);
// Play the Discard sound
game.getEvents().post(new GameEventCardDiscarded());
game.fireEvent(new GameEventCardDiscarded());
this.numDiscardedThisTurn++;
}
@@ -1738,7 +1738,7 @@ public class Player extends GameEntity implements Comparable<Player> {
game.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams, false);
// Play the shuffle sound
game.getEvents().post(new GameEventShuffle());
game.fireEvent(new GameEventShuffle());
} // shuffle
// //////////////////////////////
@@ -1771,7 +1771,7 @@ public class Player extends GameEntity implements Comparable<Player> {
game.getGameLog().add(GameEventType.LAND, this + " played " + land);
// play a sound
game.getEvents().post(new GameEventLandPlayed(this, land));
game.fireEvent(new GameEventLandPlayed(this, land));
// Run triggers
final HashMap<String, Object> runParams = new HashMap<String, Object>();
@@ -2719,13 +2719,13 @@ public class Player extends GameEntity implements Comparable<Player> {
public final void releaseControl() {
controller = controllerCreator;
game.getEvents().post(new GameEventPlayerControl(this, getLobbyPlayer(), null));
game.fireEvent(new GameEventPlayerControl(this, getLobbyPlayer(), null));
}
public final void obeyNewMaster(PlayerController pc) {
LobbyPlayer oldController = getLobbyPlayer();
controller = pc;
game.getEvents().post(new GameEventPlayerControl(this, oldController, pc.getLobbyPlayer()));
game.fireEvent(new GameEventPlayerControl(this, oldController, pc.getLobbyPlayer()));
}
@@ -3126,7 +3126,7 @@ public class Player extends GameEntity implements Comparable<Player> {
* TODO: Write javadoc for this method.
*/
public void onMulliganned() {
game.getEvents().post(new GameEventMulligan(this)); // quest listener may interfere here
game.fireEvent(new GameEventMulligan(this)); // quest listener may interfere here
final int newHand = getCardsIn(ZoneType.Hand).size();
game.getGameLog().add(GameEventType.MULLIGAN, this + " has mulliganed down to " + newHand + " cards.");
stats.notifyHasMulliganed();

View File

@@ -617,7 +617,7 @@ public class MagicStack extends MyObservable implements Iterable<SpellAbilitySta
}
sa.getSourceCard().setXManaCostPaid(0);
game.getEvents().post(new GameEventSpellResolved(source, sa));
game.fireEvent(new GameEventSpellResolved(source, sa));
if (source.hasStartOfKeyword("Haunt") && !source.isCreature()
&& game.getZoneOf(source).is(ZoneType.Graveyard)) {

View File

@@ -100,7 +100,7 @@ public class GuiDialog {
final String winMsg = winFlip ? " wins flip." : " loses flip.";
// Play the Flip A Coin sound
caller.getGame().getEvents().post(new GameEventFlipCoin());
caller.getGame().fireEvent(new GameEventFlipCoin());
JOptionPane.showMessageDialog(null, source.getName() + " - " + caller + winMsg, source.getName(),
JOptionPane.PLAIN_MESSAGE);

View File

@@ -78,7 +78,7 @@ public class EventVisualizer {
}
}
if (evt instanceof GameEventCardTapped) {
return getSoundEffectForTapState(((GameEventCardTapped) evt).Tapped);
return getSoundEffectForTapState(((GameEventCardTapped) evt).tapped);
}
if (evt instanceof GameEventDuelOutcome) {
return getSoundEffectForDuelOutcome(((GameEventDuelOutcome) evt).result.getWinner() == Singletons.getControl().getLobby().getGuiPlayer());