diff --git a/forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java b/forge-game/src/main/java/forge/game/event/GameEventTokenStateUpdate.java similarity index 57% rename from forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java rename to forge-game/src/main/java/forge/game/event/GameEventTokenStateUpdate.java index d03bdbbcca3..0aa22fe26a8 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java +++ b/forge-game/src/main/java/forge/game/event/GameEventTokenStateUpdate.java @@ -2,15 +2,14 @@ package forge.game.event; import forge.game.card.Card; +import java.util.Arrays; import java.util.Collection; -import java.util.List; -public class GameEventRemoveSummoningSickness extends GameEvent { +public class GameEventTokenStateUpdate extends GameEvent { public final Collection cards; - - public GameEventRemoveSummoningSickness(List affected) { - cards = affected; + public GameEventTokenStateUpdate(Card affected) { + cards = Arrays.asList(affected); } @Override diff --git a/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java b/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java index 4a2d21ea06b..d78e2c4fc66 100644 --- a/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java +++ b/forge-game/src/main/java/forge/game/event/IGameEventVisitor.java @@ -37,7 +37,7 @@ public interface IGameEventVisitor { T visit(GameEventPlayerPoisoned event); T visit(GameEventPlayerPriority event); T visit(GameEventPlayerStatsChanged event); - T visit(GameEventRemoveSummoningSickness event); + T visit(GameEventTokenStateUpdate event); T visit(GameEventScry event); T visit(GameEventShuffle event); T visit(GameEventSpellAbilityCast gameEventSpellAbilityCast); @@ -84,7 +84,7 @@ public interface IGameEventVisitor { public T visit(GameEventPlayerPoisoned event) { return null; } public T visit(GameEventPlayerPriority event) { return null; } public T visit(GameEventPlayerStatsChanged event) { return null; } - public T visit(GameEventRemoveSummoningSickness event) { return null; } + public T visit(GameEventTokenStateUpdate event) { return null; } public T visit(GameEventScry event) { return null; } public T visit(GameEventShuffle event) { return null; } public T visit(GameEventSpellResolved event) { return null; } diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index 6ed0154586b..1ce81e14925 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -73,7 +73,6 @@ public class PhaseHandler implements java.io.Serializable { private final transient Stack extraTurns = new Stack<>(); private final transient Map> extraPhases = Maps.newEnumMap(PhaseType.class); - private final List toUpdate = new ArrayList<>(); private int nUpkeepsThisTurn = 0; private int nUpkeepsThisGame = 0; @@ -178,11 +177,10 @@ public class PhaseHandler implements java.io.Serializable { // Tokens starting game in play should suffer from Sum. Sickness final CardCollectionView list = playerTurn.getCardsIncludePhasingIn(ZoneType.Battlefield); - toUpdate.clear(); for (final Card c : list) { if (playerTurn.getTurn() > 0 || !c.isStartsGameInPlay()) { - if (c.isSick() && c.isToken()) //add toupdate stacking tokens - toUpdate.add(c); + if (c.isToken()) //update token stacking on battlefield + game.fireEvent(new GameEventTokenStateUpdate(c)); c.setSickness(false); } @@ -193,8 +191,6 @@ public class PhaseHandler implements java.io.Serializable { final List lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED); playerTurn.setNumPowerSurgeLands(lands.size()); - if (!toUpdate.isEmpty()) //fire event toupdate stacking tokens - game.fireEvent(new GameEventRemoveSummoningSickness(toUpdate)); } game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType)); diff --git a/forge-gui-mobile/src/forge/screens/match/views/VField.java b/forge-gui-mobile/src/forge/screens/match/views/VField.java index b8bd9fd63c6..865c8198864 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VField.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VField.java @@ -110,7 +110,8 @@ public class VField extends FContainer { if (!c.hasCardAttachments() && cardName.equals(c.getCurrentState().getName()) && card.hasSameCounters(c) && - card.isSick() == c.isSick() && //don't stack sick tokens on non sick - stack will refresh on event + card.isTapped() == c.isTapped() && // don't stack tapped tokens on untapped tokens + card.isSick() == c.isSick() && //don't stack sick tokens on non sick card.isToken() == c.isToken()) { //don't stack tokens on top of non-tokens CardAreaPanel cPanel = CardAreaPanel.get(c); while (cPanel.getNextPanelInStack() != null) { diff --git a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java index 8a5200edb97..d3bdc446df1 100644 --- a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java +++ b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java @@ -358,7 +358,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { } @Override - public Void visit(final GameEventRemoveSummoningSickness event) { + public Void visit(final GameEventTokenStateUpdate event) { processCards(event.cards, cardsRefreshDetails); return processCards(event.cards, cardsUpdate); }