diff --git a/.gitattributes b/.gitattributes index 0d869f77642..70783d7fa4c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12951,6 +12951,7 @@ src/main/java/forge/util/Base64Coder.java svneol=native#text/plain src/main/java/forge/util/BinaryUtil.java -text src/main/java/forge/util/ComparableOp.java -text src/main/java/forge/util/CopyFiles.java svneol=native#text/plain +src/main/java/forge/util/Expressions.java -text src/main/java/forge/util/FileFinder.java svneol=native#text/plain src/main/java/forge/util/FileSection.java -text src/main/java/forge/util/FileSectionManual.java -text diff --git a/src/main/java/forge/AllZone.java b/src/main/java/forge/AllZone.java index c3f0c73d4ed..69ffebfbde3 100644 --- a/src/main/java/forge/AllZone.java +++ b/src/main/java/forge/AllZone.java @@ -19,17 +19,9 @@ package forge; import forge.card.cardfactory.CardFactory; import forge.card.cardfactory.CardFactoryInterface; -import forge.card.replacement.ReplacementHandler; -import forge.card.trigger.TriggerHandler; import forge.control.input.InputControl; import forge.game.GameState; import forge.game.limited.GauntletMini; -import forge.game.phase.Combat; -import forge.game.phase.EndOfTurn; -import forge.game.player.Player; -import forge.game.zone.MagicStack; -import forge.game.zone.PlayerZone; -import forge.game.zone.ZoneType; import forge.properties.ForgeProps; import forge.properties.NewConstants; @@ -87,35 +79,6 @@ public final class AllZone { return AllZone.gauntlet; } - /** - *
- * getEndOfTurn. - *
- * getEndOfCombat. - *
* getGameLog. @@ -161,24 +124,6 @@ public final class AllZone { AllZone.cardFactory = factory; } - /** - *
- * getStack. - *
* getInputControl. @@ -196,171 +141,6 @@ public final class AllZone { AllZone.inputControl = i0; } - /** - *
- * getStaticEffects. - *
- * getTriggerHandler. - *
- * getCombat. - *
- * setCombat. - *
- * getStackZone. - *
- * getZone. - *
- * resetZoneMoveTracking. - *
@@ -296,7 +296,7 @@ public final class AbilityFactoryRepeat { final int left = list.size(); - if (!AllZoneUtil.compare(left, repeatCompare, right)) { + if (!Expressions.compare(left, repeatCompare, right)) { return false; } } @@ -311,7 +311,7 @@ public final class AbilityFactoryRepeat { final int svarValue = AbilityFactory.calculateAmount(sa.getSourceCard(), params.get("RepeatCheckSVar"), sa); final int operandValue = AbilityFactory.calculateAmount(sa.getSourceCard(), sVarOperand, sa); - if (!AllZoneUtil.compare(svarValue, sVarOperator, operandValue)) { + if (!Expressions.compare(svarValue, sVarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java index 8b2861043a7..1aba2e396df 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactorySacrifice.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Random; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -496,7 +495,7 @@ public class AbilityFactorySacrifice { final boolean remSacrificed = params.containsKey("RememberSacrificed"); if (valid.equals("Self")) { - if (AllZone.getZoneOf(card).is(ZoneType.Battlefield)) { + if (GameState.getZoneOf(card).is(ZoneType.Battlefield)) { if (Singletons.getModel().getGameAction().sacrifice(card, sa) && remSacrificed) { card.addRemembered(card); } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java index 35858a67a38..6f5797bc6b8 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryStoreSVar.java @@ -19,8 +19,8 @@ package forge.card.abilityfactory; import java.util.HashMap; -import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.AbilityActivated; import forge.card.spellability.AbilitySub; @@ -247,7 +247,7 @@ public class AbilityFactoryStoreSVar { final Player ai = sa.getActivatingPlayer(); final Card source = sa.getSourceCard(); if (AbilityFactory.waitForBlocking(sa) || ai.getLife() + 1 >= source.getNetDefense() - || (ai.getLife() > 5 && !CombatUtil.lifeInSeriousDanger(ai, AllZone.getCombat()))) { + || (ai.getLife() > 5 && !CombatUtil.lifeInSeriousDanger(ai, Singletons.getModel().getGameState().getCombat()))) { return false; } final AbilitySub subAb = sa.getSubAbility(); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java index 62f09001394..e2cce2d437e 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryToken.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Random; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -638,7 +637,7 @@ public class AbilityFactoryToken extends AbilityFactory { c.setTapped(true); } if (this.tokenAttacking) { - AllZone.getCombat().addAttacker(c); + Singletons.getModel().getGameState().getCombat().addAttacker(c); } if (remember != null) { GameState.getCardState(sa.getSourceCard()).addRemembered(c); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java index b283c288121..73bebe173e4 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryTurns.java @@ -20,7 +20,6 @@ package forge.card.abilityfactory; import java.util.ArrayList; import java.util.HashMap; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.card.spellability.AbilityActivated; @@ -503,13 +502,13 @@ public class AbilityFactoryTurns { // 1) All spells and abilities on the stack are exiled. This includes // Time Stop, though it will continue to resolve. It also includes // spells and abilities that can't be countered. - for (final Card c : AllZone.getStackZone().getCards()) { + for (final Card c : Singletons.getModel().getGameState().getStackZone().getCards()) { Singletons.getModel().getGameAction().exile(c); } - AllZone.getStack().getStack().clear(); + Singletons.getModel().getGameState().getStack().getStack().clear(); // 2) All attacking and blocking creatures are removed from combat. - AllZone.getCombat().reset(); + Singletons.getModel().getGameState().getCombat().reset(); // 3) State-based actions are checked. No player gets priority, and no // triggered abilities are put onto the stack. @@ -520,7 +519,7 @@ public class AbilityFactoryTurns { Singletons.getModel().getGameState().getPhaseHandler().setPhaseState(PhaseType.CLEANUP); // Update observers - AllZone.getStack().updateObservers(); + Singletons.getModel().getGameState().getStack().updateObservers(); for (Player p : Singletons.getModel().getGameState().getPlayers()) { p.updateObservers(); p.updateLabelObservers(); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java index 98ab41dc1e5..57540f77bc7 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java @@ -135,7 +135,7 @@ class CardFactoryArtifacts { sb.append("choose white Citizen, blue Camarid, black Thrull, red Goblin, or green Saproling."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } }; @@ -535,7 +535,7 @@ class CardFactoryArtifacts { card.addSpellAbility(freeCast); card.addExtrinsicKeyword("Play with the top card of your library revealed."); - AllZone.getEndOfTurn().addUntil(new Command() { + Singletons.getModel().getGameState().getEndOfTurn().addUntil(new Command() { private static final long serialVersionUID = -2860753262177388046L; @Override diff --git a/src/main/java/forge/card/cardfactory/CardFactoryAuras.java b/src/main/java/forge/card/cardfactory/CardFactoryAuras.java index d74ff0fa7b4..ee2eccb42fe 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryAuras.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryAuras.java @@ -481,7 +481,7 @@ class CardFactoryAuras { } final Card animated = targetC[0]; - final PlayerZone grave = AllZone.getZoneOf(animated); + final PlayerZone grave = GameState.getZoneOf(animated); if (!grave.is(ZoneType.Graveyard)) { // Animated Creature got removed before ability resolved @@ -554,7 +554,7 @@ class CardFactoryAuras { final PlayerZone play = card.getController().getZone(ZoneType.Battlefield); if (play.contains(c)) { - AllZone.getStack().addSimultaneousStackEntry(detach); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(detach); } } diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 4d06303625c..9f2af4f6e53 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -199,7 +199,7 @@ public class CardFactoryCreatures { @Override public boolean canPlayAI() { return Iterables.any(getActivatingPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.ARTIFACTS) - && AllZone.getZoneOf(this.getSourceCard()).is(ZoneType.Hand); + && GameState.getZoneOf(this.getSourceCard()).is(ZoneType.Hand); } }); card.addComesIntoPlayCommand(intoPlay); @@ -294,7 +294,7 @@ public class CardFactoryCreatures { @Override public void execute() { - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } }); @@ -611,7 +611,7 @@ public class CardFactoryCreatures { sb.append("Kinsbaile Borderguard enters the battlefield with a "); sb.append("+1/+1 counter on it for each other Kithkin you control."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } }; @@ -640,7 +640,7 @@ public class CardFactoryCreatures { sb.append("from play, put a 1/1 white Kithkin Soldier creature "); sb.append("token onto the battlefield for each counter on it."); ability2.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability2); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability2); } }; @@ -668,7 +668,7 @@ public class CardFactoryCreatures { @Override public void execute() { - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } }; @@ -869,7 +869,7 @@ public class CardFactoryCreatures { @Override public void execute() { - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } }; @@ -931,7 +931,7 @@ public class CardFactoryCreatures { //adding ability to stack first cause infinite loop (with observers notification) //so it has to be stop first and add ability later this.stop(); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } @Override @@ -985,7 +985,7 @@ public class CardFactoryCreatures { if ( !list.isEmpty() ) { ability.setTargetCard(CardFactoryUtil.getBestCreatureAI(list)); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } } // execute() diff --git a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java index db18351ddf6..91cd66c5352 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryEnchantments.java @@ -125,7 +125,7 @@ class CardFactoryEnchantments { Singletons.getModel().getGameAction().exile(c2); this.once = true; - AllZone.getStack().addAndUnfreeze(nightSoil); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(nightSoil); } } @@ -193,7 +193,7 @@ class CardFactoryEnchantments { sb.append(" loses life equal to his or her life total."); loseAllLife.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(loseAllLife); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(loseAllLife); } }; @@ -216,7 +216,7 @@ class CardFactoryEnchantments { sb.append("loses the game."); loseGame.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(loseGame); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(loseGame); } }; diff --git a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java index 9906b1a9c89..874125dbfc2 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryInstants.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryInstants.java @@ -23,7 +23,6 @@ import java.util.List; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -351,10 +350,10 @@ public class CardFactoryInstants { destroy.setDescription(sb.toString()); destroy.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(destroy); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(destroy); } // execute }; // Command - AllZone.getEndOfTurn().addAt(atEOT); + Singletons.getModel().getGameState().getEndOfTurn().addAt(atEOT); } // resolve }; // SpellAbility diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index 20be0d7760b..7a187637085 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -714,7 +714,7 @@ public class CardFactorySorceries { thePlayer.addMaxLandsToPlay(-3); } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } }; @@ -748,7 +748,7 @@ public class CardFactorySorceries { thePlayer.addMaxLandsToPlay(-1); } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); thePlayer.drawCard(); } @@ -1004,7 +1004,7 @@ public class CardFactorySorceries { } } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } } @@ -1027,7 +1027,7 @@ public class CardFactorySorceries { } } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } } // end ab[3] diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 96ef46b540f..9d3104fc921 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -864,7 +864,7 @@ public class CardFactoryUtil { public boolean canPlay() { //Lands do not have SpellPermanents. if (sourceCard.isLand()) { - return (AllZone.getZoneOf(sourceCard).is(ZoneType.Hand) || sourceCard.hasKeyword("May be played")) + return (GameState.getZoneOf(sourceCard).is(ZoneType.Hand) || sourceCard.hasKeyword("May be played")) && PhaseHandler.canCastSorcery(sourceCard.getController()); } else { @@ -905,7 +905,7 @@ public class CardFactoryUtil { // Run triggers final Map runParams = new TreeMap(); runParams.put("Card", sourceCard); - AllZone.getTriggerHandler().runTrigger(TriggerType.TurnFaceUp, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.TurnFaceUp, runParams); StringBuilder sb = new StringBuilder(); sb.append(this.getActivatingPlayer()).append(" has unmorphed "); @@ -1272,7 +1272,7 @@ public class CardFactoryUtil { spell.setTargetCard(card); if (spell.getManaCost().equals("0") || free) { this.setFree(false); - AllZone.getStack().add(spell); + Singletons.getModel().getGameState().getStack().add(spell); this.stop(); } else { this.stopSetNext(new InputPayManaCost(spell)); @@ -1338,7 +1338,7 @@ public class CardFactoryUtil { final HashMap runParams = new HashMap(); runParams.put("Card", spell.getSourceCard()); runParams.put("Championed", card); - AllZone.getTriggerHandler().runTrigger(TriggerType.Championed, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Championed, runParams); } } } // selectCard() @@ -1429,7 +1429,7 @@ public class CardFactoryUtil { sb.append(" +1/+1 counter/s from ").append(card); sb.append(" on ").append(card2); ability.setStackDescription(sb.toString()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); this.stop(); } } @@ -1571,7 +1571,7 @@ public class CardFactoryUtil { */ public static boolean isTargetStillValid(final SpellAbility ability, final Card target) { - if (AllZone.getZoneOf(target) == null) { + if (GameState.getZoneOf(target) == null) { return false; // for tokens that disappeared } @@ -1587,7 +1587,7 @@ public class CardFactoryUtil { // Check if the target is in the zone it needs to be in to be // targeted - if (!AllZone.getZoneOf(target).is(tgt.getZone())) { + if (!GameState.getZoneOf(target).is(tgt.getZone())) { return false; } } else { @@ -2176,7 +2176,7 @@ public class CardFactoryUtil { } if (sq[0].equals("StormCount")) { - return CardFactoryUtil.doXMath(AllZone.getStack().getCardsCastThisTurn().size() - 1, m, c); + return CardFactoryUtil.doXMath(Singletons.getModel().getGameState().getStack().getCardsCastThisTurn().size() - 1, m, c); } if (sq[0].equals("DamageDoneThisTurn")) { @@ -3343,7 +3343,7 @@ public class CardFactoryUtil { } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); crd.addTempAttackBoost(magnitude); crd.addTempDefenseBoost(magnitude); @@ -3472,7 +3472,7 @@ public class CardFactoryUtil { }; ability.setStackDescription("Fastbond - Deals 1 damage to you."); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -4008,7 +4008,7 @@ public class CardFactoryUtil { } if (c.canBeTargetedBy(haunterDiesWork)) { haunterDiesWork.setTargetCard(c); - AllZone.getStack().add(haunterDiesWork); + Singletons.getModel().getGameState().getStack().add(haunterDiesWork); this.stop(); } else { CMatchUI.SINGLETON_INSTANCE @@ -4043,7 +4043,7 @@ public class CardFactoryUtil { } else { haunterDiesWork.setTargetCard(CardFactoryUtil.getWorstCreatureAI(creats)); } - AllZone.getStack().add(haunterDiesWork); + Singletons.getModel().getGameState().getStack().add(haunterDiesWork); } } }; @@ -4158,9 +4158,9 @@ public class CardFactoryUtil { eff.addTrigger(copyTrigger); - AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.ChangesZone); Singletons.getModel().getGameAction().moveToPlay(eff); - AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.ChangesZone); } if (card.getController().isHuman()) { @@ -4727,7 +4727,7 @@ public class CardFactoryUtil { if (ability.getTargetCard() != null) { ability.setStackDescription("Put " + card.getCounters(Counters.P1P1) + " +1/+1 counter/s from " + card + " on " + ability.getTargetCard()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java index 01a7a2ded07..5ea13710b90 100644 --- a/src/main/java/forge/card/cost/CostExile.java +++ b/src/main/java/forge/card/cost/CostExile.java @@ -23,7 +23,6 @@ import java.util.List; import javax.swing.JOptionPane; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -148,8 +147,8 @@ public class CostExile extends CostPartWithList { public final boolean canPay(final SpellAbility ability, final Card source, final Player activator, final Cost cost) { List typeList = new ArrayList(); if (this.getFrom().equals(ZoneType.Stack)) { - for (int i = 0; i < AllZone.getStack().size(); i++) { - typeList.add(AllZone.getStack().peekAbility(i).getSourceCard()); + for (int i = 0; i < Singletons.getModel().getGameState().getStack().size(); i++) { + typeList.add(Singletons.getModel().getGameState().getStack().peekAbility(i).getSourceCard()); } } else { typeList = activator.getCardsIn(this.getFrom()); @@ -182,8 +181,8 @@ public class CostExile extends CostPartWithList { ArrayList spells = c.getSpellAbilities(); for (SpellAbility spell : spells) { if (c.isInZone(ZoneType.Exile)) { - final SpellAbilityStackInstance si = AllZone.getStack().getInstanceFromSpellAbility(spell); - AllZone.getStack().remove(si); + final SpellAbilityStackInstance si = Singletons.getModel().getGameState().getStack().getInstanceFromSpellAbility(spell); + Singletons.getModel().getGameState().getStack().remove(si); } } } @@ -414,9 +413,9 @@ public class CostExile extends CostPartWithList { saList = new ArrayList(); descList = new ArrayList(); - for (int i = 0; i < AllZone.getStack().size(); i++) { - final Card stC = AllZone.getStack().peekAbility(i).getSourceCard(); - final SpellAbility stSA = AllZone.getStack().peekAbility(i).getRootSpellAbility(); + for (int i = 0; i < Singletons.getModel().getGameState().getStack().size(); i++) { + final Card stC = Singletons.getModel().getGameState().getStack().peekAbility(i).getSourceCard(); + final SpellAbility stSA = Singletons.getModel().getGameState().getStack().peekAbility(i).getRootSpellAbility(); if (stC.isValid(type.split(";"), sa.getActivatingPlayer(), sa.getSourceCard()) && stSA.isSpell()) { this.saList.add(stSA); if (stC.isCopiedSpell()) { @@ -446,8 +445,8 @@ public class CostExile extends CostPartWithList { if (i == (nNeeded - 1)) { this.done(); } - final SpellAbilityStackInstance si = AllZone.getStack().getInstanceFromSpellAbility(toExile); - AllZone.getStack().remove(si); + final SpellAbilityStackInstance si = Singletons.getModel().getGameState().getStack().getInstanceFromSpellAbility(toExile); + Singletons.getModel().getGameState().getStack().remove(si); } else { this.cancel(); break; diff --git a/src/main/java/forge/card/replacement/ReplaceDamage.java b/src/main/java/forge/card/replacement/ReplaceDamage.java index 895a80048ab..a5a660d8800 100644 --- a/src/main/java/forge/card/replacement/ReplaceDamage.java +++ b/src/main/java/forge/card/replacement/ReplaceDamage.java @@ -19,10 +19,10 @@ package forge.card.replacement; import java.util.HashMap; -import forge.AllZoneUtil; import forge.Card; import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; +import forge.util.Expressions; /** * TODO: Write javadoc for this type. @@ -72,7 +72,7 @@ public class ReplaceDamage extends ReplacementEffect { intoperand = CardFactoryUtil.xCount(getHostCard(), getHostCard().getSVar(operand)); } - if (!AllZoneUtil.compare((Integer) runParams.get("DamageAmount"), operator, intoperand)) { + if (!Expressions.compare((Integer) runParams.get("DamageAmount"), operator, intoperand)) { return false; } } diff --git a/src/main/java/forge/card/replacement/ReplacementEffect.java b/src/main/java/forge/card/replacement/ReplacementEffect.java index 84a30110094..587b14233c4 100644 --- a/src/main/java/forge/card/replacement/ReplacementEffect.java +++ b/src/main/java/forge/card/replacement/ReplacementEffect.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -32,6 +31,7 @@ import forge.card.cardfactory.CardFactoryUtil; import forge.card.spellability.SpellAbility; import forge.game.GameState; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * TODO: Write javadoc for this type. @@ -98,7 +98,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { left = AbilityFactory.calculateAmount(this.hostCard, svarToCheck, sa); } System.out.println("aiShouldRun?" + left + comparator + compareTo); - if (AllZoneUtil.compare(left, comparator, compareTo)) { + if (Expressions.compare(left, comparator, compareTo)) { return true; } } else if (sa != null && sa.doTrigger(false)){ @@ -236,7 +236,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { right = CardFactoryUtil.xCount(this.getHostCard(), this.getHostCard().getSVar(rightString)); } - if (!AllZoneUtil.compare(life, lifeCompare, right)) { + if (!Expressions.compare(life, lifeCompare, right)) { return false; } @@ -275,7 +275,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -314,7 +314,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -331,7 +331,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(GameState.getCardState(this.getHostCard()), svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java index 126c7d28bf3..5fdc3485573 100644 --- a/src/main/java/forge/card/replacement/ReplacementHandler.java +++ b/src/main/java/forge/card/replacement/ReplacementHandler.java @@ -28,6 +28,7 @@ import forge.GameActionUtil; import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.spellability.SpellAbility; +import forge.game.GameState; import forge.game.player.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; @@ -111,7 +112,7 @@ public class ReplacementHandler { && replacementEffect.requirementsCheck() && replacementEffect.canReplace(runParams) && !possibleReplacers.contains(replacementEffect) - && replacementEffect.zonesCheck(AllZone.getZoneOf(crd))) { + && replacementEffect.zonesCheck(GameState.getZoneOf(crd))) { possibleReplacers.add(replacementEffect); } } diff --git a/src/main/java/forge/card/spellability/Ability.java b/src/main/java/forge/card/spellability/Ability.java index d3d22703e5a..4a97573b320 100644 --- a/src/main/java/forge/card/spellability/Ability.java +++ b/src/main/java/forge/card/spellability/Ability.java @@ -19,8 +19,8 @@ package forge.card.spellability; import com.esotericsoftware.minlog.Log; -import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.game.GameState; /** @@ -69,7 +69,7 @@ public abstract class Ability extends SpellAbility { /** {@inheritDoc} */ @Override public boolean canPlay() { - if (AllZone.getStack().isSplitSecondOnStack()) { + if (Singletons.getModel().getGameState().getStack().isSplitSecondOnStack()) { return false; } diff --git a/src/main/java/forge/card/spellability/AbilityActivated.java b/src/main/java/forge/card/spellability/AbilityActivated.java index 6b2672b4fc4..7432c2affe0 100644 --- a/src/main/java/forge/card/spellability/AbilityActivated.java +++ b/src/main/java/forge/card/spellability/AbilityActivated.java @@ -20,8 +20,8 @@ package forge.card.spellability; import java.util.ArrayList; import java.util.List; -import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.card.cost.Cost; import forge.card.cost.CostPayment; @@ -83,7 +83,7 @@ public abstract class AbilityActivated extends SpellAbility implements java.io.S /** {@inheritDoc} */ @Override public boolean canPlay() { - if (AllZone.getStack().isSplitSecondOnStack()) { + if (Singletons.getModel().getGameState().getStack().isSplitSecondOnStack()) { return false; } diff --git a/src/main/java/forge/card/spellability/AbilityMana.java b/src/main/java/forge/card/spellability/AbilityMana.java index 2e7fbf9d6f4..4485f2f2c1e 100644 --- a/src/main/java/forge/card/spellability/AbilityMana.java +++ b/src/main/java/forge/card/spellability/AbilityMana.java @@ -20,8 +20,8 @@ package forge.card.spellability; import java.util.ArrayList; import java.util.HashMap; -import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; @@ -239,7 +239,7 @@ public class AbilityMana extends AbilityActivated implements java.io.Serializabl runParams.put("Player", player); runParams.put("AbilityMana", this); runParams.put("Produced", produced); - AllZone.getTriggerHandler().runTrigger(TriggerType.TapsForMana, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.TapsForMana, runParams); } // end produceMana(String) diff --git a/src/main/java/forge/card/spellability/Spell.java b/src/main/java/forge/card/spellability/Spell.java index b881487c924..cd7febf92d7 100644 --- a/src/main/java/forge/card/spellability/Spell.java +++ b/src/main/java/forge/card/spellability/Spell.java @@ -20,9 +20,8 @@ package forge.card.spellability; import java.util.ArrayList; import java.util.List; -import forge.AllZone; -import forge.AllZoneUtil; import forge.Card; +import forge.Singletons; import forge.CardLists; import forge.card.cardfactory.CardFactoryUtil; @@ -34,6 +33,7 @@ import forge.game.GameState; import forge.game.phase.PhaseHandler; import forge.game.player.Player; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * @@ -92,7 +92,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable /** {@inheritDoc} */ @Override public boolean canPlay() { - if (AllZone.getStack().isSplitSecondOnStack()) { + if (Singletons.getModel().getGameState().getStack().isSplitSecondOnStack()) { return false; } @@ -169,7 +169,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable } catch (final NumberFormatException e) { y = CardFactoryUtil.xCount(card, card.getSVar(compareTo)); } - if (!AllZoneUtil.compare(x, comparator, y)) { + if (!Expressions.compare(x, comparator, y)) { return false; } } diff --git a/src/main/java/forge/card/spellability/SpellAbilityCondition.java b/src/main/java/forge/card/spellability/SpellAbilityCondition.java index cd58ebd4ab0..4a9c31f690a 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityCondition.java +++ b/src/main/java/forge/card/spellability/SpellAbilityCondition.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -33,6 +32,7 @@ import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * @@ -274,7 +274,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { final int left = list.size(); - if (!AllZoneUtil.compare(left, this.getPresentCompare(), right)) { + if (!Expressions.compare(left, this.getPresentCompare(), right)) { return false; } } @@ -296,7 +296,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { right = Integer.parseInt(this.getLifeAmount().substring(2)); } - if (!AllZoneUtil.compare(life, this.getLifeAmount(), right)) { + if (!Expressions.compare(life, this.getLifeAmount(), right)) { return false; } } @@ -311,7 +311,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { final int svarValue = AbilityFactory.calculateAmount(sa.getSourceCard(), this.getsVarToCheck(), sa); final int operandValue = AbilityFactory.calculateAmount(sa.getSourceCard(), this.getsVarOperand(), sa); - if (!AllZoneUtil.compare(svarValue, this.getsVarOperator(), operandValue)) { + if (!Expressions.compare(svarValue, this.getsVarOperator(), operandValue)) { return false; } diff --git a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java index 53da0e86362..20176da0683 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java +++ b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java @@ -19,11 +19,11 @@ package forge.card.spellability; import java.util.ArrayList; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.cost.CostPayment; +import forge.game.GameState; import forge.game.zone.PlayerZone; /** @@ -111,7 +111,7 @@ public class SpellAbilityRequirements { if (!this.ability.getSourceCard().isCopiedSpell()) { final Card c = this.ability.getSourceCard(); - this.fromZone = AllZone.getZoneOf(c); + this.fromZone = GameState.getZoneOf(c); this.zonePosition = this.fromZone.getPosition(c); this.ability.setSourceCard(Singletons.getModel().getGameAction().moveToStack(c)); } @@ -119,7 +119,7 @@ public class SpellAbilityRequirements { // freeze Stack. No abilities should go onto the stack while I'm filling // requirements. - AllZone.getStack().freezeStack(); + Singletons.getModel().getGameState().getStack().freezeStack(); // Skip to paying if parent ability doesn't target and has no // subAbilities. @@ -148,7 +148,7 @@ public class SpellAbilityRequirements { } this.select.resetTargets(); - AllZone.getStack().removeFromFrozenStack(this.ability); + Singletons.getModel().getGameState().getStack().removeFromFrozenStack(this.ability); return; } else { this.needPayment(); @@ -207,7 +207,7 @@ public class SpellAbilityRequirements { this.ability.resetOnceResolved(); this.payment.cancelPayment(); - AllZone.getStack().clearFrozen(); + Singletons.getModel().getGameState().getStack().clearFrozen(); } } @@ -235,6 +235,6 @@ public class SpellAbilityRequirements { } this.ability.getActivatingPlayer().getManaPool().clearManaPaid(this.ability, false); - AllZone.getStack().addAndUnfreeze(this.ability); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(this.ability); } } diff --git a/src/main/java/forge/card/spellability/SpellAbilityRestriction.java b/src/main/java/forge/card/spellability/SpellAbilityRestriction.java index 1f81c8bd8c9..4017f8ed237 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityRestriction.java +++ b/src/main/java/forge/card/spellability/SpellAbilityRestriction.java @@ -21,8 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZone; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -35,6 +33,7 @@ import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * @@ -188,7 +187,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { if (this.getZone() == null) { return true; } - PlayerZone cardZone = AllZone.getZoneOf(c); + PlayerZone cardZone = GameState.getZoneOf(c); Player activator = sa.getActivatingPlayer(); if (cardZone == null || !cardZone.is(this.getZone())) { // If Card is not in the default activating zone, do some additional checks @@ -370,7 +369,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { } final int left = list.size(); - if (!AllZoneUtil.compare(left, this.getPresentCompare(), right)) { + if (!Expressions.compare(left, this.getPresentCompare(), right)) { return false; } } @@ -392,7 +391,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { right = Integer.parseInt(this.getLifeAmount().substring(2)); } - if (!AllZoneUtil.compare(life, this.getLifeAmount(), right)) { + if (!Expressions.compare(life, this.getLifeAmount(), right)) { return false; } } @@ -413,7 +412,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { final int svarValue = AbilityFactory.calculateAmount(c, this.getsVarToCheck(), sa); final int operandValue = AbilityFactory.calculateAmount(c, this.getsVarOperand(), sa); - if (!AllZoneUtil.compare(svarValue, this.getsVarOperator(), operandValue)) { + if (!Expressions.compare(svarValue, this.getsVarOperator(), operandValue)) { return false; } diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 719f039564a..6b5aaa3f423 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -123,7 +123,7 @@ public class SpellPermanent extends Spell { final HashMap runParams = new HashMap(); runParams.put("Card", source); runParams.put("Championed", source.getChampionedCard()); - AllZone.getTriggerHandler().runTrigger(TriggerType.Championed, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Championed, runParams); } else { Singletons.getModel().getGameAction().sacrifice(this.getSourceCard(), null); } @@ -142,7 +142,7 @@ public class SpellPermanent extends Spell { sb.append(SpellPermanent.this.getSourceCard()).append( " - When CARDNAME enters the battlefield, sacrifice it unless you exile a creature you control."); SpellPermanent.this.championAbilityComes.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(SpellPermanent.this.championAbilityComes); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(SpellPermanent.this.championAbilityComes); } // execute() }; // championCommandComes @@ -169,7 +169,7 @@ public class SpellPermanent extends Spell { " - When CARDNAME leaves the battlefield, exiled card returns to the battlefield."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // execute() }; // championCommandLeavesPlay diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index 85d8f5fcd42..cd5da768025 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -25,6 +25,7 @@ import com.google.common.base.Predicate; import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.CardLists; import forge.card.abilityfactory.AbilityFactory; @@ -594,8 +595,8 @@ public class TargetSelection { public static ArrayList getTargetableOnStack(final SpellAbility sa, final Target tgt) { final ArrayList choosables = new ArrayList(); - for (int i = 0; i < AllZone.getStack().size(); i++) { - choosables.add(AllZone.getStack().peekAbility(i)); + for (int i = 0; i < Singletons.getModel().getGameState().getStack().size(); i++) { + choosables.add(Singletons.getModel().getGameState().getStack().peekAbility(i)); } for (int i = 0; i < choosables.size(); i++) { diff --git a/src/main/java/forge/card/staticability/StaticAbility.java b/src/main/java/forge/card/staticability/StaticAbility.java index 0e051ffd523..3ef7888a998 100644 --- a/src/main/java/forge/card/staticability/StaticAbility.java +++ b/src/main/java/forge/card/staticability/StaticAbility.java @@ -21,8 +21,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZone; -import forge.AllZoneUtil; import forge.Card; import forge.GameEntity; import forge.Singletons; @@ -30,9 +28,11 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.cost.Cost; import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; +import forge.game.GameState; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * The Class StaticAbility. @@ -457,7 +457,7 @@ public class StaticAbility { if (this.mapParams.containsKey("EffectZone")) { if (!this.mapParams.get("EffectZone").equals("All") && !ZoneType.listValueOf(this.mapParams.get("EffectZone")) - .contains(AllZone.getZoneOf(this.hostCard).getZoneType())) { + .contains(GameState.getZoneOf(this.hostCard).getZoneType())) { return false; } } else { @@ -532,7 +532,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } @@ -546,7 +546,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } @@ -560,7 +560,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } @@ -574,7 +574,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java b/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java index 9d201b36b33..44727c5404f 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java +++ b/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java @@ -20,10 +20,10 @@ package forge.card.staticability; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.card.spellability.AbilityMana; import forge.card.spellability.SpellAbility; +import forge.game.GameState; import forge.game.phase.PhaseHandler; import forge.game.player.Player; import forge.game.zone.ZoneType; @@ -64,7 +64,7 @@ public class StaticAbilityCantBeCast { if (params.containsKey("Origin")) { List src = ZoneType.listValueOf(params.get("Origin")); - if (!src.contains(AllZone.getZoneOf(card).getZoneType())) { + if (!src.contains(GameState.getZoneOf(card).getZoneType())) { return false; } } diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java index 9287b16c250..2fda583c62b 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java +++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java @@ -22,7 +22,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -66,7 +65,7 @@ public class StaticAbilityContinuous { se.setParams(params); se.setTimestamp(hostCard.getTimestamp()); se.setSource(hostCard); - AllZone.getStaticEffects().addStaticEffect(se); + Singletons.getModel().getGameState().getStaticEffects().addStaticEffect(se); int powerBonus = 0; int toughnessBonus = 0; diff --git a/src/main/java/forge/card/trigger/Trigger.java b/src/main/java/forge/card/trigger/Trigger.java index d59f14b4d14..69c29b6194e 100644 --- a/src/main/java/forge/card/trigger/Trigger.java +++ b/src/main/java/forge/card/trigger/Trigger.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -36,6 +35,7 @@ import forge.card.spellability.SpellAbility; import forge.game.GameState; import forge.game.phase.PhaseType; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * @@ -326,7 +326,7 @@ public abstract class Trigger extends TriggerReplacementBase { right = CardFactoryUtil.xCount(this.getHostCard(), this.getHostCard().getSVar(rightString)); } - if (!AllZoneUtil.compare(life, lifeCompare, right)) { + if (!Expressions.compare(life, lifeCompare, right)) { return false; } @@ -365,7 +365,7 @@ public abstract class Trigger extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -404,7 +404,7 @@ public abstract class Trigger extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -421,7 +421,7 @@ public abstract class Trigger extends TriggerReplacementBase { final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(GameState.getCardState(this.getHostCard()), svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/trigger/TriggerDamageDone.java b/src/main/java/forge/card/trigger/TriggerDamageDone.java index 806cbc8b74c..39722d31893 100644 --- a/src/main/java/forge/card/trigger/TriggerDamageDone.java +++ b/src/main/java/forge/card/trigger/TriggerDamageDone.java @@ -19,9 +19,9 @@ package forge.card.trigger; import java.util.HashMap; -import forge.AllZoneUtil; import forge.Card; import forge.card.spellability.SpellAbility; +import forge.util.Expressions; /** * @@ -87,7 +87,7 @@ public class TriggerDamageDone extends Trigger { final int operand = Integer.parseInt(fullParam.substring(2)); final int actualAmount = (Integer) runParams2.get("DamageAmount"); - if (!AllZoneUtil.compare(actualAmount, operator, operand)) { + if (!Expressions.compare(actualAmount, operator, operand)) { return false; } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index d89438bd532..b5702cfdc6c 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -319,7 +318,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); if (playerAP.equals(card.getController()) && !allCards.contains(card) - && (AllZone.getZoneOf(card) == null || AllZone.getZoneOf(card).getZoneType().isHidden())) { + && (GameState.getZoneOf(card) == null || GameState.getZoneOf(card).getZoneType().isHidden())) { allCards.add(card); } } @@ -345,7 +344,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); if (!playerAP.equals(card.getController()) && !allCards.contains(card) - && (AllZone.getZoneOf(card) == null || AllZone.getZoneOf(card).getZoneType().isHidden())) { + && (GameState.getZoneOf(card) == null || GameState.getZoneOf(card).getZoneType().isHidden())) { allCards.add(card); } } @@ -399,7 +398,7 @@ public class TriggerHandler { return false; // Morphed cards only have pumped triggers go off. } if (regtrig instanceof TriggerAlways) { - if (AllZone.getStack().hasStateTrigger(regtrig.getId())) { + if (Singletons.getModel().getGameState().getStack().hasStateTrigger(regtrig.getId())) { return false; // State triggers that are already on the stack // don't trigger again. } @@ -411,7 +410,7 @@ public class TriggerHandler { if (regtrig.isSuppressed()) { return false; // Trigger removed by effect } - if (!regtrig.zonesCheck(AllZone.getZoneOf(regtrig.getHostCard()))) { + if (!regtrig.zonesCheck(GameState.getZoneOf(regtrig.getHostCard()))) { return false; // Host card isn't where it needs to be. } @@ -1021,7 +1020,7 @@ public class TriggerHandler { } //Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false); } else { - AllZone.getStack().addSimultaneousStackEntry(wrapperAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(wrapperAbility); } regtrig.setTriggeredSA(wrapperAbility); return true; diff --git a/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java b/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java index 5c574ad76cb..1589fee19ef 100644 --- a/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java +++ b/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java @@ -19,7 +19,7 @@ package forge.card.trigger; import java.util.HashMap; -import forge.AllZone; +import forge.Singletons; import forge.Card; import forge.card.cost.Cost; @@ -59,7 +59,7 @@ public class TriggerSpellAbilityCast extends Trigger { public final boolean performTest(final java.util.Map runParams2) { final SpellAbility spellAbility = (SpellAbility) runParams2.get("CastSA"); final Card cast = spellAbility.getSourceCard(); - final SpellAbilityStackInstance si = AllZone.getStack().getInstanceFromSpellAbility(spellAbility); + final SpellAbilityStackInstance si = Singletons.getModel().getGameState().getStack().getInstanceFromSpellAbility(spellAbility); if (this.getMode() == TriggerType.SpellCast) { if (!spellAbility.isSpell()) { diff --git a/src/main/java/forge/control/input/InputAttack.java b/src/main/java/forge/control/input/InputAttack.java index ac89474e9b1..225551d79b8 100644 --- a/src/main/java/forge/control/input/InputAttack.java +++ b/src/main/java/forge/control/input/InputAttack.java @@ -54,7 +54,7 @@ public class InputAttack extends Input { ButtonUtil.enableOnlyOK(); - final Object o = AllZone.getCombat().nextDefender(); + final Object o = Singletons.getModel().getGameState().getCombat().nextDefender(); if (o == null) { return; } @@ -65,13 +65,13 @@ public class InputAttack extends Input { CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString()); - if (AllZone.getCombat().getRemainingDefenders() == 0) { + if (Singletons.getModel().getGameState().getCombat().getRemainingDefenders() == 0) { // Nothing left to attack, has to attack this defender List possibleAttackers = Singletons.getControl().getPlayer().getCardsIn(ZoneType.Battlefield); for (Card c : Iterables.filter(possibleAttackers, CardPredicates.Presets.CREATURES)) { - if (c.hasKeyword("CARDNAME attacks each turn if able.") && CombatUtil.canAttack(c, AllZone.getCombat()) + if (c.hasKeyword("CARDNAME attacks each turn if able.") && CombatUtil.canAttack(c, Singletons.getModel().getGameState().getCombat()) && !c.isAttacking()) { - AllZone.getCombat().addAttacker(c); + Singletons.getModel().getGameState().getCombat().addAttacker(c); } } } @@ -80,11 +80,11 @@ public class InputAttack extends Input { /** {@inheritDoc} */ @Override public final void selectButtonOK() { - if (!AllZone.getCombat().getAttackers().isEmpty()) { + if (!Singletons.getModel().getGameState().getCombat().getAttackers().isEmpty()) { Singletons.getModel().getGameState().getPhaseHandler().setCombat(true); } - if (AllZone.getCombat().getRemainingDefenders() != 0) { + if (Singletons.getModel().getGameState().getCombat().getRemainingDefenders() != 0) { Singletons.getModel().getGameState().getPhaseHandler().repeatPhase(); } @@ -101,14 +101,14 @@ public class InputAttack extends Input { final Player human = Singletons.getControl().getPlayer(); if (zone.is(ZoneType.Battlefield, human) - && CombatUtil.canAttack(card, AllZone.getCombat())) { + && CombatUtil.canAttack(card, Singletons.getModel().getGameState().getCombat())) { // TODO add the propaganda code here and remove it in // Phase.nextPhase() // if (!CombatUtil.checkPropagandaEffects(card)) // return; - AllZone.getCombat().addAttacker(card); + Singletons.getModel().getGameState().getCombat().addAttacker(card); // just to make sure the attack symbol is marked human.getZone(ZoneType.Battlefield).updateObservers(); diff --git a/src/main/java/forge/control/input/InputBlock.java b/src/main/java/forge/control/input/InputBlock.java index 14941f366e4..7ec326027ad 100644 --- a/src/main/java/forge/control/input/InputBlock.java +++ b/src/main/java/forge/control/input/InputBlock.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -87,11 +86,11 @@ public class InputBlock extends Input { /** {@inheritDoc} */ @Override public final void selectButtonOK() { - if (CombatUtil.finishedMandatoryBlocks(AllZone.getCombat())) { + if (CombatUtil.finishedMandatoryBlocks(Singletons.getModel().getGameState().getCombat())) { // Done blocking ButtonUtil.reset(); - CombatUtil.orderMultipleCombatants(AllZone.getCombat()); + CombatUtil.orderMultipleCombatants(Singletons.getModel().getGameState().getCombat()); Singletons.getModel().getGameState().getPhaseHandler().setNeedToNextPhase(true); } @@ -103,7 +102,7 @@ public class InputBlock extends Input { // is attacking? boolean reminder = true; - if (AllZone.getCombat().getAttackers().contains(card)) { + if (Singletons.getModel().getGameState().getCombat().getAttackers().contains(card)) { this.currentAttacker = card; reminder = false; } else { @@ -117,9 +116,9 @@ public class InputBlock extends Input { List attackersBlocked = this.allBlocking.get(card); if (!attackersBlocked.contains(this.currentAttacker) && - CombatUtil.canBlock(this.currentAttacker, card, AllZone.getCombat())) { + CombatUtil.canBlock(this.currentAttacker, card, Singletons.getModel().getGameState().getCombat())) { attackersBlocked.add(this.currentAttacker); - AllZone.getCombat().addBlocker(this.currentAttacker, card); + Singletons.getModel().getGameState().getCombat().addBlocker(this.currentAttacker, card); reminder = false; } } diff --git a/src/main/java/forge/control/input/InputCleanup.java b/src/main/java/forge/control/input/InputCleanup.java index 9bae3b3e07b..6b3ed83ddab 100644 --- a/src/main/java/forge/control/input/InputCleanup.java +++ b/src/main/java/forge/control/input/InputCleanup.java @@ -17,7 +17,6 @@ */ package forge.control.input; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.game.phase.CombatUtil; @@ -74,7 +73,7 @@ public class InputCleanup extends Input { public final void selectCard(final Card card, final PlayerZone zone) { if (zone.is(ZoneType.Hand, Singletons.getControl().getPlayer())) { card.getController().discard(card, null); - if (AllZone.getStack().size() == 0) { + if (Singletons.getModel().getGameState().getStack().size() == 0) { this.showMessage(); } } diff --git a/src/main/java/forge/control/input/InputControl.java b/src/main/java/forge/control/input/InputControl.java index b2c3130ccfb..85234da528b 100644 --- a/src/main/java/forge/control/input/InputControl.java +++ b/src/main/java/forge/control/input/InputControl.java @@ -20,7 +20,6 @@ package forge.control.input; import java.util.LinkedList; import java.util.Stack; -import forge.AllZone; import forge.Singletons; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; @@ -216,7 +215,7 @@ public class InputControl extends MyObservable implements java.io.Serializable { this.model.getGameState().getStack().freezeStack(); if (playerTurn.isHuman() && !handler.getAutoPass()) { - AllZone.getCombat().initiatePossibleDefenders(playerTurn.getOpponent()); + Singletons.getModel().getGameState().getCombat().initiatePossibleDefenders(playerTurn.getOpponent()); return new InputAttack(); } } else if (phase == PhaseType.COMBAT_DECLARE_BLOCKERS) { diff --git a/src/main/java/forge/control/input/InputPassPriority.java b/src/main/java/forge/control/input/InputPassPriority.java index a024aad2937..5456a4830f8 100644 --- a/src/main/java/forge/control/input/InputPassPriority.java +++ b/src/main/java/forge/control/input/InputPassPriority.java @@ -59,8 +59,8 @@ public class InputPassPriority extends Input implements java.io.Serializable { sb.append("Turn : ").append(Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn()).append("\n"); sb.append("Phase: ").append(phase.Name).append("\n"); sb.append("Stack: "); - if (AllZone.getStack().size() != 0) { - sb.append(AllZone.getStack().size()).append(" to Resolve."); + if (Singletons.getModel().getGameState().getStack().size() != 0) { + sb.append(Singletons.getModel().getGameState().getStack().size()).append(" to Resolve."); } else { sb.append("Empty"); } diff --git a/src/main/java/forge/control/input/InputPayManaCost.java b/src/main/java/forge/control/input/InputPayManaCost.java index 6970a12cc10..ed61f55ac00 100644 --- a/src/main/java/forge/control/input/InputPayManaCost.java +++ b/src/main/java/forge/control/input/InputPayManaCost.java @@ -81,7 +81,7 @@ public class InputPayManaCost extends InputMana { this.stopSetNext(this.spell.getAfterPayMana()); } else { this.manaCost = new ManaCost("0"); - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } } else { this.manaCost = Singletons.getModel().getGameAction().getSpellCostChange(sa, new ManaCost(this.originalManaCost)); @@ -126,7 +126,7 @@ public class InputPayManaCost extends InputMana { this.stopSetNext(this.spell.getAfterPayMana()); } else { this.manaCost = new ManaCost("0"); - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } } else { this.manaCost = manaCostToPay; @@ -226,7 +226,7 @@ public class InputPayManaCost extends InputMana { if (this.skipStack) { this.spell.resolve(); } else { - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } AllZone.getInputControl().resetInput(); } @@ -240,12 +240,12 @@ public class InputPayManaCost extends InputMana { // tapped for convoke) if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } } @@ -256,11 +256,11 @@ public class InputPayManaCost extends InputMana { public final void selectButtonCancel() { // If this is a spell with convoke, untap all creatures used for it. if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } diff --git a/src/main/java/forge/control/input/InputPayManaCostUtil.java b/src/main/java/forge/control/input/InputPayManaCostUtil.java index 676a429d04c..88e6b7b51c8 100644 --- a/src/main/java/forge/control/input/InputPayManaCostUtil.java +++ b/src/main/java/forge/control/input/InputPayManaCostUtil.java @@ -546,12 +546,12 @@ public class InputPayManaCostUtil { // being tapped for convoke) if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } @@ -562,11 +562,11 @@ public class InputPayManaCostUtil { // If we're paying for a spell with convoke, untap all creatures // used for it. if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 12bccdd6da1..1dcbbee4de7 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -103,8 +103,8 @@ public class GameNew { Card.resetUniqueNumber(); // need this code here, otherwise observables fail forge.card.trigger.Trigger.resetIDs(); - AllZone.getTriggerHandler().clearTriggerSettings(); - AllZone.getTriggerHandler().clearDelayedTrigger(); + Singletons.getModel().getGameState().getTriggerHandler().clearTriggerSettings(); + Singletons.getModel().getGameState().getTriggerHandler().clearDelayedTrigger(); // friendliness final Map> removedAnteCards = new HashMap>(); diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java index 8dc01f2ac07..5337945c4e6 100644 --- a/src/main/java/forge/game/GameState.java +++ b/src/main/java/forge/game/GameState.java @@ -24,7 +24,6 @@ import java.util.List; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import forge.AllZone; import forge.Card; import forge.CardLists; import forge.CardPredicates; @@ -293,6 +292,85 @@ public class GameState { // THESE WERE MOVED HERE FROM AllZoneUtil // They must once become non-static members of this class + /** + * + * getZone. + * + * + * @param c + * a {@link forge.Card} object. + * @return a {@link forge.game.zone.PlayerZone} object. + */ + public static PlayerZone getZoneOf(final Card c) { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return null; + } + + if (gameState.getStackZone().contains(c)) { + return gameState.getStackZone(); + } + + for (final Player p : gameState.getPlayers()) { + for (final ZoneType z : Player.ALL_ZONES) { + final PlayerZone pz = p.getZone(z); + if (pz.contains(c)) { + return pz; + } + } + } + + return null; + } + + /** + * + * isCardInZone. + * + * @param c + * Card + * @param zone + * Constant.Zone + * @return boolean + */ + public static boolean isCardInZone(final Card c, final ZoneType zone) { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return false; + } + + if (zone.equals(ZoneType.Stack)) { + if (gameState.getStackZone().contains(c)) { + return true; + } + } else { + for (final Player p : gameState.getPlayers()) { + if (p.getZone(zone).contains(c)) { + return true; + } + } + } + + return false; + } + + /** + * + * resetZoneMoveTracking. + * + */ + public static void resetZoneMoveTracking() { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return; + } + for (final Player p : gameState.getPlayers()) { + for (final ZoneType z : Player.ALL_ZONES) { + p.getZone(z).resetCardsAddedThisTurn(); + } + } + } + /** * gets a list of all cards owned by both players that have are currently in * the given zone. @@ -303,7 +381,7 @@ public class GameState { */ public static List getCardsIn(final ZoneType zone) { if (zone == ZoneType.Stack) { - return AllZone.getStackZone().getCards(); + return Singletons.getModel().getGameState().getStackZone().getCards(); } else { List cards = null; for (final Player p : Singletons.getModel().getGameState().getPlayers()) { @@ -547,7 +625,7 @@ public class GameState { all.addAll(player.getZone(ZoneType.Battlefield).getCards(false)); all.addAll(player.getZone(ZoneType.Exile).getCards()); } - all.addAll(AllZone.getStackZone().getCards()); + all.addAll(Singletons.getModel().getGameState().getStackZone().getCards()); return all; } diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java index 1e37f5c7032..42f662b8bbf 100644 --- a/src/main/java/forge/game/MatchController.java +++ b/src/main/java/forge/game/MatchController.java @@ -134,7 +134,7 @@ public class MatchController { CMessage.SINGLETON_INSTANCE.updateGameInfo(this); // Update observers - AllZone.getStack().updateObservers(); + Singletons.getModel().getGameState().getStack().updateObservers(); AllZone.getInputControl().updateObservers(); AllZone.getGameLog().updateObservers(); diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java index 2e82db24a93..56757a42575 100644 --- a/src/main/java/forge/game/phase/Combat.java +++ b/src/main/java/forge/game/phase/Combat.java @@ -26,7 +26,6 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -650,7 +649,7 @@ public class Combat { // Run Unblocked Trigger final HashMap runParams = new HashMap(); runParams.put("Attacker", attacker); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } } @@ -837,18 +836,17 @@ public class Combat { */ public static void dealAssignedDamage() { // This function handles both Regular and First Strike combat assignment - final Player player = AllZone.getCombat().getDefendingPlayer(); + final Player player = Singletons.getModel().getGameState().getCombat().getDefendingPlayer(); final boolean bFirstStrike = Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_FIRST_STRIKE_DAMAGE); - final HashMap defMap = AllZone.getCombat().getDefendingDamageMap(); + final HashMap defMap = Singletons.getModel().getGameState().getCombat().getDefendingDamageMap(); for (final Entry entry : defMap.entrySet()) { player.addCombatDamage(entry.getValue(), entry.getKey()); } - final List unblocked = new ArrayList(bFirstStrike ? AllZone.getCombat().getUnblockedAttackers() : AllZone - .getCombat().getUnblockedFirstStrikeAttackers()); + final List unblocked = new ArrayList(bFirstStrike ? Singletons.getModel().getGameState().getCombat().getUnblockedAttackers() : Singletons.getModel().getGameState().getCombat().getUnblockedFirstStrikeAttackers()); for (int j = 0; j < unblocked.size(); j++) { if (bFirstStrike) { @@ -863,9 +861,9 @@ public class Combat { // this can be much better below here... final List combatants = new ArrayList(); - combatants.addAll(AllZone.getCombat().getAttackers()); - combatants.addAll(AllZone.getCombat().getAllBlockers()); - combatants.addAll(AllZone.getCombat().getDefendingPlaneswalkers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getAttackers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getAllBlockers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getDefendingPlaneswalkers()); Card c; for (int i = 0; i < combatants.size(); i++) { diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 140b75694c7..131402f7e24 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -28,7 +28,6 @@ import org.apache.commons.lang3.StringUtils; import com.esotericsoftware.minlog.Log; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -1429,10 +1428,10 @@ public class CombatUtil { * @return a boolean. */ public static boolean attackerWouldBeDestroyed(final Card attacker) { - final List blockers = AllZone.getCombat().getBlockers(attacker); + final List blockers = Singletons.getModel().getGameState().getCombat().getBlockers(attacker); for (final Card defender : blockers) { - if (CombatUtil.canDestroyAttacker(attacker, defender, AllZone.getCombat(), true) + if (CombatUtil.canDestroyAttacker(attacker, defender, Singletons.getModel().getGameState().getCombat(), true) && !(defender.hasKeyword("Wither") || defender.hasKeyword("Infect"))) { return true; } @@ -1463,10 +1462,10 @@ public class CombatUtil { boolean willTrigger = false; final Card source = trigger.getHostCard(); if (combat == null) { - combat = AllZone.getCombat(); + combat = Singletons.getModel().getGameState().getCombat(); } - if (!trigger.zonesCheck(AllZone.getZoneOf(trigger.getHostCard()))) { + if (!trigger.zonesCheck(GameState.getZoneOf(trigger.getHostCard()))) { return false; } if (!trigger.requirementsCheck()) { @@ -2330,10 +2329,10 @@ public class CombatUtil { public static boolean blockerWouldBeDestroyed(final Card blocker) { // TODO THis function only checks if a single attacker at a time would destroy a blocker // This needs to expand to tally up damage - final List attackers = AllZone.getCombat().getAttackersBlockedBy(blocker); + final List attackers = Singletons.getModel().getGameState().getCombat().getAttackersBlockedBy(blocker); for(Card attacker : attackers) { - if (CombatUtil.canDestroyBlocker(blocker, attacker, AllZone.getCombat(), true) + if (CombatUtil.canDestroyBlocker(blocker, attacker, Singletons.getModel().getGameState().getCombat(), true) && !(attacker.hasKeyword("Wither") || attacker.hasKeyword("Infect"))) { return true; } @@ -2495,7 +2494,7 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final Combat combat = AllZone.getCombat(); + final Combat combat = Singletons.getModel().getGameState().getCombat(); final List defenders = combat.getDefenders(); final List> attackers = combat.sortAttackerByDefender(); @@ -2529,7 +2528,7 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final Combat combat = AllZone.getCombat(); + final Combat combat = Singletons.getModel().getGameState().getCombat(); final List defenders = combat.getDefenders(); final List> attackers = combat.sortAttackerByDefender(); @@ -2540,7 +2539,7 @@ public class CombatUtil { for (final Card attacker : list) { sb.append(combat.getDefendingPlayer()).append(" assigned "); - defend = AllZone.getCombat().getBlockers(attacker); + defend = Singletons.getModel().getGameState().getCombat().getBlockers(attacker); if (!defend.isEmpty()) { // loop through blockers @@ -2574,8 +2573,8 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final List defenders = AllZone.getCombat().getDefenders(); - final List> attackers = AllZone.getCombat().sortAttackerByDefender(); + final List defenders = Singletons.getModel().getGameState().getCombat().getDefenders(); + final List> attackers = Singletons.getModel().getGameState().getCombat().sortAttackerByDefender(); // Not a big fan of the triple nested loop here for (int def = 0; def < defenders.size(); def++) { @@ -2597,7 +2596,7 @@ public class CombatUtil { display.append("-> "); display.append(CombatUtil.combatantToString(c)).append("\n"); - List blockers = AllZone.getCombat().getBlockers(c); + List blockers = Singletons.getModel().getGameState().getCombat().getBlockers(c); // loop through blockers for (final Card element : blockers) { @@ -2648,7 +2647,7 @@ public class CombatUtil { for (Card card : GameState.getCardsIn(ZoneType.Battlefield)) { final ArrayList staticAbilities = card.getStaticAbilities(); for (final StaticAbility stAb : staticAbilities) { - Cost additionalCost = stAb.getCostAbility("CantAttackUnless", c, AllZone.getCombat().getDefenderByAttacker(c)); + Cost additionalCost = stAb.getCostAbility("CantAttackUnless", c, Singletons.getModel().getGameState().getCombat().getDefenderByAttacker(c)); attackCost = CostUtil.combineCosts(attackCost, additionalCost); } } @@ -2681,7 +2680,7 @@ public class CombatUtil { @Override public void execute() { - AllZone.getCombat().removeFromCombat(crd); + Singletons.getModel().getGameState().getCombat().removeFromCombat(crd); if (bLast) { PhaseUtil.handleAttackingTriggers(); @@ -2716,7 +2715,7 @@ public class CombatUtil { } else { // TODO remove the below line after Propaganda occurs // during Declare_Attackers - AllZone.getCombat().removeFromCombat(crd); + Singletons.getModel().getGameState().getCombat().removeFromCombat(crd); } if (bLast) { PhaseUtil.handleAttackingTriggers(); @@ -2738,11 +2737,11 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Attacker", c); - final List otherAttackers = AllZone.getCombat().getAttackerList(); + final List otherAttackers = Singletons.getModel().getGameState().getCombat().getAttackerList(); otherAttackers.remove(c); runParams.put("OtherAttackers", otherAttackers); - runParams.put("Attacked", AllZone.getCombat().getDefenderByAttacker(c)); - AllZone.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); + runParams.put("Attacked", Singletons.getModel().getGameState().getCombat().getDefenderByAttacker(c)); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); // Annihilator: if (!c.getDamageHistory().getCreatureAttackedThisCombat()) { @@ -2776,7 +2775,7 @@ public class CombatUtil { ability.setDescription(sb.toString()); ability.setActivatingPlayer(c.getController()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } // find } // for } // creatureAttacked @@ -2785,7 +2784,7 @@ public class CombatUtil { // Mijae Djinn if (c.getName().equals("Mijae Djinn")) { if (!GameActionUtil.flipACoin(c.getController(), c)) { - AllZone.getCombat().removeFromCombat(c); + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); c.tap(); } } // Mijae Djinn @@ -2810,7 +2809,7 @@ public class CombatUtil { if (GameState.isCardInPlay(charger)) { charger.addIntrinsicKeyword("Trample"); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve }; // ability @@ -2819,7 +2818,7 @@ public class CombatUtil { sb2.append(c.getName()).append(" - gains trample until end of turn if its power is 10 or greater."); ability2.setStackDescription(sb2.toString()); - AllZone.getStack().add(ability2); + Singletons.getModel().getGameState().getStack().add(ability2); } // Witch-Maw Nephilim @@ -2860,7 +2859,7 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } /** @@ -2875,7 +2874,7 @@ public class CombatUtil { for (final Card c : cl) { if (!c.getDamageHistory().getCreatureBlockedThisCombat()) { for (final Ability ab : CardFactoryUtil.getBushidoEffects(c)) { - AllZone.getStack().add(ab); + Singletons.getModel().getGameState().getStack().add(ab); } } @@ -2901,16 +2900,16 @@ public class CombatUtil { final HashMap runParams = new HashMap(); runParams.put("Attacker", a); runParams.put("Blocker", b); - AllZone.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) { - final int blockers = AllZone.getCombat().getBlockers(a).size(); + final int blockers = Singletons.getModel().getGameState().getCombat().getBlockers(a).size(); runParams.put("NumBlockers", blockers); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); // Bushido for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) { - AllZone.getStack().add(ab); + Singletons.getModel().getGameState().getStack().add(ab); } // Rampage @@ -2922,7 +2921,7 @@ public class CombatUtil { if (m.find()) { final String[] k = keyword.split(" "); final int magnitude = Integer.valueOf(k[1]); - final int numBlockers = AllZone.getCombat().getBlockers(a).size(); + final int numBlockers = Singletons.getModel().getGameState().getCombat().getBlockers(a).size(); if (numBlockers > 1) { CombatUtil.executeRampageAbility(a, magnitude, numBlockers); } @@ -2964,7 +2963,7 @@ public class CombatUtil { blocker.addTempAttackBoost(-mag); blocker.addTempDefenseBoost(-mag); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); System.out.println("Flanking!"); } } // resolve @@ -2976,7 +2975,7 @@ public class CombatUtil { ability2.setStackDescription(sb2.toString()); ability2.setDescription(sb2.toString()); - AllZone.getStack().add(ability2); + Singletons.getModel().getGameState().getStack().add(ability2); Log.debug("Adding Flanking!"); } // flanking @@ -3020,7 +3019,7 @@ public class CombatUtil { crd.addTempAttackBoost(1); crd.addTempDefenseBoost(1); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve @@ -3032,7 +3031,7 @@ public class CombatUtil { ability.setDescription(sb.toString()); ability.setActivatingPlayer(c.getController()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } final Player phasingPlayer = c.getController(); @@ -3052,7 +3051,7 @@ public class CombatUtil { fhUntap.setDescription(sbUntap.toString()); fhUntap.setStackDescription(sbUntap.toString()); - AllZone.getStack().addSimultaneousStackEntry(fhUntap); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(fhUntap); // If any Finest Hours, queue up a new combat phase for (int ix = 0; ix < phasingPlayer.getCardsIn(ZoneType.Battlefield, "Finest Hour").size(); ix++) { @@ -3068,7 +3067,7 @@ public class CombatUtil { fhAddCombat.setDescription(sbACom.toString()); fhAddCombat.setStackDescription(sbACom.toString()); - AllZone.getStack().addSimultaneousStackEntry(fhAddCombat); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(fhAddCombat); } } @@ -3107,7 +3106,7 @@ public class CombatUtil { enchantment = CardFactoryUtil.getBestEnchantmentAI(enchantments, this, false); } if ((enchantment != null) && GameState.isCardInPlay(attacker)) { - GameAction.changeZone(AllZone.getZoneOf(enchantment), + GameAction.changeZone(GameState.getZoneOf(enchantment), enchantment.getOwner().getZone(ZoneType.Battlefield), enchantment, null); enchantment.enchantEntity(attacker); } @@ -3122,7 +3121,7 @@ public class CombatUtil { ability4.setDescription(sb4.toString()); ability4.setStackDescription(sb4.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability4); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability4); } // For } } @@ -3164,7 +3163,7 @@ public class CombatUtil { crd.addTempAttackBoost(pump); crd.addTempDefenseBoost(pump); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve @@ -3174,7 +3173,7 @@ public class CombatUtil { sb.append(c).append(" - (Rampage) gets +").append(pump).append("/+").append(pump).append(" until EOT."); ability.setStackDescription(sb.toString()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } } diff --git a/src/main/java/forge/game/phase/EndOfTurn.java b/src/main/java/forge/game/phase/EndOfTurn.java index ccc77b293d4..5821a03b83c 100644 --- a/src/main/java/forge/game/phase/EndOfTurn.java +++ b/src/main/java/forge/game/phase/EndOfTurn.java @@ -21,7 +21,6 @@ import java.util.List; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -65,7 +64,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { // reset mustAttackEntity for me Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().setMustAttackEntity(null); - AllZone.getStaticEffects().rePopulateStateBasedList(); + Singletons.getModel().getGameState().getStaticEffects().rePopulateStateBasedList(); for (final Card c : all) { if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, sacrifice CARDNAME.")) { @@ -83,7 +82,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { sac.setStackDescription(sb.toString()); sac.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sac); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sac); } if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, exile CARDNAME.")) { @@ -101,7 +100,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { exile.setStackDescription(sb.toString()); exile.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(exile); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(exile); } if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, destroy CARDNAME.")) { @@ -119,7 +118,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { destroy.setStackDescription(sb.toString()); destroy.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(destroy); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(destroy); } // Berserk is using this, so don't check isFaceDown() @@ -139,7 +138,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { sac.setStackDescription(sb.toString()); sac.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sac); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sac); } else { c.removeAllExtrinsicKeyword("At the beginning of the next end step, " @@ -167,7 +166,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } if (c.getName().equals("Erg Raiders") && !c.getDamageHistory().getCreatureAttackedThisTurn() && !c.hasSickness() @@ -186,7 +185,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } if (c.hasKeyword("At the beginning of your end step, return CARDNAME to its owner's hand.") @@ -205,7 +204,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } @@ -223,7 +222,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setDescription("At the beginning of this turn's end step, you lose the game."); change.setActivatingPlayer(activePlayer); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } this.execute(this.getAt()); @@ -257,7 +256,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 50721bed90f..923ac09d2ef 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -178,8 +178,8 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { * a {@link forge.game.player.Player} object. */ public final void setPriority(final Player p) { - if (AllZone.getStack() != null) { - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + if (Singletons.getModel().getGameState().getStack() != null) { + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } this.pFirstPriority = p; @@ -346,10 +346,10 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (!this.inCombat()) { this.setNeedToNextPhase(true); } else { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); // no first strikers, skip this step - if (!AllZone.getCombat().assignCombatDamage(true)) { + if (!Singletons.getModel().getGameState().getCombat().assignCombatDamage(true)) { this.setNeedToNextPhase(true); } else { Combat.dealAssignedDamage(); @@ -363,9 +363,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (!this.inCombat()) { this.setNeedToNextPhase(true); } else { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); - if (!AllZone.getCombat().assignCombatDamage(false)) { + if (!Singletons.getModel().getGameState().getCombat().assignCombatDamage(false)) { this.setNeedToNextPhase(true); } else { Combat.dealAssignedDamage(); @@ -377,8 +377,8 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { case COMBAT_END: // End Combat always happens - AllZone.getEndOfCombat().executeUntil(); - AllZone.getEndOfCombat().executeAt(); + Singletons.getModel().getGameState().getEndOfCombat().executeUntil(); + Singletons.getModel().getGameState().getEndOfCombat().executeAt(); CombatUtil.showCombat(); //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); break; @@ -389,7 +389,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { break; case END_OF_TURN: - AllZone.getEndOfTurn().executeAt(); + Singletons.getModel().getGameState().getEndOfTurn().executeAt(); break; case CLEANUP: @@ -411,7 +411,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { c.clearBlockedThisTurn(); } - AllZone.getEndOfTurn().executeUntil(); + Singletons.getModel().getGameState().getEndOfTurn().executeUntil(); for (Player player : Singletons.getModel().getGameState().getPlayers()) { for (Card c : player.getCardsIn(ZoneType.Hand)) @@ -437,12 +437,12 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { final HashMap runParams = new HashMap(); runParams.put("Phase", phase.Name); runParams.put("Player", turn); - AllZone.getTriggerHandler().runTrigger(TriggerType.Phase, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Phase, runParams); } // This line fixes Combat Damage triggers not going off when they should - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); // UNTAP if (phase != PhaseType.UNTAP) { @@ -469,7 +469,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { this.needToNextPhase = false; // If the Stack isn't empty why is nextPhase being called? - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { Log.debug("Phase.nextPhase() is called, but Stack isn't empty."); return; } @@ -484,7 +484,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } if (this.getPhase() == PhaseType.COMBAT_DECLARE_ATTACKERS) { - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); this.nCombatsThisTurn++; } else if (this.getPhase() == PhaseType.UNTAP) { this.nCombatsThisTurn = 0; @@ -492,7 +492,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (this.getPhase() == PhaseType.COMBAT_END) { //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); - AllZone.getCombat().reset(); + Singletons.getModel().getGameState().getCombat().reset(); this.resetAttackedThisCombat(this.getPlayerTurn()); this.bCombat = false; } @@ -505,7 +505,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } if (this.is(PhaseType.COMBAT_DECLARE_BLOCKERS)) { - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); } if (this.is(PhaseType.COMBAT_END) && (this.extraCombats > 0)) { @@ -518,9 +518,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { this.bCombat = true; this.extraCombats--; - AllZone.getCombat().reset(); - AllZone.getCombat().setAttackingPlayer(player); - AllZone.getCombat().setDefendingPlayer(opp); + Singletons.getModel().getGameState().getCombat().reset(); + Singletons.getModel().getGameState().getCombat().setAttackingPlayer(player); + Singletons.getModel().getGameState().getCombat().setDefendingPlayer(opp); this.phaseIndex = PhaseType.COMBAT_DECLARE_ATTACKERS.Index; } else { if (!this.bRepeat) { // for when Cleanup needs to repeat itself @@ -561,9 +561,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ private Player handleNextTurn() { - AllZone.getStack().setCardsCastLastTurn(); - AllZone.getStack().clearCardsCastThisTurn(); - AllZone.resetZoneMoveTracking(); + Singletons.getModel().getGameState().getStack().setCardsCastLastTurn(); + Singletons.getModel().getGameState().getStack().clearCardsCastThisTurn(); + GameState.resetZoneMoveTracking(); for( Player p : Singletons.getModel().getGameState().getPlayers() ) { p.resetProwl(); @@ -823,20 +823,20 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { // pass the priority to other player this.setPriorityPlayer(actingPlayer.getOpponent()); AllZone.getInputControl().resetInput(); - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } else { - if (AllZone.getStack().size() == 0) { + if (Singletons.getModel().getGameState().getStack().size() == 0) { // end phase this.needToNextPhase = true; this.pPlayerPriority = this.getPlayerTurn(); // this needs to be // set early // as we exit the phase } else { - if (!AllZone.getStack().hasSimultaneousStackEntries()) { - AllZone.getStack().resolveStack(); + if (!Singletons.getModel().getGameState().getStack().hasSimultaneousStackEntries()) { + Singletons.getModel().getGameState().getStack().resolveStack(); } } - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } } @@ -918,7 +918,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ public static boolean canCastSorcery(final Player player) { PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler(); - return now.isPlayerTurn(player) && now.getPhase().isMain() && AllZone.getStack().size() == 0; + return now.isPlayerTurn(player) && now.getPhase().isMain() && Singletons.getModel().getGameState().getStack().size() == 0; } /** @@ -937,7 +937,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler(); final Card source = sa.getRootSpellAbility().getSourceCard(); boolean onlyThis = true; - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { for (final Card card : GameState.getCardsIn(ZoneType.Stack)) { if (card != source) { onlyThis = false; diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index b8c2fc6fb5c..dccccf4aa6e 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -90,9 +90,9 @@ public class PhaseUtil { Singletons.getModel().getGameState().notifyNextTurn(); CMessage.SINGLETON_INSTANCE.updateGameInfo(Singletons.getModel().getMatch()); - AllZone.getCombat().reset(); - AllZone.getCombat().setAttackingPlayer(turn); - AllZone.getCombat().setDefendingPlayer(turn.getOpponent()); + Singletons.getModel().getGameState().getCombat().reset(); + Singletons.getModel().getGameState().getCombat().setAttackingPlayer(turn); + Singletons.getModel().getGameState().getCombat().setDefendingPlayer(turn.getOpponent()); // Tokens starting game in play now actually suffer from Sum. Sickness again final List list = turn.getCardsIncludePhasingIn(ZoneType.Battlefield); @@ -220,7 +220,7 @@ public class PhaseUtil { * */ public static void verifyCombat() { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); } /** @@ -290,16 +290,16 @@ public class PhaseUtil { PhaseUtil.verifyCombat(); // Handles removing cards like Mogg Flunkies from combat if group attack didn't occur - final List filterList = AllZone.getCombat().getAttackerList(); + final List filterList = Singletons.getModel().getGameState().getCombat().getAttackerList(); for (Card c : filterList) { if (c.hasKeyword("CARDNAME can't attack or block alone.") && c.isAttacking()) { - if (AllZone.getCombat().getAttackers().size() < 2) { - AllZone.getCombat().removeFromCombat(c); + if (Singletons.getModel().getGameState().getCombat().getAttackers().size() < 2) { + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); } } } - final List list = AllZone.getCombat().getAttackerList(); + final List list = Singletons.getModel().getGameState().getCombat().getAttackerList(); // TODO move propaganda to happen as the Attacker is Declared // Remove illegal Propaganda attacks first only for attacking the Player @@ -318,12 +318,12 @@ public class PhaseUtil { * */ public static void handleAttackingTriggers() { - final List list = AllZone.getCombat().getAttackerList(); - AllZone.getStack().freezeStack(); + final List list = Singletons.getModel().getGameState().getCombat().getAttackerList(); + Singletons.getModel().getGameState().getStack().freezeStack(); // Then run other Attacker bonuses // check for exalted: if (list.size() == 1) { - final Player attackingPlayer = AllZone.getCombat().getAttackingPlayer(); + final Player attackingPlayer = Singletons.getModel().getGameState().getCombat().getAttackingPlayer(); int exaltedMagnitude = 0; for (Card card : attackingPlayer.getCardsIn(ZoneType.Battlefield)) { exaltedMagnitude += card.getKeywordAmount("Exalted"); @@ -340,13 +340,13 @@ public class PhaseUtil { final HashMap runParams = new HashMap(); runParams.put("Attackers", list); - runParams.put("AttackingPlayer", AllZone.getCombat().getAttackingPlayer()); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams); + runParams.put("AttackingPlayer", Singletons.getModel().getGameState().getCombat().getAttackingPlayer()); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackersDeclared, runParams); for (final Card c : list) { CombatUtil.checkDeclareAttackers(c); } - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); } /** @@ -358,21 +358,21 @@ public class PhaseUtil { PhaseUtil.verifyCombat(); // Handles removing cards like Mogg Flunkies from combat if group block didn't occur - final List filterList = AllZone.getCombat().getAllBlockers(); + final List filterList = Singletons.getModel().getGameState().getCombat().getAllBlockers(); for (Card c : filterList) { if (c.hasKeyword("CARDNAME can't attack or block alone.") && c.isBlocking()) { - if (AllZone.getCombat().getAllBlockers().size() < 2) { - AllZone.getCombat().undoBlockingAssignment(c); + if (Singletons.getModel().getGameState().getCombat().getAllBlockers().size() < 2) { + Singletons.getModel().getGameState().getCombat().undoBlockingAssignment(c); } } } - AllZone.getStack().freezeStack(); + Singletons.getModel().getGameState().getStack().freezeStack(); - AllZone.getCombat().setUnblocked(); + Singletons.getModel().getGameState().getCombat().setUnblocked(); List list = new ArrayList(); - list.addAll(AllZone.getCombat().getAllBlockers()); + list.addAll(Singletons.getModel().getGameState().getCombat().getAllBlockers()); list = CardLists.filter(list, new Predicate() { @Override @@ -381,18 +381,18 @@ public class PhaseUtil { } }); - final List attList = AllZone.getCombat().getAttackerList(); + final List attList = Singletons.getModel().getGameState().getCombat().getAttackerList(); CombatUtil.checkDeclareBlockers(list); for (final Card a : attList) { - final List blockList = AllZone.getCombat().getBlockers(a); + final List blockList = Singletons.getModel().getGameState().getCombat().getBlockers(a); for (final Card b : blockList) { CombatUtil.checkBlockedAttackers(a, b); } } - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); AllZone.getGameLog().add("Combat", CombatUtil.getCombatBlockForLog(), 1); } diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index bf549f56c12..893c732c188 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -77,7 +77,7 @@ public class Upkeep extends Phase implements java.io.Serializable { */ @Override public final void executeAt() { - AllZone.getStack().freezeStack(); + Singletons.getModel().getGameState().getStack().freezeStack(); Upkeep.upkeepBraidOfFire(); Upkeep.upkeepSlowtrips(); // for "Draw a card at the beginning of the next turn's upkeep." @@ -114,7 +114,7 @@ public class Upkeep extends Phase implements java.io.Serializable { Upkeep.upkeepCurseOfMisfortunes(); Upkeep.upkeepPowerSurge(); - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); } // UPKEEP CARDS: @@ -154,7 +154,7 @@ public class Upkeep extends Phase implements java.io.Serializable { }; upkeepAbility.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(upkeepAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(upkeepAbility); } } // upkeepBraidOfFire @@ -212,7 +212,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sacAbility.setStackDescription(sb.toString()); sacAbility.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sacAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sacAbility); c.removeAllExtrinsicKeyword("(Echo unpaid)"); } @@ -244,7 +244,7 @@ public class Upkeep extends Phase implements java.io.Serializable { slowtrip.setStackDescription(card + " - Draw a card."); slowtrip.setDescription(card + " - Draw a card."); - AllZone.getStack().addSimultaneousStackEntry(slowtrip); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(slowtrip); } player.clearSlowtripList(); @@ -269,7 +269,7 @@ public class Upkeep extends Phase implements java.io.Serializable { slowtrip.setStackDescription(card.getName() + " - Draw a card"); slowtrip.setDescription(card + " - Draw a card."); - AllZone.getStack().addSimultaneousStackEntry(slowtrip); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(slowtrip); } opponent.clearSlowtripList(); @@ -334,7 +334,7 @@ public class Upkeep extends Phase implements java.io.Serializable { upkeepAbility.setStackDescription(sb.toString()); upkeepAbility.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(upkeepAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(upkeepAbility); } // destroy // sacrifice @@ -389,7 +389,7 @@ public class Upkeep extends Phase implements java.io.Serializable { upkeepAbility.setStackDescription(sb.toString()); upkeepAbility.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(upkeepAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(upkeepAbility); } // sacrifice // destroy @@ -434,7 +434,7 @@ public class Upkeep extends Phase implements java.io.Serializable { upkeepAbility.setStackDescription(sb.toString()); upkeepAbility.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(upkeepAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(upkeepAbility); } // destroy } @@ -536,7 +536,7 @@ public class Upkeep extends Phase implements java.io.Serializable { final StringBuilder sb = new StringBuilder(); sb.append(abyss.getName()).append(" - destroy a nonartifact creature of your choice."); sacrificeCreature.setStackDescription(sb.toString()); - AllZone.getStack().addAndUnfreeze(sacrificeCreature); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(sacrificeCreature); } // end for } // The Abyss @@ -610,7 +610,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(c.getName()).append(" - destroy 1 creature with lowest power."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // end for } // upkeepDropOfHoney() @@ -661,7 +661,7 @@ public class Upkeep extends Phase implements java.io.Serializable { final Ability pay = new Ability(c, "0") { @Override public void resolve() { - if (AllZone.getZoneOf(c).is(ZoneType.Battlefield)) { + if (GameState.getZoneOf(c).is(ZoneType.Battlefield)) { final StringBuilder cost = new StringBuilder(); cost.append("Pay cost for ").append(c).append("\r\n"); GameActionUtil.payManaDuringAbilityResolve(cost.toString(), noPay.getManaCost(), @@ -671,7 +671,7 @@ public class Upkeep extends Phase implements java.io.Serializable { }; // end pay ability pay.setStackDescription("Demonic Hordes - Upkeep Cost"); - AllZone.getStack().addSimultaneousStackEntry(pay); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(pay); } // end choice else { @@ -679,7 +679,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(c.getName()).append(" - is tapped and you must sacrifice a land of opponent's choice"); noPay.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(noPay); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(noPay); } } // end human @@ -693,10 +693,10 @@ public class Upkeep extends Phase implements java.io.Serializable { }; computerPay.setStackDescription("Computer pays Demonic Hordes upkeep cost"); - AllZone.getStack().addSimultaneousStackEntry(computerPay); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(computerPay); } else { - AllZone.getStack().addSimultaneousStackEntry(noPay); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(noPay); } } // end computer @@ -791,7 +791,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepInkDissolver() @@ -876,7 +876,7 @@ public class Upkeep extends Phase implements java.io.Serializable { k.removeExtrinsicKeyword("Vigilance"); } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve() @@ -893,7 +893,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepKithkinZephyrnaut() @@ -993,7 +993,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepLeafCrownedElder() @@ -1073,7 +1073,7 @@ public class Upkeep extends Phase implements java.io.Serializable { k.addTempDefenseBoost(-1); } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve() @@ -1090,7 +1090,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepMudbuttonClanger() @@ -1175,7 +1175,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepNightshadeSchemers() @@ -1276,7 +1276,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepPyroclastConsul() @@ -1368,7 +1368,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepSensationGorger() @@ -1454,7 +1454,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepSqueakingPieGrubfellows() @@ -1538,7 +1538,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepWanderingGraybeard() @@ -1626,7 +1626,7 @@ public class Upkeep extends Phase implements java.io.Serializable { } } }; - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve() @@ -1643,7 +1643,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepWaterspoutWeavers() @@ -1727,7 +1727,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeepWinnowerPatrol() @@ -1814,7 +1814,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(" triggers Kinship"); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // for } // upkeep_Wolf_Skull_Shaman() @@ -1883,7 +1883,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -1925,7 +1925,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -2006,7 +2006,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -2055,7 +2055,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -2094,7 +2094,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -2131,7 +2131,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setDescription(sb.toString()); if (damage > 0) { - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } // for } // upkeepPowerSurge() @@ -2222,7 +2222,7 @@ public class Upkeep extends Phase implements java.io.Serializable { ability.setDescription(source.getName() + " - " + player + " taps X artifacts, creatures or lands he or she controls."); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // foreach(wire) } // upkeepTangleWire() @@ -2257,7 +2257,7 @@ public class Upkeep extends Phase implements java.io.Serializable { sb.append(player).append("."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } @@ -2304,7 +2304,7 @@ public class Upkeep extends Phase implements java.io.Serializable { enchantment = CardFactoryUtil.getBestEnchantmentAI(enchantmentsInLibrary, this, false); } if (enchantment != null) { - GameAction.changeZone(AllZone.getZoneOf(enchantment), + GameAction.changeZone(GameState.getZoneOf(enchantment), enchantment.getOwner().getZone(ZoneType.Battlefield), enchantment, null); enchantment.enchantEntity(source.getEnchantingPlayer()); } @@ -2318,7 +2318,7 @@ public class Upkeep extends Phase implements java.io.Serializable { + " the same name as a Curse attached to enchanted player, " + "put it onto the battlefield attached to that player, then shuffle you library."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } // upkeepCurseOfMisfortunes diff --git a/src/main/java/forge/game/player/ComputerAIGeneral.java b/src/main/java/forge/game/player/ComputerAIGeneral.java index 9833fdeab28..1f29366fb75 100644 --- a/src/main/java/forge/game/player/ComputerAIGeneral.java +++ b/src/main/java/forge/game/player/ComputerAIGeneral.java @@ -23,7 +23,6 @@ import java.util.List; import com.esotericsoftware.minlog.Log; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -285,9 +284,9 @@ public class ComputerAIGeneral implements Computer { public final void declareAttackers() { // 12/2/10(sol) the decision making here has moved to getAttackers() - AllZone.setCombat(ComputerUtil.getAttackers(player)); + Singletons.getModel().getGameState().setCombat(ComputerUtil.getAttackers(player)); - final List att = AllZone.getCombat().getAttackers(); + final List att = Singletons.getModel().getGameState().getCombat().getAttackers(); if (!att.isEmpty()) { Singletons.getModel().getGameState().getPhaseHandler().setCombat(true); } @@ -314,9 +313,9 @@ public class ComputerAIGeneral implements Computer { public final void declareBlockers() { final List blockers = GameState.getCreaturesInPlay(player); - AllZone.setCombat(ComputerUtilBlock.getBlockers(player, AllZone.getCombat(), blockers)); + Singletons.getModel().getGameState().setCombat(ComputerUtilBlock.getBlockers(player, Singletons.getModel().getGameState().getCombat(), blockers)); - CombatUtil.orderMultipleCombatants(AllZone.getCombat()); + CombatUtil.orderMultipleCombatants(Singletons.getModel().getGameState().getCombat()); Singletons.getModel().getGameState().getPhaseHandler().setNeedToNextPhase(true); } @@ -340,13 +339,13 @@ public class ComputerAIGeneral implements Computer { */ @Override public final void playSpellAbilities() { - if (AllZone.getStack().isEmpty()) { + if (Singletons.getModel().getGameState().getStack().isEmpty()) { this.playSpellAbilitiesStackEmpty(); return; } // if top of stack is owned by me - if (AllZone.getStack().peekInstance().getActivatingPlayer().isComputer()) { + if (Singletons.getModel().getGameState().getStack().peekInstance().getActivatingPlayer().isComputer()) { // probably should let my stuff resolve to force Human to respond to // it Singletons.getModel().getGameState().getPhaseHandler().passPriority(); diff --git a/src/main/java/forge/game/player/ComputerAIInput.java b/src/main/java/forge/game/player/ComputerAIInput.java index 54d57248a57..f8f704c7a77 100644 --- a/src/main/java/forge/game/player/ComputerAIInput.java +++ b/src/main/java/forge/game/player/ComputerAIInput.java @@ -19,7 +19,6 @@ package forge.game.player; import com.esotericsoftware.minlog.Log; -import forge.AllZone; import forge.Singletons; import forge.control.input.Input; import forge.game.phase.PhaseType; @@ -94,7 +93,7 @@ public class ComputerAIInput extends Input { // TODO instead of setNextPhase, pass priority final PhaseType phase = Singletons.getModel().getGameState().getPhaseHandler().getPhase(); - if (AllZone.getStack().size() > 0) { + if (Singletons.getModel().getGameState().getStack().size() > 0) { this.computer.playSpellAbilities(); } else { switch(phase) { diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/player/ComputerUtil.java index 570bb1641d4..8ca999d55c1 100644 --- a/src/main/java/forge/game/player/ComputerUtil.java +++ b/src/main/java/forge/game/player/ComputerUtil.java @@ -27,7 +27,6 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Iterables; -import forge.AllZone; import forge.Card; import forge.CardLists; import forge.CardPredicates; @@ -138,7 +137,7 @@ public class ComputerUtil { return false; } - AllZone.getStack().freezeStack(); + Singletons.getModel().getGameState().getStack().freezeStack(); final Card source = sa.getSourceCard(); if (sa.isSpell() && !source.isCopiedSpell()) { @@ -150,12 +149,12 @@ public class ComputerUtil { if (cost == null) { ComputerUtil.payManaCost(ai, sa); sa.getBeforePayManaAI().execute(); - AllZone.getStack().addAndUnfreeze(sa); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(sa); return true; } else { final CostPayment pay = new CostPayment(cost, sa); if (pay.payComputerCosts(ai)) { - AllZone.getStack().addAndUnfreeze(sa); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(sa); if (sa.getSplicedCards() != null && !sa.getSplicedCards().isEmpty()) { GuiChoose.oneOrNone("Computer reveals spliced cards:", sa.getSplicedCards()); } @@ -292,7 +291,7 @@ public class ComputerUtil { // TODO - "Look" at Targeted SA and "calculate" the threshold // if (bestRestriction < targetedThreshold) return false; - AllZone.getStack().freezeStack(); + Singletons.getModel().getGameState().getStack().freezeStack(); final Card source = bestSA.getSourceCard(); if (bestSA.isSpell() && !source.isCopiedSpell()) { @@ -305,11 +304,11 @@ public class ComputerUtil { // Honestly Counterspells shouldn't use this branch ComputerUtil.payManaCost(ai, bestSA); bestSA.getBeforePayManaAI().execute(); - AllZone.getStack().addAndUnfreeze(bestSA); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(bestSA); } else { final CostPayment pay = new CostPayment(cost, bestSA); if (pay.payComputerCosts(ai)) { - AllZone.getStack().addAndUnfreeze(bestSA); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(bestSA); } } @@ -335,11 +334,11 @@ public class ComputerUtil { final Cost cost = sa.getPayCosts(); if (cost == null) { ComputerUtil.payManaCost(ai, sa); - AllZone.getStack().add(sa); + Singletons.getModel().getGameState().getStack().add(sa); } else { final CostPayment pay = new CostPayment(cost, sa); if (pay.payComputerCosts(ai)) { - AllZone.getStack().add(sa); + Singletons.getModel().getGameState().getStack().add(sa); } } } @@ -361,7 +360,7 @@ public class ComputerUtil { sa.setSourceCard(Singletons.getModel().getGameAction().moveToStack(source)); } - AllZone.getStack().add(sa); + Singletons.getModel().getGameState().getStack().add(sa); } /** @@ -401,7 +400,7 @@ public class ComputerUtil { final CostPayment pay = new CostPayment(cost, newSA); pay.payComputerCosts(ai); - AllZone.getStack().add(newSA); + Singletons.getModel().getGameState().getStack().add(newSA); } /** @@ -1360,7 +1359,7 @@ public class ComputerUtil { landList.remove(land); ai.playLand(land); - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { return true; } } @@ -1613,8 +1612,8 @@ public class ComputerUtil { final Card target, final int amount) { List typeList = new ArrayList(); if (zone.equals(ZoneType.Stack)) { - for (int i = 0; i < AllZone.getStack().size(); i++) { - typeList.add(AllZone.getStack().peekAbility(i).getSourceCard()); + for (int i = 0; i < Singletons.getModel().getGameState().getStack().size(); i++) { + typeList.add(Singletons.getModel().getGameState().getStack().peekAbility(i).getSourceCard()); typeList = CardLists.getValidCards(typeList, type.split(","), activate.getController(), activate); } } else { @@ -1783,7 +1782,7 @@ public class ComputerUtil { public static Combat getBlockers(final Player ai) { final List blockers = ai.getCardsIn(ZoneType.Battlefield); - return ComputerUtilBlock.getBlockers(ai, AllZone.getCombat(), blockers); + return ComputerUtilBlock.getBlockers(ai, Singletons.getModel().getGameState().getCombat(), blockers); } /** diff --git a/src/main/java/forge/game/player/ComputerUtilAttack.java b/src/main/java/forge/game/player/ComputerUtilAttack.java index 28a9668e318..d5c5352647b 100644 --- a/src/main/java/forge/game/player/ComputerUtilAttack.java +++ b/src/main/java/forge/game/player/ComputerUtilAttack.java @@ -23,7 +23,6 @@ import java.util.Random; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -468,7 +467,7 @@ public class ComputerUtilAttack { final Object entity = ai.getMustAttackEntity(); if (null != entity) { - final List defenders = AllZone.getCombat().getDefenders(); + final List defenders = Singletons.getModel().getGameState().getCombat().getDefenders(); n = defenders.indexOf(entity); if (-1 == n) { System.out.println("getMustAttackEntity() returned something not in defenders."); @@ -503,11 +502,11 @@ public class ComputerUtilAttack { this.random.setSeed(Singletons.getModel().getGameState().getPhaseHandler().getTurn() + this.randomInt); final Combat combat = new Combat(); - combat.setAttackingPlayer(AllZone.getCombat().getAttackingPlayer()); - combat.setDefendingPlayer(AllZone.getCombat().getDefendingPlayer()); + combat.setAttackingPlayer(Singletons.getModel().getGameState().getCombat().getAttackingPlayer()); + combat.setDefendingPlayer(Singletons.getModel().getGameState().getCombat().getDefendingPlayer()); - AllZone.getCombat().initiatePossibleDefenders(AllZone.getCombat().getDefendingPlayer()); - combat.setDefenders(AllZone.getCombat().getDefenders()); + Singletons.getModel().getGameState().getCombat().initiatePossibleDefenders(Singletons.getModel().getGameState().getCombat().getDefendingPlayer()); + combat.setDefenders(Singletons.getModel().getGameState().getCombat().getDefenders()); if (this.attackers.isEmpty()) { return combat; diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 4a7f8e03f90..47991c635c8 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -322,7 +322,7 @@ public abstract class Player extends GameEntity implements Comparable { repParams.put("Event", "GainLife"); repParams.put("Affected", this); repParams.put("LifeGained", toGain); - if (AllZone.getReplacementHandler().run(repParams) != ReplacementResult.NotReplaced) { + if (Singletons.getModel().getGameState().getReplacementHandler().run(repParams) != ReplacementResult.NotReplaced) { return false; } @@ -341,7 +341,7 @@ public abstract class Player extends GameEntity implements Comparable { final HashMap runParams = new HashMap(); runParams.put("Player", this); runParams.put("LifeAmount", lifeGain); - AllZone.getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.LifeGained, runParams); } else { System.out.println("Player - trying to gain negative or 0 life"); } @@ -398,7 +398,7 @@ public abstract class Player extends GameEntity implements Comparable { final HashMap runParams = new HashMap(); runParams.put("Player", this); runParams.put("LifeAmount", toLose); - AllZone.getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.LifeLost, runParams); return lifeLost; } @@ -537,7 +537,7 @@ public abstract class Player extends GameEntity implements Comparable { runParams.put("DamageTarget", this); runParams.put("DamageAmount", damageToDo); runParams.put("IsCombatDamage", isCombat); - AllZone.getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.DamageDone, runParams); return true; } @@ -747,7 +747,7 @@ public abstract class Player extends GameEntity implements Comparable { repParams.put("DamageAmount", damage); repParams.put("IsCombat", isCombat); - if (AllZone.getReplacementHandler().run(repParams) != ReplacementResult.NotReplaced) { + if (Singletons.getModel().getGameState().getReplacementHandler().run(repParams) != ReplacementResult.NotReplaced) { return 0; } @@ -797,7 +797,7 @@ public abstract class Player extends GameEntity implements Comparable { repParams.put("IsCombat", isCombat); repParams.put("Prevention", true); - if (AllZone.getReplacementHandler().run(repParams) != ReplacementResult.NotReplaced) { + if (Singletons.getModel().getGameState().getReplacementHandler().run(repParams) != ReplacementResult.NotReplaced) { return 0; } @@ -1256,7 +1256,7 @@ public abstract class Player extends GameEntity implements Comparable { repRunParams.put("Event", "Draw"); repRunParams.put("Affected", this); - if (AllZone.getReplacementHandler().run(repRunParams) != ReplacementResult.NotReplaced) { + if (Singletons.getModel().getGameState().getReplacementHandler().run(repRunParams) != ReplacementResult.NotReplaced) { return drawn; } @@ -1295,7 +1295,7 @@ public abstract class Player extends GameEntity implements Comparable { final HashMap runParams = new HashMap(); runParams.put("Card", c); runParams.put("Number", this.numDrawnThisTurn); - AllZone.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Drawn, runParams); } // lose: else if (!Preferences.DEV_MODE || Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MILLING_LOSS)) { @@ -1335,7 +1335,7 @@ public abstract class Player extends GameEntity implements Comparable { List result; if (zoneType == ZoneType.Stack) { result = new ArrayList(); - for (Card c : AllZone.getStackZone().getCards()) { + for (Card c : Singletons.getModel().getGameState().getStackZone().getCards()) { if (c.getOwner().equals(this)) { result.add(c); } @@ -1570,7 +1570,7 @@ public abstract class Player extends GameEntity implements Comparable { runParams.put("Player", this); runParams.put("Card", c); runParams.put("Cause", cause); - AllZone.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Discarded, runParams); } // end doDiscard @@ -1744,7 +1744,7 @@ public abstract class Player extends GameEntity implements Comparable { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Player", this); - AllZone.getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Shuffled, runParams); } // shuffle // ////////////////////////////// @@ -1807,10 +1807,10 @@ public abstract class Player extends GameEntity implements Comparable { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", land); - AllZone.getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams); } - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); } /** @@ -2131,7 +2131,7 @@ public abstract class Player extends GameEntity implements Comparable { runParams.put("Affected", this); runParams.put("Event", "GameLoss"); - if (AllZone.getReplacementHandler().run(runParams) != ReplacementResult.NotReplaced) { + if (Singletons.getModel().getGameState().getReplacementHandler().run(runParams) != ReplacementResult.NotReplaced) { return false; } } diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 7b72763f751..6670419c4fe 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -717,23 +717,23 @@ public class MagicStack extends MyObservable { runParams.put("Player", sp.getSourceCard().getController()); runParams.put("Activator", sp.getActivatingPlayer()); runParams.put("CastSA", sp); - AllZone.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams); // Run SpellCast triggers if (sp.isSpell()) { - AllZone.getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.SpellCast, runParams); } // Run AbilityCast triggers if (sp.isAbility() && !sp.isTrigger()) { - AllZone.getTriggerHandler().runTrigger(TriggerType.AbilityCast, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AbilityCast, runParams); } // Run Cycled triggers if (sp.isCycling()) { runParams.clear(); runParams.put("Card", sp.getSourceCard()); - AllZone.getTriggerHandler().runTrigger(TriggerType.Cycled, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Cycled, runParams); } // Run BecomesTarget triggers @@ -745,7 +745,7 @@ public class MagicStack extends MyObservable { for (final Object tgt : tc.getTargets()) { runParams.put("Target", tgt); - AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } } } @@ -756,17 +756,17 @@ public class MagicStack extends MyObservable { else if (sp.getTargetCard() != null) { runParams.put("Target", sp.getTargetCard()); - AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } else if ((sp.getTargetList() != null) && (sp.getTargetList().size() > 0)) { for (final Card ctgt : sp.getTargetList()) { runParams.put("Target", ctgt); - AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } } else if (sp.getTargetPlayer() != null) { runParams.put("Target", sp.getTargetPlayer()); - AllZone.getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.BecomesTarget, runParams); } } @@ -797,8 +797,8 @@ public class MagicStack extends MyObservable { final SpellAbility counter = new Ability(bazaar, "0") { @Override public void resolve() { - if (AllZone.getStack().size() > 0) { - AllZone.getStack().pop(); + if (Singletons.getModel().getGameState().getStack().size() > 0) { + Singletons.getModel().getGameState().getStack().pop(); } } // resolve() }; // SpellAbility @@ -911,7 +911,7 @@ public class MagicStack extends MyObservable { sa.getSourceCard().setXManaCostPaid(0); if (source.hasStartOfKeyword("Haunt") && !source.isCreature() - && AllZone.getZoneOf(source).is(ZoneType.Graveyard)) { + && GameState.getZoneOf(source).is(ZoneType.Graveyard)) { final List creats = GameState.getCreaturesInPlay(); final Ability haunterDiesWork = new Ability(source, "0") { @Override @@ -994,7 +994,7 @@ public class MagicStack extends MyObservable { sa.setFlashBackAbility(false); } else if (source.hasKeyword("Rebound") && source.getCastFrom() == ZoneType.Hand - && AllZone.getZoneOf(source).is(ZoneType.Stack) + && GameState.getZoneOf(source).is(ZoneType.Stack) && source.getOwner().equals(source.getController())) //"If you cast this spell from your hand" { @@ -1010,7 +1010,7 @@ public class MagicStack extends MyObservable { "| TriggerDescription$ At the beginning of your next upkeep, you may cast " + source.toString() + " without paying it's manacost.", source, true); - AllZone.getTriggerHandler().registerDelayedTrigger(reboundTrigger); + Singletons.getModel().getGameState().getTriggerHandler().registerDelayedTrigger(reboundTrigger); } // If Spell and still on the Stack then let it goto the graveyard or diff --git a/src/main/java/forge/game/zone/PlayerZone.java b/src/main/java/forge/game/zone/PlayerZone.java index 063ddc770cb..c8734559f4b 100644 --- a/src/main/java/forge/game/zone/PlayerZone.java +++ b/src/main/java/forge/game/zone/PlayerZone.java @@ -25,11 +25,11 @@ import java.util.List; import java.util.Observable; import java.util.Observer; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.card.trigger.TriggerType; +import forge.game.GameState; import forge.game.player.Player; import forge.util.MyObservable; @@ -83,7 +83,7 @@ public class PlayerZone extends MyObservable implements IPlayerZone, Observer, j // don't want to log those. if (!c.isImmutable()) { this.cardsAddedThisTurn.add(c); - final PlayerZone zone = AllZone.getZoneOf(c); + final PlayerZone zone = GameState.getZoneOf(c); if (zone != null) { this.cardsAddedThisTurnSource.add(zone.getZoneType()); } else { @@ -112,9 +112,9 @@ public class PlayerZone extends MyObservable implements IPlayerZone, Observer, j c.setTurnInZone(Singletons.getModel().getGameState().getPhaseHandler().getTurn()); if (!this.is(ZoneType.Battlefield) && c.isTapped()) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); c.untap(); - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); } this.cardList.add(c); @@ -163,7 +163,7 @@ public class PlayerZone extends MyObservable implements IPlayerZone, Observer, j // don't want to log those. if (!c.isImmutable()) { this.cardsAddedThisTurn.add(c); - final PlayerZone zone = AllZone.getZoneOf(c); + final PlayerZone zone = GameState.getZoneOf(c); if (zone != null) { this.cardsAddedThisTurnSource.add(zone.getZoneType()); } else { @@ -172,9 +172,9 @@ public class PlayerZone extends MyObservable implements IPlayerZone, Observer, j } if (!this.is(ZoneType.Battlefield) && c.isTapped()) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); c.untap(); - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); } this.cardList.add(index, c); diff --git a/src/main/java/forge/game/zone/PlayerZoneBattlefield.java b/src/main/java/forge/game/zone/PlayerZoneBattlefield.java index a31d4798fa4..753b80f3dd4 100644 --- a/src/main/java/forge/game/zone/PlayerZoneBattlefield.java +++ b/src/main/java/forge/game/zone/PlayerZoneBattlefield.java @@ -24,7 +24,6 @@ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -142,7 +141,7 @@ public class PlayerZoneBattlefield extends PlayerZone { sb.append(source).append(" - tap all lands "); sb.append(tisLand.getController()).append(" controls."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } @@ -167,16 +166,16 @@ public class PlayerZoneBattlefield extends PlayerZone { // (pLands - 1) because this land is in play, and the // ability is before it is in play if (oLands.size() <= (pLands.size() - 1)) { - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } } // isLand() } - if (AllZone.getStaticEffects().getCardToEffectsList().containsKey(c.getName())) { - final String[] effects = AllZone.getStaticEffects().getCardToEffectsList().get(c.getName()); + if (Singletons.getModel().getGameState().getStaticEffects().getCardToEffectsList().containsKey(c.getName())) { + final String[] effects = Singletons.getModel().getGameState().getStaticEffects().getCardToEffectsList().get(c.getName()); for (final String effect : effects) { - AllZone.getStaticEffects().addStateBasedEffect(effect); + Singletons.getModel().getGameState().getStaticEffects().addStateBasedEffect(effect); } } } // end add() @@ -233,12 +232,12 @@ public class PlayerZoneBattlefield extends PlayerZone { c.leavesPlay(); } - if (AllZone.getStaticEffects().getCardToEffectsList().containsKey(c.getName())) { - final String[] effects = AllZone.getStaticEffects().getCardToEffectsList().get(c.getName()); + if (Singletons.getModel().getGameState().getStaticEffects().getCardToEffectsList().containsKey(c.getName())) { + final String[] effects = Singletons.getModel().getGameState().getStaticEffects().getCardToEffectsList().get(c.getName()); String tempEffect = ""; for (final String effect : effects) { tempEffect = effect; - AllZone.getStaticEffects().removeStateBasedEffect(effect); + Singletons.getModel().getGameState().getStaticEffects().removeStateBasedEffect(effect); // this is to make sure cards reset correctly final Command comm = GameActionUtil.getCommands().get(tempEffect); comm.execute(); diff --git a/src/main/java/forge/gui/GuiDisplayUtil.java b/src/main/java/forge/gui/GuiDisplayUtil.java index 8899f91b48a..213856061ba 100644 --- a/src/main/java/forge/gui/GuiDisplayUtil.java +++ b/src/main/java/forge/gui/GuiDisplayUtil.java @@ -504,8 +504,8 @@ public final class GuiDisplayUtil { computerDevExileSetup = GuiDisplayUtil.devProcessCardsForZone(computerSetupExile, ai); } - AllZone.getTriggerHandler().suppressMode(TriggerType.ChangesZone); - AllZone.getCombat().reset(); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.ChangesZone); + Singletons.getModel().getGameState().getCombat().reset(); for (final Card c : humanDevSetup) { human.getZone(ZoneType.Hand).add(c); Singletons.getModel().getGameAction().moveToPlay(c); @@ -546,7 +546,7 @@ public final class GuiDisplayUtil { ai.getZone(ZoneType.Exile).setCards(computerDevExileSetup); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.ChangesZone); if (setComputerLife > 0) { ai.setLife(setComputerLife, null); diff --git a/src/main/java/forge/gui/match/TargetingOverlay.java b/src/main/java/forge/gui/match/TargetingOverlay.java index 3afe4c6e714..fec0fad29aa 100644 --- a/src/main/java/forge/gui/match/TargetingOverlay.java +++ b/src/main/java/forge/gui/match/TargetingOverlay.java @@ -29,8 +29,8 @@ import java.util.Map; import javax.swing.JPanel; -import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.control.FControl; import forge.gui.match.nonsingleton.CField; import forge.gui.toolbox.FSkin; @@ -108,8 +108,8 @@ public enum TargetingOverlay { } // Combat cards - for (Card attackingCard : AllZone.getCombat().getAttackers()) { - temp = AllZone.getCombat().getBlockers(attackingCard); + for (Card attackingCard : Singletons.getModel().getGameState().getCombat().getAttackers()) { + temp = Singletons.getModel().getGameState().getCombat().getBlockers(attackingCard); for (Card blockingCard : temp) { arcs.add(new Point[] { endpoints.get(attackingCard.getUniqueNumber()), diff --git a/src/main/java/forge/gui/match/VAssignDamage.java b/src/main/java/forge/gui/match/VAssignDamage.java index fe7789ba646..b58891e69e2 100644 --- a/src/main/java/forge/gui/match/VAssignDamage.java +++ b/src/main/java/forge/gui/match/VAssignDamage.java @@ -32,10 +32,10 @@ import javax.swing.SwingUtilities; import javax.swing.border.LineBorder; import net.miginfocom.swing.MigLayout; -import forge.AllZone; import forge.Card; import forge.Command; import forge.GameEntity; +import forge.Singletons; import forge.gui.SOverlayUtils; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FScrollPane; @@ -499,7 +499,7 @@ public class VAssignDamage { // be modified. private void finish() { if (trample) { - AllZone.getCombat().addDefendingDamage(this.damageToOpponent, this.attacker); + Singletons.getModel().getGameState().getCombat().addDefendingDamage(this.damageToOpponent, this.attacker); } for (int i = 0; i < lstDefenders.size(); i++) { diff --git a/src/main/java/forge/gui/match/controllers/CDock.java b/src/main/java/forge/gui/match/controllers/CDock.java index 629f1e36a07..ca8f3e92d3e 100644 --- a/src/main/java/forge/gui/match/controllers/CDock.java +++ b/src/main/java/forge/gui/match/controllers/CDock.java @@ -28,7 +28,6 @@ import java.util.TreeMap; import javax.swing.JOptionPane; import javax.swing.SwingWorker; -import forge.AllZone; import forge.Card; import forge.CardLists; import forge.CardPredicates.Presets; @@ -148,8 +147,8 @@ public enum CDock implements ICDoc { if (ph.is(PhaseType.COMBAT_DECLARE_ATTACKERS, human)) { for (Card c : CardLists.filter(human.getCardsIn(ZoneType.Battlefield), Presets.CREATURES)) { - if (!c.isAttacking() && CombatUtil.canAttack(c, AllZone.getCombat())) { - AllZone.getCombat().addAttacker(c); + if (!c.isAttacking() && CombatUtil.canAttack(c, Singletons.getModel().getGameState().getCombat())) { + Singletons.getModel().getGameState().getCombat().addAttacker(c); } } //human.updateObservers(); diff --git a/src/main/java/forge/gui/match/nonsingleton/CField.java b/src/main/java/forge/gui/match/nonsingleton/CField.java index a81c549dd43..0bde0bfad68 100644 --- a/src/main/java/forge/gui/match/nonsingleton/CField.java +++ b/src/main/java/forge/gui/match/nonsingleton/CField.java @@ -436,7 +436,7 @@ public class CField implements ICDoc { } } - final List att = AllZone.getCombat().getAttackerList(); + final List att = Singletons.getModel().getGameState().getCombat().getAttackerList(); if ((c.isTapped() || c.hasSickness() || ((c.hasKeyword("Vigilance")) && att.contains(c))) && (input instanceof InputAttack)) { final forge.view.arcane.CardPanel cardPanel = CField.this.view.getTabletop().getCardPanel( @@ -452,11 +452,11 @@ public class CField implements ICDoc { if (att.contains(c) && (input instanceof InputAttack) && !c.hasKeyword("CARDNAME attacks each turn if able.")) { c.untap(); - AllZone.getCombat().removeFromCombat(c); + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); CombatUtil.showCombat(); } else if (input instanceof InputBlock) { if (c.getController().isHuman()) { - AllZone.getCombat().removeFromCombat(c); + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); } ((InputBlock) input).removeFromAllBlocking(c); CombatUtil.showCombat(); diff --git a/src/main/java/forge/gui/match/views/VCombat.java b/src/main/java/forge/gui/match/views/VCombat.java index 3ada057fd4f..b67925bb5bc 100644 --- a/src/main/java/forge/gui/match/views/VCombat.java +++ b/src/main/java/forge/gui/match/views/VCombat.java @@ -22,7 +22,7 @@ import javax.swing.border.Border; import javax.swing.border.MatteBorder; import net.miginfocom.swing.MigLayout; -import forge.AllZone; +import forge.Singletons; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; @@ -106,7 +106,7 @@ public enum VCombat implements IVDoc { final Border border = new MatteBorder(0, 0, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)); - tab.setText("Combat : " + AllZone.getCombat().getAttackers().size()); + tab.setText("Combat : " + Singletons.getModel().getGameState().getCombat().getAttackers().size()); final JTextArea tar = new JTextArea(s0); tar.setOpaque(false); diff --git a/src/main/java/forge/gui/match/views/VPlayers.java b/src/main/java/forge/gui/match/views/VPlayers.java index 4d353722384..8ba8d0198be 100644 --- a/src/main/java/forge/gui/match/views/VPlayers.java +++ b/src/main/java/forge/gui/match/views/VPlayers.java @@ -26,7 +26,6 @@ import javax.swing.JPanel; import javax.swing.border.MatteBorder; import net.miginfocom.swing.MigLayout; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -180,7 +179,7 @@ public enum VPlayers implements IVDoc { // No need to update if this panel isn't showing if (!parentCell.getSelected().equals(this)) { return; } - stormLabel.setText("Storm count: " + AllZone.getStack().getCardsCastThisTurn().size()); + stormLabel.setText("Storm count: " + Singletons.getModel().getGameState().getStack().getCardsCastThisTurn().size()); } //========= Custom class handling diff --git a/src/main/java/forge/gui/match/views/VStack.java b/src/main/java/forge/gui/match/views/VStack.java index 51ddf9375fd..d210c757717 100644 --- a/src/main/java/forge/gui/match/views/VStack.java +++ b/src/main/java/forge/gui/match/views/VStack.java @@ -31,8 +31,8 @@ import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import net.miginfocom.swing.MigLayout; -import forge.AllZone; import forge.CardUtil; +import forge.Singletons; import forge.card.spellability.SpellAbilityStackInstance; import forge.game.zone.MagicStack; import forge.gui.ForgeAction; @@ -121,7 +121,7 @@ public enum VStack implements IVDoc { // No need to update this unless it's showing if (!parentCell.getSelected().equals(this)) { return; } - final MagicStack stack = AllZone.getStack(); + final MagicStack stack = Singletons.getModel().getGameState().getStack(); int count = 1; JTextArea tar; @@ -245,7 +245,7 @@ public enum VStack implements IVDoc { @Override public final void actionPerformed(final ActionEvent e) { - AllZone.getTriggerHandler().setAlwaysAcceptTrigger(TriggerReactionMenu.this.workTrigID); + Singletons.getModel().getGameState().getTriggerHandler().setAlwaysAcceptTrigger(TriggerReactionMenu.this.workTrigID); } }; @@ -254,7 +254,7 @@ public enum VStack implements IVDoc { @Override public final void actionPerformed(final ActionEvent e) { - AllZone.getTriggerHandler().setAlwaysDeclineTrigger(TriggerReactionMenu.this.workTrigID); + Singletons.getModel().getGameState().getTriggerHandler().setAlwaysDeclineTrigger(TriggerReactionMenu.this.workTrigID); } }; @@ -263,7 +263,7 @@ public enum VStack implements IVDoc { @Override public final void actionPerformed(final ActionEvent e) { - AllZone.getTriggerHandler().setAlwaysAskTrigger(TriggerReactionMenu.this.workTrigID); + Singletons.getModel().getGameState().getTriggerHandler().setAlwaysAskTrigger(TriggerReactionMenu.this.workTrigID); } }; @@ -279,11 +279,11 @@ public enum VStack implements IVDoc { public void setTrigger(final int trigID) { this.workTrigID = trigID; - if (AllZone.getTriggerHandler().isAlwaysAccepted(trigID)) { + if (Singletons.getModel().getGameState().getTriggerHandler().isAlwaysAccepted(trigID)) { ((JCheckBoxMenuItem) this.getComponent(0)).setState(true); ((JCheckBoxMenuItem) this.getComponent(1)).setState(false); ((JCheckBoxMenuItem) this.getComponent(2)).setState(false); - } else if (AllZone.getTriggerHandler().isAlwaysDeclined(trigID)) { + } else if (Singletons.getModel().getGameState().getTriggerHandler().isAlwaysDeclined(trigID)) { ((JCheckBoxMenuItem) this.getComponent(0)).setState(false); ((JCheckBoxMenuItem) this.getComponent(1)).setState(true); ((JCheckBoxMenuItem) this.getComponent(2)).setState(false); diff --git a/src/main/java/forge/util/Expressions.java b/src/main/java/forge/util/Expressions.java new file mode 100644 index 00000000000..6dc6a79c365 --- /dev/null +++ b/src/main/java/forge/util/Expressions.java @@ -0,0 +1,67 @@ +/* + * Forge: Play Magic: the Gathering. + * Copyright (C) 2011 Forge Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package forge.util; + + +/** + * AllZoneUtil contains static functions used to get CardLists of various cards + * in various zones. + * + * @author dennis.r.friedrichsen (slapshot5 on slightlymagic.net) + * @version $Id: AllZoneUtil.java 17567 2012-10-18 14:10:15Z Max mtg $ + */ +public abstract class Expressions { + + + /** + * + * compare. + * + * + * @param leftSide + * a int. + * @param comp + * a {@link java.lang.String} object. + * @param rightSide + * a int. + * @return a boolean. + * @since 1.0.15 + */ + public static boolean compare(final int leftSide, final String comp, final int rightSide) { + // should this function be somewhere else? + // leftSide COMPARED to rightSide: + if (comp.contains("LT")) { + return leftSide < rightSide; + } else if (comp.contains("LE")) { + return leftSide <= rightSide; + } else if (comp.contains("EQ")) { + return leftSide == rightSide; + } else if (comp.contains("GE")) { + return leftSide >= rightSide; + } else if (comp.contains("GT")) { + return leftSide > rightSide; + } else if (comp.contains("NE")) { + return leftSide != rightSide; // not equals + } else if (comp.contains("M2")) { + return (leftSide % 2) == (rightSide % 2); // they are equal modulo 2 + } + + return false; + } + +} // end class AllZoneUtil
@@ -92,7 +92,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable /** {@inheritDoc} */ @Override public boolean canPlay() { - if (AllZone.getStack().isSplitSecondOnStack()) { + if (Singletons.getModel().getGameState().getStack().isSplitSecondOnStack()) { return false; } @@ -169,7 +169,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable } catch (final NumberFormatException e) { y = CardFactoryUtil.xCount(card, card.getSVar(compareTo)); } - if (!AllZoneUtil.compare(x, comparator, y)) { + if (!Expressions.compare(x, comparator, y)) { return false; } } diff --git a/src/main/java/forge/card/spellability/SpellAbilityCondition.java b/src/main/java/forge/card/spellability/SpellAbilityCondition.java index cd58ebd4ab0..4a9c31f690a 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityCondition.java +++ b/src/main/java/forge/card/spellability/SpellAbilityCondition.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -33,6 +32,7 @@ import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** *
@@ -274,7 +274,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { final int left = list.size(); - if (!AllZoneUtil.compare(left, this.getPresentCompare(), right)) { + if (!Expressions.compare(left, this.getPresentCompare(), right)) { return false; } } @@ -296,7 +296,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { right = Integer.parseInt(this.getLifeAmount().substring(2)); } - if (!AllZoneUtil.compare(life, this.getLifeAmount(), right)) { + if (!Expressions.compare(life, this.getLifeAmount(), right)) { return false; } } @@ -311,7 +311,7 @@ public class SpellAbilityCondition extends SpellAbilityVariables { final int svarValue = AbilityFactory.calculateAmount(sa.getSourceCard(), this.getsVarToCheck(), sa); final int operandValue = AbilityFactory.calculateAmount(sa.getSourceCard(), this.getsVarOperand(), sa); - if (!AllZoneUtil.compare(svarValue, this.getsVarOperator(), operandValue)) { + if (!Expressions.compare(svarValue, this.getsVarOperator(), operandValue)) { return false; } diff --git a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java index 53da0e86362..20176da0683 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityRequirements.java +++ b/src/main/java/forge/card/spellability/SpellAbilityRequirements.java @@ -19,11 +19,11 @@ package forge.card.spellability; import java.util.ArrayList; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.card.abilityfactory.AbilityFactory; import forge.card.cost.CostPayment; +import forge.game.GameState; import forge.game.zone.PlayerZone; /** @@ -111,7 +111,7 @@ public class SpellAbilityRequirements { if (!this.ability.getSourceCard().isCopiedSpell()) { final Card c = this.ability.getSourceCard(); - this.fromZone = AllZone.getZoneOf(c); + this.fromZone = GameState.getZoneOf(c); this.zonePosition = this.fromZone.getPosition(c); this.ability.setSourceCard(Singletons.getModel().getGameAction().moveToStack(c)); } @@ -119,7 +119,7 @@ public class SpellAbilityRequirements { // freeze Stack. No abilities should go onto the stack while I'm filling // requirements. - AllZone.getStack().freezeStack(); + Singletons.getModel().getGameState().getStack().freezeStack(); // Skip to paying if parent ability doesn't target and has no // subAbilities. @@ -148,7 +148,7 @@ public class SpellAbilityRequirements { } this.select.resetTargets(); - AllZone.getStack().removeFromFrozenStack(this.ability); + Singletons.getModel().getGameState().getStack().removeFromFrozenStack(this.ability); return; } else { this.needPayment(); @@ -207,7 +207,7 @@ public class SpellAbilityRequirements { this.ability.resetOnceResolved(); this.payment.cancelPayment(); - AllZone.getStack().clearFrozen(); + Singletons.getModel().getGameState().getStack().clearFrozen(); } } @@ -235,6 +235,6 @@ public class SpellAbilityRequirements { } this.ability.getActivatingPlayer().getManaPool().clearManaPaid(this.ability, false); - AllZone.getStack().addAndUnfreeze(this.ability); + Singletons.getModel().getGameState().getStack().addAndUnfreeze(this.ability); } } diff --git a/src/main/java/forge/card/spellability/SpellAbilityRestriction.java b/src/main/java/forge/card/spellability/SpellAbilityRestriction.java index 1f81c8bd8c9..4017f8ed237 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityRestriction.java +++ b/src/main/java/forge/card/spellability/SpellAbilityRestriction.java @@ -21,8 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZone; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -35,6 +33,7 @@ import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** *
@@ -188,7 +187,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { if (this.getZone() == null) { return true; } - PlayerZone cardZone = AllZone.getZoneOf(c); + PlayerZone cardZone = GameState.getZoneOf(c); Player activator = sa.getActivatingPlayer(); if (cardZone == null || !cardZone.is(this.getZone())) { // If Card is not in the default activating zone, do some additional checks @@ -370,7 +369,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { } final int left = list.size(); - if (!AllZoneUtil.compare(left, this.getPresentCompare(), right)) { + if (!Expressions.compare(left, this.getPresentCompare(), right)) { return false; } } @@ -392,7 +391,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { right = Integer.parseInt(this.getLifeAmount().substring(2)); } - if (!AllZoneUtil.compare(life, this.getLifeAmount(), right)) { + if (!Expressions.compare(life, this.getLifeAmount(), right)) { return false; } } @@ -413,7 +412,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables { final int svarValue = AbilityFactory.calculateAmount(c, this.getsVarToCheck(), sa); final int operandValue = AbilityFactory.calculateAmount(c, this.getsVarOperand(), sa); - if (!AllZoneUtil.compare(svarValue, this.getsVarOperator(), operandValue)) { + if (!Expressions.compare(svarValue, this.getsVarOperator(), operandValue)) { return false; } diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 719f039564a..6b5aaa3f423 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -123,7 +123,7 @@ public class SpellPermanent extends Spell { final HashMap runParams = new HashMap(); runParams.put("Card", source); runParams.put("Championed", source.getChampionedCard()); - AllZone.getTriggerHandler().runTrigger(TriggerType.Championed, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Championed, runParams); } else { Singletons.getModel().getGameAction().sacrifice(this.getSourceCard(), null); } @@ -142,7 +142,7 @@ public class SpellPermanent extends Spell { sb.append(SpellPermanent.this.getSourceCard()).append( " - When CARDNAME enters the battlefield, sacrifice it unless you exile a creature you control."); SpellPermanent.this.championAbilityComes.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(SpellPermanent.this.championAbilityComes); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(SpellPermanent.this.championAbilityComes); } // execute() }; // championCommandComes @@ -169,7 +169,7 @@ public class SpellPermanent extends Spell { " - When CARDNAME leaves the battlefield, exiled card returns to the battlefield."); ability.setStackDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } // execute() }; // championCommandLeavesPlay diff --git a/src/main/java/forge/card/spellability/TargetSelection.java b/src/main/java/forge/card/spellability/TargetSelection.java index 85d8f5fcd42..cd5da768025 100644 --- a/src/main/java/forge/card/spellability/TargetSelection.java +++ b/src/main/java/forge/card/spellability/TargetSelection.java @@ -25,6 +25,7 @@ import com.google.common.base.Predicate; import forge.AllZone; import forge.Card; +import forge.Singletons; import forge.CardLists; import forge.card.abilityfactory.AbilityFactory; @@ -594,8 +595,8 @@ public class TargetSelection { public static ArrayList getTargetableOnStack(final SpellAbility sa, final Target tgt) { final ArrayList choosables = new ArrayList(); - for (int i = 0; i < AllZone.getStack().size(); i++) { - choosables.add(AllZone.getStack().peekAbility(i)); + for (int i = 0; i < Singletons.getModel().getGameState().getStack().size(); i++) { + choosables.add(Singletons.getModel().getGameState().getStack().peekAbility(i)); } for (int i = 0; i < choosables.size(); i++) { diff --git a/src/main/java/forge/card/staticability/StaticAbility.java b/src/main/java/forge/card/staticability/StaticAbility.java index 0e051ffd523..3ef7888a998 100644 --- a/src/main/java/forge/card/staticability/StaticAbility.java +++ b/src/main/java/forge/card/staticability/StaticAbility.java @@ -21,8 +21,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZone; -import forge.AllZoneUtil; import forge.Card; import forge.GameEntity; import forge.Singletons; @@ -30,9 +28,11 @@ import forge.card.abilityfactory.AbilityFactory; import forge.card.cost.Cost; import forge.card.mana.ManaCost; import forge.card.spellability.SpellAbility; +import forge.game.GameState; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * The Class StaticAbility. @@ -457,7 +457,7 @@ public class StaticAbility { if (this.mapParams.containsKey("EffectZone")) { if (!this.mapParams.get("EffectZone").equals("All") && !ZoneType.listValueOf(this.mapParams.get("EffectZone")) - .contains(AllZone.getZoneOf(this.hostCard).getZoneType())) { + .contains(GameState.getZoneOf(this.hostCard).getZoneType())) { return false; } } else { @@ -532,7 +532,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } @@ -546,7 +546,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } @@ -560,7 +560,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } @@ -574,7 +574,7 @@ public class StaticAbility { final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(this.hostCard, svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java b/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java index 9d201b36b33..44727c5404f 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java +++ b/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java @@ -20,10 +20,10 @@ package forge.card.staticability; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.card.spellability.AbilityMana; import forge.card.spellability.SpellAbility; +import forge.game.GameState; import forge.game.phase.PhaseHandler; import forge.game.player.Player; import forge.game.zone.ZoneType; @@ -64,7 +64,7 @@ public class StaticAbilityCantBeCast { if (params.containsKey("Origin")) { List src = ZoneType.listValueOf(params.get("Origin")); - if (!src.contains(AllZone.getZoneOf(card).getZoneType())) { + if (!src.contains(GameState.getZoneOf(card).getZoneType())) { return false; } } diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java index 9287b16c250..2fda583c62b 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java +++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java @@ -22,7 +22,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -66,7 +65,7 @@ public class StaticAbilityContinuous { se.setParams(params); se.setTimestamp(hostCard.getTimestamp()); se.setSource(hostCard); - AllZone.getStaticEffects().addStaticEffect(se); + Singletons.getModel().getGameState().getStaticEffects().addStaticEffect(se); int powerBonus = 0; int toughnessBonus = 0; diff --git a/src/main/java/forge/card/trigger/Trigger.java b/src/main/java/forge/card/trigger/Trigger.java index d59f14b4d14..69c29b6194e 100644 --- a/src/main/java/forge/card/trigger/Trigger.java +++ b/src/main/java/forge/card/trigger/Trigger.java @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZoneUtil; import forge.Card; import forge.CardLists; @@ -36,6 +35,7 @@ import forge.card.spellability.SpellAbility; import forge.game.GameState; import forge.game.phase.PhaseType; import forge.game.zone.ZoneType; +import forge.util.Expressions; /** * @@ -326,7 +326,7 @@ public abstract class Trigger extends TriggerReplacementBase { right = CardFactoryUtil.xCount(this.getHostCard(), this.getHostCard().getSVar(rightString)); } - if (!AllZoneUtil.compare(life, lifeCompare, right)) { + if (!Expressions.compare(life, lifeCompare, right)) { return false; } @@ -365,7 +365,7 @@ public abstract class Trigger extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -404,7 +404,7 @@ public abstract class Trigger extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -421,7 +421,7 @@ public abstract class Trigger extends TriggerReplacementBase { final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(GameState.getCardState(this.getHostCard()), svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/trigger/TriggerDamageDone.java b/src/main/java/forge/card/trigger/TriggerDamageDone.java index 806cbc8b74c..39722d31893 100644 --- a/src/main/java/forge/card/trigger/TriggerDamageDone.java +++ b/src/main/java/forge/card/trigger/TriggerDamageDone.java @@ -19,9 +19,9 @@ package forge.card.trigger; import java.util.HashMap; -import forge.AllZoneUtil; import forge.Card; import forge.card.spellability.SpellAbility; +import forge.util.Expressions; /** * @@ -87,7 +87,7 @@ public class TriggerDamageDone extends Trigger { final int operand = Integer.parseInt(fullParam.substring(2)); final int actualAmount = (Integer) runParams2.get("DamageAmount"); - if (!AllZoneUtil.compare(actualAmount, operator, operand)) { + if (!Expressions.compare(actualAmount, operator, operand)) { return false; } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index d89438bd532..b5702cfdc6c 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -319,7 +318,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); if (playerAP.equals(card.getController()) && !allCards.contains(card) - && (AllZone.getZoneOf(card) == null || AllZone.getZoneOf(card).getZoneType().isHidden())) { + && (GameState.getZoneOf(card) == null || GameState.getZoneOf(card).getZoneType().isHidden())) { allCards.add(card); } } @@ -345,7 +344,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); if (!playerAP.equals(card.getController()) && !allCards.contains(card) - && (AllZone.getZoneOf(card) == null || AllZone.getZoneOf(card).getZoneType().isHidden())) { + && (GameState.getZoneOf(card) == null || GameState.getZoneOf(card).getZoneType().isHidden())) { allCards.add(card); } } @@ -399,7 +398,7 @@ public class TriggerHandler { return false; // Morphed cards only have pumped triggers go off. } if (regtrig instanceof TriggerAlways) { - if (AllZone.getStack().hasStateTrigger(regtrig.getId())) { + if (Singletons.getModel().getGameState().getStack().hasStateTrigger(regtrig.getId())) { return false; // State triggers that are already on the stack // don't trigger again. } @@ -411,7 +410,7 @@ public class TriggerHandler { if (regtrig.isSuppressed()) { return false; // Trigger removed by effect } - if (!regtrig.zonesCheck(AllZone.getZoneOf(regtrig.getHostCard()))) { + if (!regtrig.zonesCheck(GameState.getZoneOf(regtrig.getHostCard()))) { return false; // Host card isn't where it needs to be. } @@ -1021,7 +1020,7 @@ public class TriggerHandler { } //Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false); } else { - AllZone.getStack().addSimultaneousStackEntry(wrapperAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(wrapperAbility); } regtrig.setTriggeredSA(wrapperAbility); return true; diff --git a/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java b/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java index 5c574ad76cb..1589fee19ef 100644 --- a/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java +++ b/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java @@ -19,7 +19,7 @@ package forge.card.trigger; import java.util.HashMap; -import forge.AllZone; +import forge.Singletons; import forge.Card; import forge.card.cost.Cost; @@ -59,7 +59,7 @@ public class TriggerSpellAbilityCast extends Trigger { public final boolean performTest(final java.util.Map runParams2) { final SpellAbility spellAbility = (SpellAbility) runParams2.get("CastSA"); final Card cast = spellAbility.getSourceCard(); - final SpellAbilityStackInstance si = AllZone.getStack().getInstanceFromSpellAbility(spellAbility); + final SpellAbilityStackInstance si = Singletons.getModel().getGameState().getStack().getInstanceFromSpellAbility(spellAbility); if (this.getMode() == TriggerType.SpellCast) { if (!spellAbility.isSpell()) { diff --git a/src/main/java/forge/control/input/InputAttack.java b/src/main/java/forge/control/input/InputAttack.java index ac89474e9b1..225551d79b8 100644 --- a/src/main/java/forge/control/input/InputAttack.java +++ b/src/main/java/forge/control/input/InputAttack.java @@ -54,7 +54,7 @@ public class InputAttack extends Input { ButtonUtil.enableOnlyOK(); - final Object o = AllZone.getCombat().nextDefender(); + final Object o = Singletons.getModel().getGameState().getCombat().nextDefender(); if (o == null) { return; } @@ -65,13 +65,13 @@ public class InputAttack extends Input { CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString()); - if (AllZone.getCombat().getRemainingDefenders() == 0) { + if (Singletons.getModel().getGameState().getCombat().getRemainingDefenders() == 0) { // Nothing left to attack, has to attack this defender List possibleAttackers = Singletons.getControl().getPlayer().getCardsIn(ZoneType.Battlefield); for (Card c : Iterables.filter(possibleAttackers, CardPredicates.Presets.CREATURES)) { - if (c.hasKeyword("CARDNAME attacks each turn if able.") && CombatUtil.canAttack(c, AllZone.getCombat()) + if (c.hasKeyword("CARDNAME attacks each turn if able.") && CombatUtil.canAttack(c, Singletons.getModel().getGameState().getCombat()) && !c.isAttacking()) { - AllZone.getCombat().addAttacker(c); + Singletons.getModel().getGameState().getCombat().addAttacker(c); } } } @@ -80,11 +80,11 @@ public class InputAttack extends Input { /** {@inheritDoc} */ @Override public final void selectButtonOK() { - if (!AllZone.getCombat().getAttackers().isEmpty()) { + if (!Singletons.getModel().getGameState().getCombat().getAttackers().isEmpty()) { Singletons.getModel().getGameState().getPhaseHandler().setCombat(true); } - if (AllZone.getCombat().getRemainingDefenders() != 0) { + if (Singletons.getModel().getGameState().getCombat().getRemainingDefenders() != 0) { Singletons.getModel().getGameState().getPhaseHandler().repeatPhase(); } @@ -101,14 +101,14 @@ public class InputAttack extends Input { final Player human = Singletons.getControl().getPlayer(); if (zone.is(ZoneType.Battlefield, human) - && CombatUtil.canAttack(card, AllZone.getCombat())) { + && CombatUtil.canAttack(card, Singletons.getModel().getGameState().getCombat())) { // TODO add the propaganda code here and remove it in // Phase.nextPhase() // if (!CombatUtil.checkPropagandaEffects(card)) // return; - AllZone.getCombat().addAttacker(card); + Singletons.getModel().getGameState().getCombat().addAttacker(card); // just to make sure the attack symbol is marked human.getZone(ZoneType.Battlefield).updateObservers(); diff --git a/src/main/java/forge/control/input/InputBlock.java b/src/main/java/forge/control/input/InputBlock.java index 14941f366e4..7ec326027ad 100644 --- a/src/main/java/forge/control/input/InputBlock.java +++ b/src/main/java/forge/control/input/InputBlock.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -87,11 +86,11 @@ public class InputBlock extends Input { /** {@inheritDoc} */ @Override public final void selectButtonOK() { - if (CombatUtil.finishedMandatoryBlocks(AllZone.getCombat())) { + if (CombatUtil.finishedMandatoryBlocks(Singletons.getModel().getGameState().getCombat())) { // Done blocking ButtonUtil.reset(); - CombatUtil.orderMultipleCombatants(AllZone.getCombat()); + CombatUtil.orderMultipleCombatants(Singletons.getModel().getGameState().getCombat()); Singletons.getModel().getGameState().getPhaseHandler().setNeedToNextPhase(true); } @@ -103,7 +102,7 @@ public class InputBlock extends Input { // is attacking? boolean reminder = true; - if (AllZone.getCombat().getAttackers().contains(card)) { + if (Singletons.getModel().getGameState().getCombat().getAttackers().contains(card)) { this.currentAttacker = card; reminder = false; } else { @@ -117,9 +116,9 @@ public class InputBlock extends Input { List attackersBlocked = this.allBlocking.get(card); if (!attackersBlocked.contains(this.currentAttacker) && - CombatUtil.canBlock(this.currentAttacker, card, AllZone.getCombat())) { + CombatUtil.canBlock(this.currentAttacker, card, Singletons.getModel().getGameState().getCombat())) { attackersBlocked.add(this.currentAttacker); - AllZone.getCombat().addBlocker(this.currentAttacker, card); + Singletons.getModel().getGameState().getCombat().addBlocker(this.currentAttacker, card); reminder = false; } } diff --git a/src/main/java/forge/control/input/InputCleanup.java b/src/main/java/forge/control/input/InputCleanup.java index 9bae3b3e07b..6b3ed83ddab 100644 --- a/src/main/java/forge/control/input/InputCleanup.java +++ b/src/main/java/forge/control/input/InputCleanup.java @@ -17,7 +17,6 @@ */ package forge.control.input; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.game.phase.CombatUtil; @@ -74,7 +73,7 @@ public class InputCleanup extends Input { public final void selectCard(final Card card, final PlayerZone zone) { if (zone.is(ZoneType.Hand, Singletons.getControl().getPlayer())) { card.getController().discard(card, null); - if (AllZone.getStack().size() == 0) { + if (Singletons.getModel().getGameState().getStack().size() == 0) { this.showMessage(); } } diff --git a/src/main/java/forge/control/input/InputControl.java b/src/main/java/forge/control/input/InputControl.java index b2c3130ccfb..85234da528b 100644 --- a/src/main/java/forge/control/input/InputControl.java +++ b/src/main/java/forge/control/input/InputControl.java @@ -20,7 +20,6 @@ package forge.control.input; import java.util.LinkedList; import java.util.Stack; -import forge.AllZone; import forge.Singletons; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; @@ -216,7 +215,7 @@ public class InputControl extends MyObservable implements java.io.Serializable { this.model.getGameState().getStack().freezeStack(); if (playerTurn.isHuman() && !handler.getAutoPass()) { - AllZone.getCombat().initiatePossibleDefenders(playerTurn.getOpponent()); + Singletons.getModel().getGameState().getCombat().initiatePossibleDefenders(playerTurn.getOpponent()); return new InputAttack(); } } else if (phase == PhaseType.COMBAT_DECLARE_BLOCKERS) { diff --git a/src/main/java/forge/control/input/InputPassPriority.java b/src/main/java/forge/control/input/InputPassPriority.java index a024aad2937..5456a4830f8 100644 --- a/src/main/java/forge/control/input/InputPassPriority.java +++ b/src/main/java/forge/control/input/InputPassPriority.java @@ -59,8 +59,8 @@ public class InputPassPriority extends Input implements java.io.Serializable { sb.append("Turn : ").append(Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn()).append("\n"); sb.append("Phase: ").append(phase.Name).append("\n"); sb.append("Stack: "); - if (AllZone.getStack().size() != 0) { - sb.append(AllZone.getStack().size()).append(" to Resolve."); + if (Singletons.getModel().getGameState().getStack().size() != 0) { + sb.append(Singletons.getModel().getGameState().getStack().size()).append(" to Resolve."); } else { sb.append("Empty"); } diff --git a/src/main/java/forge/control/input/InputPayManaCost.java b/src/main/java/forge/control/input/InputPayManaCost.java index 6970a12cc10..ed61f55ac00 100644 --- a/src/main/java/forge/control/input/InputPayManaCost.java +++ b/src/main/java/forge/control/input/InputPayManaCost.java @@ -81,7 +81,7 @@ public class InputPayManaCost extends InputMana { this.stopSetNext(this.spell.getAfterPayMana()); } else { this.manaCost = new ManaCost("0"); - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } } else { this.manaCost = Singletons.getModel().getGameAction().getSpellCostChange(sa, new ManaCost(this.originalManaCost)); @@ -126,7 +126,7 @@ public class InputPayManaCost extends InputMana { this.stopSetNext(this.spell.getAfterPayMana()); } else { this.manaCost = new ManaCost("0"); - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } } else { this.manaCost = manaCostToPay; @@ -226,7 +226,7 @@ public class InputPayManaCost extends InputMana { if (this.skipStack) { this.spell.resolve(); } else { - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } AllZone.getInputControl().resetInput(); } @@ -240,12 +240,12 @@ public class InputPayManaCost extends InputMana { // tapped for convoke) if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } } @@ -256,11 +256,11 @@ public class InputPayManaCost extends InputMana { public final void selectButtonCancel() { // If this is a spell with convoke, untap all creatures used for it. if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } diff --git a/src/main/java/forge/control/input/InputPayManaCostUtil.java b/src/main/java/forge/control/input/InputPayManaCostUtil.java index 676a429d04c..88e6b7b51c8 100644 --- a/src/main/java/forge/control/input/InputPayManaCostUtil.java +++ b/src/main/java/forge/control/input/InputPayManaCostUtil.java @@ -546,12 +546,12 @@ public class InputPayManaCostUtil { // being tapped for convoke) if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } @@ -562,11 +562,11 @@ public class InputPayManaCostUtil { // If we're paying for a spell with convoke, untap all creatures // used for it. if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 12bccdd6da1..1dcbbee4de7 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -103,8 +103,8 @@ public class GameNew { Card.resetUniqueNumber(); // need this code here, otherwise observables fail forge.card.trigger.Trigger.resetIDs(); - AllZone.getTriggerHandler().clearTriggerSettings(); - AllZone.getTriggerHandler().clearDelayedTrigger(); + Singletons.getModel().getGameState().getTriggerHandler().clearTriggerSettings(); + Singletons.getModel().getGameState().getTriggerHandler().clearDelayedTrigger(); // friendliness final Map> removedAnteCards = new HashMap>(); diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java index 8dc01f2ac07..5337945c4e6 100644 --- a/src/main/java/forge/game/GameState.java +++ b/src/main/java/forge/game/GameState.java @@ -24,7 +24,6 @@ import java.util.List; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import forge.AllZone; import forge.Card; import forge.CardLists; import forge.CardPredicates; @@ -293,6 +292,85 @@ public class GameState { // THESE WERE MOVED HERE FROM AllZoneUtil // They must once become non-static members of this class + /** + * + * getZone. + * + * + * @param c + * a {@link forge.Card} object. + * @return a {@link forge.game.zone.PlayerZone} object. + */ + public static PlayerZone getZoneOf(final Card c) { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return null; + } + + if (gameState.getStackZone().contains(c)) { + return gameState.getStackZone(); + } + + for (final Player p : gameState.getPlayers()) { + for (final ZoneType z : Player.ALL_ZONES) { + final PlayerZone pz = p.getZone(z); + if (pz.contains(c)) { + return pz; + } + } + } + + return null; + } + + /** + * + * isCardInZone. + * + * @param c + * Card + * @param zone + * Constant.Zone + * @return boolean + */ + public static boolean isCardInZone(final Card c, final ZoneType zone) { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return false; + } + + if (zone.equals(ZoneType.Stack)) { + if (gameState.getStackZone().contains(c)) { + return true; + } + } else { + for (final Player p : gameState.getPlayers()) { + if (p.getZone(zone).contains(c)) { + return true; + } + } + } + + return false; + } + + /** + * + * resetZoneMoveTracking. + * + */ + public static void resetZoneMoveTracking() { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return; + } + for (final Player p : gameState.getPlayers()) { + for (final ZoneType z : Player.ALL_ZONES) { + p.getZone(z).resetCardsAddedThisTurn(); + } + } + } + /** * gets a list of all cards owned by both players that have are currently in * the given zone. @@ -303,7 +381,7 @@ public class GameState { */ public static List getCardsIn(final ZoneType zone) { if (zone == ZoneType.Stack) { - return AllZone.getStackZone().getCards(); + return Singletons.getModel().getGameState().getStackZone().getCards(); } else { List cards = null; for (final Player p : Singletons.getModel().getGameState().getPlayers()) { @@ -547,7 +625,7 @@ public class GameState { all.addAll(player.getZone(ZoneType.Battlefield).getCards(false)); all.addAll(player.getZone(ZoneType.Exile).getCards()); } - all.addAll(AllZone.getStackZone().getCards()); + all.addAll(Singletons.getModel().getGameState().getStackZone().getCards()); return all; } diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java index 1e37f5c7032..42f662b8bbf 100644 --- a/src/main/java/forge/game/MatchController.java +++ b/src/main/java/forge/game/MatchController.java @@ -134,7 +134,7 @@ public class MatchController { CMessage.SINGLETON_INSTANCE.updateGameInfo(this); // Update observers - AllZone.getStack().updateObservers(); + Singletons.getModel().getGameState().getStack().updateObservers(); AllZone.getInputControl().updateObservers(); AllZone.getGameLog().updateObservers(); diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java index 2e82db24a93..56757a42575 100644 --- a/src/main/java/forge/game/phase/Combat.java +++ b/src/main/java/forge/game/phase/Combat.java @@ -26,7 +26,6 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -650,7 +649,7 @@ public class Combat { // Run Unblocked Trigger final HashMap runParams = new HashMap(); runParams.put("Attacker", attacker); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } } @@ -837,18 +836,17 @@ public class Combat { */ public static void dealAssignedDamage() { // This function handles both Regular and First Strike combat assignment - final Player player = AllZone.getCombat().getDefendingPlayer(); + final Player player = Singletons.getModel().getGameState().getCombat().getDefendingPlayer(); final boolean bFirstStrike = Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_FIRST_STRIKE_DAMAGE); - final HashMap defMap = AllZone.getCombat().getDefendingDamageMap(); + final HashMap defMap = Singletons.getModel().getGameState().getCombat().getDefendingDamageMap(); for (final Entry entry : defMap.entrySet()) { player.addCombatDamage(entry.getValue(), entry.getKey()); } - final List unblocked = new ArrayList(bFirstStrike ? AllZone.getCombat().getUnblockedAttackers() : AllZone - .getCombat().getUnblockedFirstStrikeAttackers()); + final List unblocked = new ArrayList(bFirstStrike ? Singletons.getModel().getGameState().getCombat().getUnblockedAttackers() : Singletons.getModel().getGameState().getCombat().getUnblockedFirstStrikeAttackers()); for (int j = 0; j < unblocked.size(); j++) { if (bFirstStrike) { @@ -863,9 +861,9 @@ public class Combat { // this can be much better below here... final List combatants = new ArrayList(); - combatants.addAll(AllZone.getCombat().getAttackers()); - combatants.addAll(AllZone.getCombat().getAllBlockers()); - combatants.addAll(AllZone.getCombat().getDefendingPlaneswalkers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getAttackers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getAllBlockers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getDefendingPlaneswalkers()); Card c; for (int i = 0; i < combatants.size(); i++) { diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 140b75694c7..131402f7e24 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -28,7 +28,6 @@ import org.apache.commons.lang3.StringUtils; import com.esotericsoftware.minlog.Log; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -1429,10 +1428,10 @@ public class CombatUtil { * @return a boolean. */ public static boolean attackerWouldBeDestroyed(final Card attacker) { - final List blockers = AllZone.getCombat().getBlockers(attacker); + final List blockers = Singletons.getModel().getGameState().getCombat().getBlockers(attacker); for (final Card defender : blockers) { - if (CombatUtil.canDestroyAttacker(attacker, defender, AllZone.getCombat(), true) + if (CombatUtil.canDestroyAttacker(attacker, defender, Singletons.getModel().getGameState().getCombat(), true) && !(defender.hasKeyword("Wither") || defender.hasKeyword("Infect"))) { return true; } @@ -1463,10 +1462,10 @@ public class CombatUtil { boolean willTrigger = false; final Card source = trigger.getHostCard(); if (combat == null) { - combat = AllZone.getCombat(); + combat = Singletons.getModel().getGameState().getCombat(); } - if (!trigger.zonesCheck(AllZone.getZoneOf(trigger.getHostCard()))) { + if (!trigger.zonesCheck(GameState.getZoneOf(trigger.getHostCard()))) { return false; } if (!trigger.requirementsCheck()) { @@ -2330,10 +2329,10 @@ public class CombatUtil { public static boolean blockerWouldBeDestroyed(final Card blocker) { // TODO THis function only checks if a single attacker at a time would destroy a blocker // This needs to expand to tally up damage - final List attackers = AllZone.getCombat().getAttackersBlockedBy(blocker); + final List attackers = Singletons.getModel().getGameState().getCombat().getAttackersBlockedBy(blocker); for(Card attacker : attackers) { - if (CombatUtil.canDestroyBlocker(blocker, attacker, AllZone.getCombat(), true) + if (CombatUtil.canDestroyBlocker(blocker, attacker, Singletons.getModel().getGameState().getCombat(), true) && !(attacker.hasKeyword("Wither") || attacker.hasKeyword("Infect"))) { return true; } @@ -2495,7 +2494,7 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final Combat combat = AllZone.getCombat(); + final Combat combat = Singletons.getModel().getGameState().getCombat(); final List defenders = combat.getDefenders(); final List> attackers = combat.sortAttackerByDefender(); @@ -2529,7 +2528,7 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final Combat combat = AllZone.getCombat(); + final Combat combat = Singletons.getModel().getGameState().getCombat(); final List defenders = combat.getDefenders(); final List> attackers = combat.sortAttackerByDefender(); @@ -2540,7 +2539,7 @@ public class CombatUtil { for (final Card attacker : list) { sb.append(combat.getDefendingPlayer()).append(" assigned "); - defend = AllZone.getCombat().getBlockers(attacker); + defend = Singletons.getModel().getGameState().getCombat().getBlockers(attacker); if (!defend.isEmpty()) { // loop through blockers @@ -2574,8 +2573,8 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final List defenders = AllZone.getCombat().getDefenders(); - final List> attackers = AllZone.getCombat().sortAttackerByDefender(); + final List defenders = Singletons.getModel().getGameState().getCombat().getDefenders(); + final List> attackers = Singletons.getModel().getGameState().getCombat().sortAttackerByDefender(); // Not a big fan of the triple nested loop here for (int def = 0; def < defenders.size(); def++) { @@ -2597,7 +2596,7 @@ public class CombatUtil { display.append("-> "); display.append(CombatUtil.combatantToString(c)).append("\n"); - List blockers = AllZone.getCombat().getBlockers(c); + List blockers = Singletons.getModel().getGameState().getCombat().getBlockers(c); // loop through blockers for (final Card element : blockers) { @@ -2648,7 +2647,7 @@ public class CombatUtil { for (Card card : GameState.getCardsIn(ZoneType.Battlefield)) { final ArrayList staticAbilities = card.getStaticAbilities(); for (final StaticAbility stAb : staticAbilities) { - Cost additionalCost = stAb.getCostAbility("CantAttackUnless", c, AllZone.getCombat().getDefenderByAttacker(c)); + Cost additionalCost = stAb.getCostAbility("CantAttackUnless", c, Singletons.getModel().getGameState().getCombat().getDefenderByAttacker(c)); attackCost = CostUtil.combineCosts(attackCost, additionalCost); } } @@ -2681,7 +2680,7 @@ public class CombatUtil { @Override public void execute() { - AllZone.getCombat().removeFromCombat(crd); + Singletons.getModel().getGameState().getCombat().removeFromCombat(crd); if (bLast) { PhaseUtil.handleAttackingTriggers(); @@ -2716,7 +2715,7 @@ public class CombatUtil { } else { // TODO remove the below line after Propaganda occurs // during Declare_Attackers - AllZone.getCombat().removeFromCombat(crd); + Singletons.getModel().getGameState().getCombat().removeFromCombat(crd); } if (bLast) { PhaseUtil.handleAttackingTriggers(); @@ -2738,11 +2737,11 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Attacker", c); - final List otherAttackers = AllZone.getCombat().getAttackerList(); + final List otherAttackers = Singletons.getModel().getGameState().getCombat().getAttackerList(); otherAttackers.remove(c); runParams.put("OtherAttackers", otherAttackers); - runParams.put("Attacked", AllZone.getCombat().getDefenderByAttacker(c)); - AllZone.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); + runParams.put("Attacked", Singletons.getModel().getGameState().getCombat().getDefenderByAttacker(c)); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); // Annihilator: if (!c.getDamageHistory().getCreatureAttackedThisCombat()) { @@ -2776,7 +2775,7 @@ public class CombatUtil { ability.setDescription(sb.toString()); ability.setActivatingPlayer(c.getController()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } // find } // for } // creatureAttacked @@ -2785,7 +2784,7 @@ public class CombatUtil { // Mijae Djinn if (c.getName().equals("Mijae Djinn")) { if (!GameActionUtil.flipACoin(c.getController(), c)) { - AllZone.getCombat().removeFromCombat(c); + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); c.tap(); } } // Mijae Djinn @@ -2810,7 +2809,7 @@ public class CombatUtil { if (GameState.isCardInPlay(charger)) { charger.addIntrinsicKeyword("Trample"); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve }; // ability @@ -2819,7 +2818,7 @@ public class CombatUtil { sb2.append(c.getName()).append(" - gains trample until end of turn if its power is 10 or greater."); ability2.setStackDescription(sb2.toString()); - AllZone.getStack().add(ability2); + Singletons.getModel().getGameState().getStack().add(ability2); } // Witch-Maw Nephilim @@ -2860,7 +2859,7 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } /** @@ -2875,7 +2874,7 @@ public class CombatUtil { for (final Card c : cl) { if (!c.getDamageHistory().getCreatureBlockedThisCombat()) { for (final Ability ab : CardFactoryUtil.getBushidoEffects(c)) { - AllZone.getStack().add(ab); + Singletons.getModel().getGameState().getStack().add(ab); } } @@ -2901,16 +2900,16 @@ public class CombatUtil { final HashMap runParams = new HashMap(); runParams.put("Attacker", a); runParams.put("Blocker", b); - AllZone.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) { - final int blockers = AllZone.getCombat().getBlockers(a).size(); + final int blockers = Singletons.getModel().getGameState().getCombat().getBlockers(a).size(); runParams.put("NumBlockers", blockers); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); // Bushido for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) { - AllZone.getStack().add(ab); + Singletons.getModel().getGameState().getStack().add(ab); } // Rampage @@ -2922,7 +2921,7 @@ public class CombatUtil { if (m.find()) { final String[] k = keyword.split(" "); final int magnitude = Integer.valueOf(k[1]); - final int numBlockers = AllZone.getCombat().getBlockers(a).size(); + final int numBlockers = Singletons.getModel().getGameState().getCombat().getBlockers(a).size(); if (numBlockers > 1) { CombatUtil.executeRampageAbility(a, magnitude, numBlockers); } @@ -2964,7 +2963,7 @@ public class CombatUtil { blocker.addTempAttackBoost(-mag); blocker.addTempDefenseBoost(-mag); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); System.out.println("Flanking!"); } } // resolve @@ -2976,7 +2975,7 @@ public class CombatUtil { ability2.setStackDescription(sb2.toString()); ability2.setDescription(sb2.toString()); - AllZone.getStack().add(ability2); + Singletons.getModel().getGameState().getStack().add(ability2); Log.debug("Adding Flanking!"); } // flanking @@ -3020,7 +3019,7 @@ public class CombatUtil { crd.addTempAttackBoost(1); crd.addTempDefenseBoost(1); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve @@ -3032,7 +3031,7 @@ public class CombatUtil { ability.setDescription(sb.toString()); ability.setActivatingPlayer(c.getController()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } final Player phasingPlayer = c.getController(); @@ -3052,7 +3051,7 @@ public class CombatUtil { fhUntap.setDescription(sbUntap.toString()); fhUntap.setStackDescription(sbUntap.toString()); - AllZone.getStack().addSimultaneousStackEntry(fhUntap); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(fhUntap); // If any Finest Hours, queue up a new combat phase for (int ix = 0; ix < phasingPlayer.getCardsIn(ZoneType.Battlefield, "Finest Hour").size(); ix++) { @@ -3068,7 +3067,7 @@ public class CombatUtil { fhAddCombat.setDescription(sbACom.toString()); fhAddCombat.setStackDescription(sbACom.toString()); - AllZone.getStack().addSimultaneousStackEntry(fhAddCombat); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(fhAddCombat); } } @@ -3107,7 +3106,7 @@ public class CombatUtil { enchantment = CardFactoryUtil.getBestEnchantmentAI(enchantments, this, false); } if ((enchantment != null) && GameState.isCardInPlay(attacker)) { - GameAction.changeZone(AllZone.getZoneOf(enchantment), + GameAction.changeZone(GameState.getZoneOf(enchantment), enchantment.getOwner().getZone(ZoneType.Battlefield), enchantment, null); enchantment.enchantEntity(attacker); } @@ -3122,7 +3121,7 @@ public class CombatUtil { ability4.setDescription(sb4.toString()); ability4.setStackDescription(sb4.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability4); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability4); } // For } } @@ -3164,7 +3163,7 @@ public class CombatUtil { crd.addTempAttackBoost(pump); crd.addTempDefenseBoost(pump); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve @@ -3174,7 +3173,7 @@ public class CombatUtil { sb.append(c).append(" - (Rampage) gets +").append(pump).append("/+").append(pump).append(" until EOT."); ability.setStackDescription(sb.toString()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } } diff --git a/src/main/java/forge/game/phase/EndOfTurn.java b/src/main/java/forge/game/phase/EndOfTurn.java index ccc77b293d4..5821a03b83c 100644 --- a/src/main/java/forge/game/phase/EndOfTurn.java +++ b/src/main/java/forge/game/phase/EndOfTurn.java @@ -21,7 +21,6 @@ import java.util.List; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -65,7 +64,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { // reset mustAttackEntity for me Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().setMustAttackEntity(null); - AllZone.getStaticEffects().rePopulateStateBasedList(); + Singletons.getModel().getGameState().getStaticEffects().rePopulateStateBasedList(); for (final Card c : all) { if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, sacrifice CARDNAME.")) { @@ -83,7 +82,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { sac.setStackDescription(sb.toString()); sac.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sac); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sac); } if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, exile CARDNAME.")) { @@ -101,7 +100,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { exile.setStackDescription(sb.toString()); exile.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(exile); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(exile); } if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, destroy CARDNAME.")) { @@ -119,7 +118,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { destroy.setStackDescription(sb.toString()); destroy.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(destroy); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(destroy); } // Berserk is using this, so don't check isFaceDown() @@ -139,7 +138,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { sac.setStackDescription(sb.toString()); sac.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sac); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sac); } else { c.removeAllExtrinsicKeyword("At the beginning of the next end step, " @@ -167,7 +166,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } if (c.getName().equals("Erg Raiders") && !c.getDamageHistory().getCreatureAttackedThisTurn() && !c.hasSickness() @@ -186,7 +185,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } if (c.hasKeyword("At the beginning of your end step, return CARDNAME to its owner's hand.") @@ -205,7 +204,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } @@ -223,7 +222,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setDescription("At the beginning of this turn's end step, you lose the game."); change.setActivatingPlayer(activePlayer); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } this.execute(this.getAt()); @@ -257,7 +256,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 50721bed90f..923ac09d2ef 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -178,8 +178,8 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { * a {@link forge.game.player.Player} object. */ public final void setPriority(final Player p) { - if (AllZone.getStack() != null) { - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + if (Singletons.getModel().getGameState().getStack() != null) { + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } this.pFirstPriority = p; @@ -346,10 +346,10 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (!this.inCombat()) { this.setNeedToNextPhase(true); } else { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); // no first strikers, skip this step - if (!AllZone.getCombat().assignCombatDamage(true)) { + if (!Singletons.getModel().getGameState().getCombat().assignCombatDamage(true)) { this.setNeedToNextPhase(true); } else { Combat.dealAssignedDamage(); @@ -363,9 +363,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (!this.inCombat()) { this.setNeedToNextPhase(true); } else { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); - if (!AllZone.getCombat().assignCombatDamage(false)) { + if (!Singletons.getModel().getGameState().getCombat().assignCombatDamage(false)) { this.setNeedToNextPhase(true); } else { Combat.dealAssignedDamage(); @@ -377,8 +377,8 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { case COMBAT_END: // End Combat always happens - AllZone.getEndOfCombat().executeUntil(); - AllZone.getEndOfCombat().executeAt(); + Singletons.getModel().getGameState().getEndOfCombat().executeUntil(); + Singletons.getModel().getGameState().getEndOfCombat().executeAt(); CombatUtil.showCombat(); //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); break; @@ -389,7 +389,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { break; case END_OF_TURN: - AllZone.getEndOfTurn().executeAt(); + Singletons.getModel().getGameState().getEndOfTurn().executeAt(); break; case CLEANUP: @@ -411,7 +411,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { c.clearBlockedThisTurn(); } - AllZone.getEndOfTurn().executeUntil(); + Singletons.getModel().getGameState().getEndOfTurn().executeUntil(); for (Player player : Singletons.getModel().getGameState().getPlayers()) { for (Card c : player.getCardsIn(ZoneType.Hand)) @@ -437,12 +437,12 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { final HashMap runParams = new HashMap(); runParams.put("Phase", phase.Name); runParams.put("Player", turn); - AllZone.getTriggerHandler().runTrigger(TriggerType.Phase, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Phase, runParams); } // This line fixes Combat Damage triggers not going off when they should - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); // UNTAP if (phase != PhaseType.UNTAP) { @@ -469,7 +469,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { this.needToNextPhase = false; // If the Stack isn't empty why is nextPhase being called? - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { Log.debug("Phase.nextPhase() is called, but Stack isn't empty."); return; } @@ -484,7 +484,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } if (this.getPhase() == PhaseType.COMBAT_DECLARE_ATTACKERS) { - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); this.nCombatsThisTurn++; } else if (this.getPhase() == PhaseType.UNTAP) { this.nCombatsThisTurn = 0; @@ -492,7 +492,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (this.getPhase() == PhaseType.COMBAT_END) { //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); - AllZone.getCombat().reset(); + Singletons.getModel().getGameState().getCombat().reset(); this.resetAttackedThisCombat(this.getPlayerTurn()); this.bCombat = false; } @@ -505,7 +505,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } if (this.is(PhaseType.COMBAT_DECLARE_BLOCKERS)) { - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); } if (this.is(PhaseType.COMBAT_END) && (this.extraCombats > 0)) { @@ -518,9 +518,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { this.bCombat = true; this.extraCombats--; - AllZone.getCombat().reset(); - AllZone.getCombat().setAttackingPlayer(player); - AllZone.getCombat().setDefendingPlayer(opp); + Singletons.getModel().getGameState().getCombat().reset(); + Singletons.getModel().getGameState().getCombat().setAttackingPlayer(player); + Singletons.getModel().getGameState().getCombat().setDefendingPlayer(opp); this.phaseIndex = PhaseType.COMBAT_DECLARE_ATTACKERS.Index; } else { if (!this.bRepeat) { // for when Cleanup needs to repeat itself @@ -561,9 +561,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ private Player handleNextTurn() { - AllZone.getStack().setCardsCastLastTurn(); - AllZone.getStack().clearCardsCastThisTurn(); - AllZone.resetZoneMoveTracking(); + Singletons.getModel().getGameState().getStack().setCardsCastLastTurn(); + Singletons.getModel().getGameState().getStack().clearCardsCastThisTurn(); + GameState.resetZoneMoveTracking(); for( Player p : Singletons.getModel().getGameState().getPlayers() ) { p.resetProwl(); @@ -823,20 +823,20 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { // pass the priority to other player this.setPriorityPlayer(actingPlayer.getOpponent()); AllZone.getInputControl().resetInput(); - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } else { - if (AllZone.getStack().size() == 0) { + if (Singletons.getModel().getGameState().getStack().size() == 0) { // end phase this.needToNextPhase = true; this.pPlayerPriority = this.getPlayerTurn(); // this needs to be // set early // as we exit the phase } else { - if (!AllZone.getStack().hasSimultaneousStackEntries()) { - AllZone.getStack().resolveStack(); + if (!Singletons.getModel().getGameState().getStack().hasSimultaneousStackEntries()) { + Singletons.getModel().getGameState().getStack().resolveStack(); } } - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } } @@ -918,7 +918,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ public static boolean canCastSorcery(final Player player) { PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler(); - return now.isPlayerTurn(player) && now.getPhase().isMain() && AllZone.getStack().size() == 0; + return now.isPlayerTurn(player) && now.getPhase().isMain() && Singletons.getModel().getGameState().getStack().size() == 0; } /** @@ -937,7 +937,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler(); final Card source = sa.getRootSpellAbility().getSourceCard(); boolean onlyThis = true; - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { for (final Card card : GameState.getCardsIn(ZoneType.Stack)) { if (card != source) { onlyThis = false; diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index b8c2fc6fb5c..dccccf4aa6e 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -90,9 +90,9 @@ public class PhaseUtil { Singletons.getModel().getGameState().notifyNextTurn(); CMessage.SINGLETON_INSTANCE.updateGameInfo(Singletons.getModel().getMatch()); - AllZone.getCombat().reset(); - AllZone.getCombat().setAttackingPlayer(turn); - AllZone.getCombat().setDefendingPlayer(turn.getOpponent()); + Singletons.getModel().getGameState().getCombat().reset(); + Singletons.getModel().getGameState().getCombat().setAttackingPlayer(turn); + Singletons.getModel().getGameState().getCombat().setDefendingPlayer(turn.getOpponent()); // Tokens starting game in play now actually suffer from Sum. Sickness again final List list = turn.getCardsIncludePhasingIn(ZoneType.Battlefield); @@ -220,7 +220,7 @@ public class PhaseUtil { * */ public static void verifyCombat() { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); } /** @@ -290,16 +290,16 @@ public class PhaseUtil { PhaseUtil.verifyCombat(); // Handles removing cards like Mogg Flunkies from combat if group attack didn't occur - final List filterList = AllZone.getCombat().getAttackerList(); + final List filterList = Singletons.getModel().getGameState().getCombat().getAttackerList(); for (Card c : filterList) { if (c.hasKeyword("CARDNAME can't attack or block alone.") && c.isAttacking()) { - if (AllZone.getCombat().getAttackers().size() < 2) { - AllZone.getCombat().removeFromCombat(c); + if (Singletons.getModel().getGameState().getCombat().getAttackers().size() < 2) { + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); } } } - final List list = AllZone.getCombat().getAttackerList(); + final List list = Singletons.getModel().getGameState().getCombat().getAttackerList(); // TODO move propaganda to happen as the Attacker is Declared // Remove illegal Propaganda attacks first only for attacking the Player @@ -318,12 +318,12 @@ public class PhaseUtil { *
@@ -326,7 +326,7 @@ public abstract class Trigger extends TriggerReplacementBase { right = CardFactoryUtil.xCount(this.getHostCard(), this.getHostCard().getSVar(rightString)); } - if (!AllZoneUtil.compare(life, lifeCompare, right)) { + if (!Expressions.compare(life, lifeCompare, right)) { return false; } @@ -365,7 +365,7 @@ public abstract class Trigger extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -404,7 +404,7 @@ public abstract class Trigger extends TriggerReplacementBase { } final int left = list.size(); - if (!AllZoneUtil.compare(left, presentCompare, right)) { + if (!Expressions.compare(left, presentCompare, right)) { return false; } @@ -421,7 +421,7 @@ public abstract class Trigger extends TriggerReplacementBase { final String svarOperand = comparator.substring(2); final int operandValue = AbilityFactory.calculateAmount(GameState.getCardState(this.getHostCard()), svarOperand, null); - if (!AllZoneUtil.compare(sVar, svarOperator, operandValue)) { + if (!Expressions.compare(sVar, svarOperator, operandValue)) { return false; } } diff --git a/src/main/java/forge/card/trigger/TriggerDamageDone.java b/src/main/java/forge/card/trigger/TriggerDamageDone.java index 806cbc8b74c..39722d31893 100644 --- a/src/main/java/forge/card/trigger/TriggerDamageDone.java +++ b/src/main/java/forge/card/trigger/TriggerDamageDone.java @@ -19,9 +19,9 @@ package forge.card.trigger; import java.util.HashMap; -import forge.AllZoneUtil; import forge.Card; import forge.card.spellability.SpellAbility; +import forge.util.Expressions; /** *
@@ -87,7 +87,7 @@ public class TriggerDamageDone extends Trigger { final int operand = Integer.parseInt(fullParam.substring(2)); final int actualAmount = (Integer) runParams2.get("DamageAmount"); - if (!AllZoneUtil.compare(actualAmount, operator, operand)) { + if (!Expressions.compare(actualAmount, operator, operand)) { return false; } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index d89438bd532..b5702cfdc6c 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -23,7 +23,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -319,7 +318,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); if (playerAP.equals(card.getController()) && !allCards.contains(card) - && (AllZone.getZoneOf(card) == null || AllZone.getZoneOf(card).getZoneType().isHidden())) { + && (GameState.getZoneOf(card) == null || GameState.getZoneOf(card).getZoneType().isHidden())) { allCards.add(card); } } @@ -345,7 +344,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); if (!playerAP.equals(card.getController()) && !allCards.contains(card) - && (AllZone.getZoneOf(card) == null || AllZone.getZoneOf(card).getZoneType().isHidden())) { + && (GameState.getZoneOf(card) == null || GameState.getZoneOf(card).getZoneType().isHidden())) { allCards.add(card); } } @@ -399,7 +398,7 @@ public class TriggerHandler { return false; // Morphed cards only have pumped triggers go off. } if (regtrig instanceof TriggerAlways) { - if (AllZone.getStack().hasStateTrigger(regtrig.getId())) { + if (Singletons.getModel().getGameState().getStack().hasStateTrigger(regtrig.getId())) { return false; // State triggers that are already on the stack // don't trigger again. } @@ -411,7 +410,7 @@ public class TriggerHandler { if (regtrig.isSuppressed()) { return false; // Trigger removed by effect } - if (!regtrig.zonesCheck(AllZone.getZoneOf(regtrig.getHostCard()))) { + if (!regtrig.zonesCheck(GameState.getZoneOf(regtrig.getHostCard()))) { return false; // Host card isn't where it needs to be. } @@ -1021,7 +1020,7 @@ public class TriggerHandler { } //Singletons.getModel().getGameAction().playSpellAbilityNoStack(wrapperAbility, false); } else { - AllZone.getStack().addSimultaneousStackEntry(wrapperAbility); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(wrapperAbility); } regtrig.setTriggeredSA(wrapperAbility); return true; diff --git a/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java b/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java index 5c574ad76cb..1589fee19ef 100644 --- a/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java +++ b/src/main/java/forge/card/trigger/TriggerSpellAbilityCast.java @@ -19,7 +19,7 @@ package forge.card.trigger; import java.util.HashMap; -import forge.AllZone; +import forge.Singletons; import forge.Card; import forge.card.cost.Cost; @@ -59,7 +59,7 @@ public class TriggerSpellAbilityCast extends Trigger { public final boolean performTest(final java.util.Map runParams2) { final SpellAbility spellAbility = (SpellAbility) runParams2.get("CastSA"); final Card cast = spellAbility.getSourceCard(); - final SpellAbilityStackInstance si = AllZone.getStack().getInstanceFromSpellAbility(spellAbility); + final SpellAbilityStackInstance si = Singletons.getModel().getGameState().getStack().getInstanceFromSpellAbility(spellAbility); if (this.getMode() == TriggerType.SpellCast) { if (!spellAbility.isSpell()) { diff --git a/src/main/java/forge/control/input/InputAttack.java b/src/main/java/forge/control/input/InputAttack.java index ac89474e9b1..225551d79b8 100644 --- a/src/main/java/forge/control/input/InputAttack.java +++ b/src/main/java/forge/control/input/InputAttack.java @@ -54,7 +54,7 @@ public class InputAttack extends Input { ButtonUtil.enableOnlyOK(); - final Object o = AllZone.getCombat().nextDefender(); + final Object o = Singletons.getModel().getGameState().getCombat().nextDefender(); if (o == null) { return; } @@ -65,13 +65,13 @@ public class InputAttack extends Input { CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString()); - if (AllZone.getCombat().getRemainingDefenders() == 0) { + if (Singletons.getModel().getGameState().getCombat().getRemainingDefenders() == 0) { // Nothing left to attack, has to attack this defender List possibleAttackers = Singletons.getControl().getPlayer().getCardsIn(ZoneType.Battlefield); for (Card c : Iterables.filter(possibleAttackers, CardPredicates.Presets.CREATURES)) { - if (c.hasKeyword("CARDNAME attacks each turn if able.") && CombatUtil.canAttack(c, AllZone.getCombat()) + if (c.hasKeyword("CARDNAME attacks each turn if able.") && CombatUtil.canAttack(c, Singletons.getModel().getGameState().getCombat()) && !c.isAttacking()) { - AllZone.getCombat().addAttacker(c); + Singletons.getModel().getGameState().getCombat().addAttacker(c); } } } @@ -80,11 +80,11 @@ public class InputAttack extends Input { /** {@inheritDoc} */ @Override public final void selectButtonOK() { - if (!AllZone.getCombat().getAttackers().isEmpty()) { + if (!Singletons.getModel().getGameState().getCombat().getAttackers().isEmpty()) { Singletons.getModel().getGameState().getPhaseHandler().setCombat(true); } - if (AllZone.getCombat().getRemainingDefenders() != 0) { + if (Singletons.getModel().getGameState().getCombat().getRemainingDefenders() != 0) { Singletons.getModel().getGameState().getPhaseHandler().repeatPhase(); } @@ -101,14 +101,14 @@ public class InputAttack extends Input { final Player human = Singletons.getControl().getPlayer(); if (zone.is(ZoneType.Battlefield, human) - && CombatUtil.canAttack(card, AllZone.getCombat())) { + && CombatUtil.canAttack(card, Singletons.getModel().getGameState().getCombat())) { // TODO add the propaganda code here and remove it in // Phase.nextPhase() // if (!CombatUtil.checkPropagandaEffects(card)) // return; - AllZone.getCombat().addAttacker(card); + Singletons.getModel().getGameState().getCombat().addAttacker(card); // just to make sure the attack symbol is marked human.getZone(ZoneType.Battlefield).updateObservers(); diff --git a/src/main/java/forge/control/input/InputBlock.java b/src/main/java/forge/control/input/InputBlock.java index 14941f366e4..7ec326027ad 100644 --- a/src/main/java/forge/control/input/InputBlock.java +++ b/src/main/java/forge/control/input/InputBlock.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import forge.AllZone; import forge.Card; import forge.Singletons; @@ -87,11 +86,11 @@ public class InputBlock extends Input { /** {@inheritDoc} */ @Override public final void selectButtonOK() { - if (CombatUtil.finishedMandatoryBlocks(AllZone.getCombat())) { + if (CombatUtil.finishedMandatoryBlocks(Singletons.getModel().getGameState().getCombat())) { // Done blocking ButtonUtil.reset(); - CombatUtil.orderMultipleCombatants(AllZone.getCombat()); + CombatUtil.orderMultipleCombatants(Singletons.getModel().getGameState().getCombat()); Singletons.getModel().getGameState().getPhaseHandler().setNeedToNextPhase(true); } @@ -103,7 +102,7 @@ public class InputBlock extends Input { // is attacking? boolean reminder = true; - if (AllZone.getCombat().getAttackers().contains(card)) { + if (Singletons.getModel().getGameState().getCombat().getAttackers().contains(card)) { this.currentAttacker = card; reminder = false; } else { @@ -117,9 +116,9 @@ public class InputBlock extends Input { List attackersBlocked = this.allBlocking.get(card); if (!attackersBlocked.contains(this.currentAttacker) && - CombatUtil.canBlock(this.currentAttacker, card, AllZone.getCombat())) { + CombatUtil.canBlock(this.currentAttacker, card, Singletons.getModel().getGameState().getCombat())) { attackersBlocked.add(this.currentAttacker); - AllZone.getCombat().addBlocker(this.currentAttacker, card); + Singletons.getModel().getGameState().getCombat().addBlocker(this.currentAttacker, card); reminder = false; } } diff --git a/src/main/java/forge/control/input/InputCleanup.java b/src/main/java/forge/control/input/InputCleanup.java index 9bae3b3e07b..6b3ed83ddab 100644 --- a/src/main/java/forge/control/input/InputCleanup.java +++ b/src/main/java/forge/control/input/InputCleanup.java @@ -17,7 +17,6 @@ */ package forge.control.input; -import forge.AllZone; import forge.Card; import forge.Singletons; import forge.game.phase.CombatUtil; @@ -74,7 +73,7 @@ public class InputCleanup extends Input { public final void selectCard(final Card card, final PlayerZone zone) { if (zone.is(ZoneType.Hand, Singletons.getControl().getPlayer())) { card.getController().discard(card, null); - if (AllZone.getStack().size() == 0) { + if (Singletons.getModel().getGameState().getStack().size() == 0) { this.showMessage(); } } diff --git a/src/main/java/forge/control/input/InputControl.java b/src/main/java/forge/control/input/InputControl.java index b2c3130ccfb..85234da528b 100644 --- a/src/main/java/forge/control/input/InputControl.java +++ b/src/main/java/forge/control/input/InputControl.java @@ -20,7 +20,6 @@ package forge.control.input; import java.util.LinkedList; import java.util.Stack; -import forge.AllZone; import forge.Singletons; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; @@ -216,7 +215,7 @@ public class InputControl extends MyObservable implements java.io.Serializable { this.model.getGameState().getStack().freezeStack(); if (playerTurn.isHuman() && !handler.getAutoPass()) { - AllZone.getCombat().initiatePossibleDefenders(playerTurn.getOpponent()); + Singletons.getModel().getGameState().getCombat().initiatePossibleDefenders(playerTurn.getOpponent()); return new InputAttack(); } } else if (phase == PhaseType.COMBAT_DECLARE_BLOCKERS) { diff --git a/src/main/java/forge/control/input/InputPassPriority.java b/src/main/java/forge/control/input/InputPassPriority.java index a024aad2937..5456a4830f8 100644 --- a/src/main/java/forge/control/input/InputPassPriority.java +++ b/src/main/java/forge/control/input/InputPassPriority.java @@ -59,8 +59,8 @@ public class InputPassPriority extends Input implements java.io.Serializable { sb.append("Turn : ").append(Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn()).append("\n"); sb.append("Phase: ").append(phase.Name).append("\n"); sb.append("Stack: "); - if (AllZone.getStack().size() != 0) { - sb.append(AllZone.getStack().size()).append(" to Resolve."); + if (Singletons.getModel().getGameState().getStack().size() != 0) { + sb.append(Singletons.getModel().getGameState().getStack().size()).append(" to Resolve."); } else { sb.append("Empty"); } diff --git a/src/main/java/forge/control/input/InputPayManaCost.java b/src/main/java/forge/control/input/InputPayManaCost.java index 6970a12cc10..ed61f55ac00 100644 --- a/src/main/java/forge/control/input/InputPayManaCost.java +++ b/src/main/java/forge/control/input/InputPayManaCost.java @@ -81,7 +81,7 @@ public class InputPayManaCost extends InputMana { this.stopSetNext(this.spell.getAfterPayMana()); } else { this.manaCost = new ManaCost("0"); - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } } else { this.manaCost = Singletons.getModel().getGameAction().getSpellCostChange(sa, new ManaCost(this.originalManaCost)); @@ -126,7 +126,7 @@ public class InputPayManaCost extends InputMana { this.stopSetNext(this.spell.getAfterPayMana()); } else { this.manaCost = new ManaCost("0"); - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } } else { this.manaCost = manaCostToPay; @@ -226,7 +226,7 @@ public class InputPayManaCost extends InputMana { if (this.skipStack) { this.spell.resolve(); } else { - AllZone.getStack().add(this.spell); + Singletons.getModel().getGameState().getStack().add(this.spell); } AllZone.getInputControl().resetInput(); } @@ -240,12 +240,12 @@ public class InputPayManaCost extends InputMana { // tapped for convoke) if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } } @@ -256,11 +256,11 @@ public class InputPayManaCost extends InputMana { public final void selectButtonCancel() { // If this is a spell with convoke, untap all creatures used for it. if (this.spell.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : this.spell.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); this.spell.clearTappedForConvoke(); } diff --git a/src/main/java/forge/control/input/InputPayManaCostUtil.java b/src/main/java/forge/control/input/InputPayManaCostUtil.java index 676a429d04c..88e6b7b51c8 100644 --- a/src/main/java/forge/control/input/InputPayManaCostUtil.java +++ b/src/main/java/forge/control/input/InputPayManaCostUtil.java @@ -546,12 +546,12 @@ public class InputPayManaCostUtil { // being tapped for convoke) if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); c.tap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } @@ -562,11 +562,11 @@ public class InputPayManaCostUtil { // If we're paying for a spell with convoke, untap all creatures // used for it. if (sa.getTappedForConvoke() != null) { - AllZone.getTriggerHandler().suppressMode(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().suppressMode(TriggerType.Untaps); for (final Card c : sa.getTappedForConvoke()) { c.untap(); } - AllZone.getTriggerHandler().clearSuppression(TriggerType.Untaps); + Singletons.getModel().getGameState().getTriggerHandler().clearSuppression(TriggerType.Untaps); sa.clearTappedForConvoke(); } diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 12bccdd6da1..1dcbbee4de7 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -103,8 +103,8 @@ public class GameNew { Card.resetUniqueNumber(); // need this code here, otherwise observables fail forge.card.trigger.Trigger.resetIDs(); - AllZone.getTriggerHandler().clearTriggerSettings(); - AllZone.getTriggerHandler().clearDelayedTrigger(); + Singletons.getModel().getGameState().getTriggerHandler().clearTriggerSettings(); + Singletons.getModel().getGameState().getTriggerHandler().clearDelayedTrigger(); // friendliness final Map> removedAnteCards = new HashMap>(); diff --git a/src/main/java/forge/game/GameState.java b/src/main/java/forge/game/GameState.java index 8dc01f2ac07..5337945c4e6 100644 --- a/src/main/java/forge/game/GameState.java +++ b/src/main/java/forge/game/GameState.java @@ -24,7 +24,6 @@ import java.util.List; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import forge.AllZone; import forge.Card; import forge.CardLists; import forge.CardPredicates; @@ -293,6 +292,85 @@ public class GameState { // THESE WERE MOVED HERE FROM AllZoneUtil // They must once become non-static members of this class + /** + * + * getZone. + * + * + * @param c + * a {@link forge.Card} object. + * @return a {@link forge.game.zone.PlayerZone} object. + */ + public static PlayerZone getZoneOf(final Card c) { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return null; + } + + if (gameState.getStackZone().contains(c)) { + return gameState.getStackZone(); + } + + for (final Player p : gameState.getPlayers()) { + for (final ZoneType z : Player.ALL_ZONES) { + final PlayerZone pz = p.getZone(z); + if (pz.contains(c)) { + return pz; + } + } + } + + return null; + } + + /** + * + * isCardInZone. + * + * @param c + * Card + * @param zone + * Constant.Zone + * @return boolean + */ + public static boolean isCardInZone(final Card c, final ZoneType zone) { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return false; + } + + if (zone.equals(ZoneType.Stack)) { + if (gameState.getStackZone().contains(c)) { + return true; + } + } else { + for (final Player p : gameState.getPlayers()) { + if (p.getZone(zone).contains(c)) { + return true; + } + } + } + + return false; + } + + /** + * + * resetZoneMoveTracking. + * + */ + public static void resetZoneMoveTracking() { + final GameState gameState = Singletons.getModel().getGameState(); + if (gameState == null) { + return; + } + for (final Player p : gameState.getPlayers()) { + for (final ZoneType z : Player.ALL_ZONES) { + p.getZone(z).resetCardsAddedThisTurn(); + } + } + } + /** * gets a list of all cards owned by both players that have are currently in * the given zone. @@ -303,7 +381,7 @@ public class GameState { */ public static List getCardsIn(final ZoneType zone) { if (zone == ZoneType.Stack) { - return AllZone.getStackZone().getCards(); + return Singletons.getModel().getGameState().getStackZone().getCards(); } else { List cards = null; for (final Player p : Singletons.getModel().getGameState().getPlayers()) { @@ -547,7 +625,7 @@ public class GameState { all.addAll(player.getZone(ZoneType.Battlefield).getCards(false)); all.addAll(player.getZone(ZoneType.Exile).getCards()); } - all.addAll(AllZone.getStackZone().getCards()); + all.addAll(Singletons.getModel().getGameState().getStackZone().getCards()); return all; } diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java index 1e37f5c7032..42f662b8bbf 100644 --- a/src/main/java/forge/game/MatchController.java +++ b/src/main/java/forge/game/MatchController.java @@ -134,7 +134,7 @@ public class MatchController { CMessage.SINGLETON_INSTANCE.updateGameInfo(this); // Update observers - AllZone.getStack().updateObservers(); + Singletons.getModel().getGameState().getStack().updateObservers(); AllZone.getInputControl().updateObservers(); AllZone.getGameLog().updateObservers(); diff --git a/src/main/java/forge/game/phase/Combat.java b/src/main/java/forge/game/phase/Combat.java index 2e82db24a93..56757a42575 100644 --- a/src/main/java/forge/game/phase/Combat.java +++ b/src/main/java/forge/game/phase/Combat.java @@ -26,7 +26,6 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -650,7 +649,7 @@ public class Combat { // Run Unblocked Trigger final HashMap runParams = new HashMap(); runParams.put("Attacker", attacker); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } } @@ -837,18 +836,17 @@ public class Combat { */ public static void dealAssignedDamage() { // This function handles both Regular and First Strike combat assignment - final Player player = AllZone.getCombat().getDefendingPlayer(); + final Player player = Singletons.getModel().getGameState().getCombat().getDefendingPlayer(); final boolean bFirstStrike = Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_FIRST_STRIKE_DAMAGE); - final HashMap defMap = AllZone.getCombat().getDefendingDamageMap(); + final HashMap defMap = Singletons.getModel().getGameState().getCombat().getDefendingDamageMap(); for (final Entry entry : defMap.entrySet()) { player.addCombatDamage(entry.getValue(), entry.getKey()); } - final List unblocked = new ArrayList(bFirstStrike ? AllZone.getCombat().getUnblockedAttackers() : AllZone - .getCombat().getUnblockedFirstStrikeAttackers()); + final List unblocked = new ArrayList(bFirstStrike ? Singletons.getModel().getGameState().getCombat().getUnblockedAttackers() : Singletons.getModel().getGameState().getCombat().getUnblockedFirstStrikeAttackers()); for (int j = 0; j < unblocked.size(); j++) { if (bFirstStrike) { @@ -863,9 +861,9 @@ public class Combat { // this can be much better below here... final List combatants = new ArrayList(); - combatants.addAll(AllZone.getCombat().getAttackers()); - combatants.addAll(AllZone.getCombat().getAllBlockers()); - combatants.addAll(AllZone.getCombat().getDefendingPlaneswalkers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getAttackers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getAllBlockers()); + combatants.addAll(Singletons.getModel().getGameState().getCombat().getDefendingPlaneswalkers()); Card c; for (int i = 0; i < combatants.size(); i++) { diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index 140b75694c7..131402f7e24 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -28,7 +28,6 @@ import org.apache.commons.lang3.StringUtils; import com.esotericsoftware.minlog.Log; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -1429,10 +1428,10 @@ public class CombatUtil { * @return a boolean. */ public static boolean attackerWouldBeDestroyed(final Card attacker) { - final List blockers = AllZone.getCombat().getBlockers(attacker); + final List blockers = Singletons.getModel().getGameState().getCombat().getBlockers(attacker); for (final Card defender : blockers) { - if (CombatUtil.canDestroyAttacker(attacker, defender, AllZone.getCombat(), true) + if (CombatUtil.canDestroyAttacker(attacker, defender, Singletons.getModel().getGameState().getCombat(), true) && !(defender.hasKeyword("Wither") || defender.hasKeyword("Infect"))) { return true; } @@ -1463,10 +1462,10 @@ public class CombatUtil { boolean willTrigger = false; final Card source = trigger.getHostCard(); if (combat == null) { - combat = AllZone.getCombat(); + combat = Singletons.getModel().getGameState().getCombat(); } - if (!trigger.zonesCheck(AllZone.getZoneOf(trigger.getHostCard()))) { + if (!trigger.zonesCheck(GameState.getZoneOf(trigger.getHostCard()))) { return false; } if (!trigger.requirementsCheck()) { @@ -2330,10 +2329,10 @@ public class CombatUtil { public static boolean blockerWouldBeDestroyed(final Card blocker) { // TODO THis function only checks if a single attacker at a time would destroy a blocker // This needs to expand to tally up damage - final List attackers = AllZone.getCombat().getAttackersBlockedBy(blocker); + final List attackers = Singletons.getModel().getGameState().getCombat().getAttackersBlockedBy(blocker); for(Card attacker : attackers) { - if (CombatUtil.canDestroyBlocker(blocker, attacker, AllZone.getCombat(), true) + if (CombatUtil.canDestroyBlocker(blocker, attacker, Singletons.getModel().getGameState().getCombat(), true) && !(attacker.hasKeyword("Wither") || attacker.hasKeyword("Infect"))) { return true; } @@ -2495,7 +2494,7 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final Combat combat = AllZone.getCombat(); + final Combat combat = Singletons.getModel().getGameState().getCombat(); final List defenders = combat.getDefenders(); final List> attackers = combat.sortAttackerByDefender(); @@ -2529,7 +2528,7 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final Combat combat = AllZone.getCombat(); + final Combat combat = Singletons.getModel().getGameState().getCombat(); final List defenders = combat.getDefenders(); final List> attackers = combat.sortAttackerByDefender(); @@ -2540,7 +2539,7 @@ public class CombatUtil { for (final Card attacker : list) { sb.append(combat.getDefendingPlayer()).append(" assigned "); - defend = AllZone.getCombat().getBlockers(attacker); + defend = Singletons.getModel().getGameState().getCombat().getBlockers(attacker); if (!defend.isEmpty()) { // loop through blockers @@ -2574,8 +2573,8 @@ public class CombatUtil { // Loop through Defenders // Append Defending Player/Planeswalker - final List defenders = AllZone.getCombat().getDefenders(); - final List> attackers = AllZone.getCombat().sortAttackerByDefender(); + final List defenders = Singletons.getModel().getGameState().getCombat().getDefenders(); + final List> attackers = Singletons.getModel().getGameState().getCombat().sortAttackerByDefender(); // Not a big fan of the triple nested loop here for (int def = 0; def < defenders.size(); def++) { @@ -2597,7 +2596,7 @@ public class CombatUtil { display.append("-> "); display.append(CombatUtil.combatantToString(c)).append("\n"); - List blockers = AllZone.getCombat().getBlockers(c); + List blockers = Singletons.getModel().getGameState().getCombat().getBlockers(c); // loop through blockers for (final Card element : blockers) { @@ -2648,7 +2647,7 @@ public class CombatUtil { for (Card card : GameState.getCardsIn(ZoneType.Battlefield)) { final ArrayList staticAbilities = card.getStaticAbilities(); for (final StaticAbility stAb : staticAbilities) { - Cost additionalCost = stAb.getCostAbility("CantAttackUnless", c, AllZone.getCombat().getDefenderByAttacker(c)); + Cost additionalCost = stAb.getCostAbility("CantAttackUnless", c, Singletons.getModel().getGameState().getCombat().getDefenderByAttacker(c)); attackCost = CostUtil.combineCosts(attackCost, additionalCost); } } @@ -2681,7 +2680,7 @@ public class CombatUtil { @Override public void execute() { - AllZone.getCombat().removeFromCombat(crd); + Singletons.getModel().getGameState().getCombat().removeFromCombat(crd); if (bLast) { PhaseUtil.handleAttackingTriggers(); @@ -2716,7 +2715,7 @@ public class CombatUtil { } else { // TODO remove the below line after Propaganda occurs // during Declare_Attackers - AllZone.getCombat().removeFromCombat(crd); + Singletons.getModel().getGameState().getCombat().removeFromCombat(crd); } if (bLast) { PhaseUtil.handleAttackingTriggers(); @@ -2738,11 +2737,11 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Attacker", c); - final List otherAttackers = AllZone.getCombat().getAttackerList(); + final List otherAttackers = Singletons.getModel().getGameState().getCombat().getAttackerList(); otherAttackers.remove(c); runParams.put("OtherAttackers", otherAttackers); - runParams.put("Attacked", AllZone.getCombat().getDefenderByAttacker(c)); - AllZone.getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); + runParams.put("Attacked", Singletons.getModel().getGameState().getCombat().getDefenderByAttacker(c)); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Attacks, runParams); // Annihilator: if (!c.getDamageHistory().getCreatureAttackedThisCombat()) { @@ -2776,7 +2775,7 @@ public class CombatUtil { ability.setDescription(sb.toString()); ability.setActivatingPlayer(c.getController()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } // find } // for } // creatureAttacked @@ -2785,7 +2784,7 @@ public class CombatUtil { // Mijae Djinn if (c.getName().equals("Mijae Djinn")) { if (!GameActionUtil.flipACoin(c.getController(), c)) { - AllZone.getCombat().removeFromCombat(c); + Singletons.getModel().getGameState().getCombat().removeFromCombat(c); c.tap(); } } // Mijae Djinn @@ -2810,7 +2809,7 @@ public class CombatUtil { if (GameState.isCardInPlay(charger)) { charger.addIntrinsicKeyword("Trample"); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve }; // ability @@ -2819,7 +2818,7 @@ public class CombatUtil { sb2.append(c.getName()).append(" - gains trample until end of turn if its power is 10 or greater."); ability2.setStackDescription(sb2.toString()); - AllZone.getStack().add(ability2); + Singletons.getModel().getGameState().getStack().add(ability2); } // Witch-Maw Nephilim @@ -2860,7 +2859,7 @@ public class CombatUtil { // Run triggers final HashMap runParams = new HashMap(); runParams.put("Card", c); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerUnblocked, runParams); } /** @@ -2875,7 +2874,7 @@ public class CombatUtil { for (final Card c : cl) { if (!c.getDamageHistory().getCreatureBlockedThisCombat()) { for (final Ability ab : CardFactoryUtil.getBushidoEffects(c)) { - AllZone.getStack().add(ab); + Singletons.getModel().getGameState().getStack().add(ab); } } @@ -2901,16 +2900,16 @@ public class CombatUtil { final HashMap runParams = new HashMap(); runParams.put("Attacker", a); runParams.put("Blocker", b); - AllZone.getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Blocks, runParams); if (!a.getDamageHistory().getCreatureGotBlockedThisCombat()) { - final int blockers = AllZone.getCombat().getBlockers(a).size(); + final int blockers = Singletons.getModel().getGameState().getCombat().getBlockers(a).size(); runParams.put("NumBlockers", blockers); - AllZone.getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.AttackerBlocked, runParams); // Bushido for (final Ability ab : CardFactoryUtil.getBushidoEffects(a)) { - AllZone.getStack().add(ab); + Singletons.getModel().getGameState().getStack().add(ab); } // Rampage @@ -2922,7 +2921,7 @@ public class CombatUtil { if (m.find()) { final String[] k = keyword.split(" "); final int magnitude = Integer.valueOf(k[1]); - final int numBlockers = AllZone.getCombat().getBlockers(a).size(); + final int numBlockers = Singletons.getModel().getGameState().getCombat().getBlockers(a).size(); if (numBlockers > 1) { CombatUtil.executeRampageAbility(a, magnitude, numBlockers); } @@ -2964,7 +2963,7 @@ public class CombatUtil { blocker.addTempAttackBoost(-mag); blocker.addTempDefenseBoost(-mag); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); System.out.println("Flanking!"); } } // resolve @@ -2976,7 +2975,7 @@ public class CombatUtil { ability2.setStackDescription(sb2.toString()); ability2.setDescription(sb2.toString()); - AllZone.getStack().add(ability2); + Singletons.getModel().getGameState().getStack().add(ability2); Log.debug("Adding Flanking!"); } // flanking @@ -3020,7 +3019,7 @@ public class CombatUtil { crd.addTempAttackBoost(1); crd.addTempDefenseBoost(1); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve @@ -3032,7 +3031,7 @@ public class CombatUtil { ability.setDescription(sb.toString()); ability.setActivatingPlayer(c.getController()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } final Player phasingPlayer = c.getController(); @@ -3052,7 +3051,7 @@ public class CombatUtil { fhUntap.setDescription(sbUntap.toString()); fhUntap.setStackDescription(sbUntap.toString()); - AllZone.getStack().addSimultaneousStackEntry(fhUntap); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(fhUntap); // If any Finest Hours, queue up a new combat phase for (int ix = 0; ix < phasingPlayer.getCardsIn(ZoneType.Battlefield, "Finest Hour").size(); ix++) { @@ -3068,7 +3067,7 @@ public class CombatUtil { fhAddCombat.setDescription(sbACom.toString()); fhAddCombat.setStackDescription(sbACom.toString()); - AllZone.getStack().addSimultaneousStackEntry(fhAddCombat); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(fhAddCombat); } } @@ -3107,7 +3106,7 @@ public class CombatUtil { enchantment = CardFactoryUtil.getBestEnchantmentAI(enchantments, this, false); } if ((enchantment != null) && GameState.isCardInPlay(attacker)) { - GameAction.changeZone(AllZone.getZoneOf(enchantment), + GameAction.changeZone(GameState.getZoneOf(enchantment), enchantment.getOwner().getZone(ZoneType.Battlefield), enchantment, null); enchantment.enchantEntity(attacker); } @@ -3122,7 +3121,7 @@ public class CombatUtil { ability4.setDescription(sb4.toString()); ability4.setStackDescription(sb4.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability4); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability4); } // For } } @@ -3164,7 +3163,7 @@ public class CombatUtil { crd.addTempAttackBoost(pump); crd.addTempDefenseBoost(pump); - AllZone.getEndOfTurn().addUntil(untilEOT); + Singletons.getModel().getGameState().getEndOfTurn().addUntil(untilEOT); } } // resolve @@ -3174,7 +3173,7 @@ public class CombatUtil { sb.append(c).append(" - (Rampage) gets +").append(pump).append("/+").append(pump).append(" until EOT."); ability.setStackDescription(sb.toString()); - AllZone.getStack().add(ability); + Singletons.getModel().getGameState().getStack().add(ability); } } diff --git a/src/main/java/forge/game/phase/EndOfTurn.java b/src/main/java/forge/game/phase/EndOfTurn.java index ccc77b293d4..5821a03b83c 100644 --- a/src/main/java/forge/game/phase/EndOfTurn.java +++ b/src/main/java/forge/game/phase/EndOfTurn.java @@ -21,7 +21,6 @@ import java.util.List; import com.google.common.base.Predicate; -import forge.AllZone; import forge.Card; import forge.CardLists; @@ -65,7 +64,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { // reset mustAttackEntity for me Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn().setMustAttackEntity(null); - AllZone.getStaticEffects().rePopulateStateBasedList(); + Singletons.getModel().getGameState().getStaticEffects().rePopulateStateBasedList(); for (final Card c : all) { if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, sacrifice CARDNAME.")) { @@ -83,7 +82,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { sac.setStackDescription(sb.toString()); sac.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sac); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sac); } if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, exile CARDNAME.")) { @@ -101,7 +100,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { exile.setStackDescription(sb.toString()); exile.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(exile); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(exile); } if (!c.isFaceDown() && c.hasKeyword("At the beginning of the end step, destroy CARDNAME.")) { @@ -119,7 +118,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { destroy.setStackDescription(sb.toString()); destroy.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(destroy); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(destroy); } // Berserk is using this, so don't check isFaceDown() @@ -139,7 +138,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { sac.setStackDescription(sb.toString()); sac.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(sac); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(sac); } else { c.removeAllExtrinsicKeyword("At the beginning of the next end step, " @@ -167,7 +166,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } if (c.getName().equals("Erg Raiders") && !c.getDamageHistory().getCreatureAttackedThisTurn() && !c.hasSickness() @@ -186,7 +185,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } if (c.hasKeyword("At the beginning of your end step, return CARDNAME to its owner's hand.") @@ -205,7 +204,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setStackDescription(sb.toString()); change.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } @@ -223,7 +222,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { change.setDescription("At the beginning of this turn's end step, you lose the game."); change.setActivatingPlayer(activePlayer); - AllZone.getStack().addSimultaneousStackEntry(change); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(change); } this.execute(this.getAt()); @@ -257,7 +256,7 @@ public class EndOfTurn extends Phase implements java.io.Serializable { ability.setStackDescription(sb.toString()); ability.setDescription(sb.toString()); - AllZone.getStack().addSimultaneousStackEntry(ability); + Singletons.getModel().getGameState().getStack().addSimultaneousStackEntry(ability); } } diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 50721bed90f..923ac09d2ef 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -178,8 +178,8 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { * a {@link forge.game.player.Player} object. */ public final void setPriority(final Player p) { - if (AllZone.getStack() != null) { - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + if (Singletons.getModel().getGameState().getStack() != null) { + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } this.pFirstPriority = p; @@ -346,10 +346,10 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (!this.inCombat()) { this.setNeedToNextPhase(true); } else { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); // no first strikers, skip this step - if (!AllZone.getCombat().assignCombatDamage(true)) { + if (!Singletons.getModel().getGameState().getCombat().assignCombatDamage(true)) { this.setNeedToNextPhase(true); } else { Combat.dealAssignedDamage(); @@ -363,9 +363,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (!this.inCombat()) { this.setNeedToNextPhase(true); } else { - AllZone.getCombat().verifyCreaturesInPlay(); + Singletons.getModel().getGameState().getCombat().verifyCreaturesInPlay(); - if (!AllZone.getCombat().assignCombatDamage(false)) { + if (!Singletons.getModel().getGameState().getCombat().assignCombatDamage(false)) { this.setNeedToNextPhase(true); } else { Combat.dealAssignedDamage(); @@ -377,8 +377,8 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { case COMBAT_END: // End Combat always happens - AllZone.getEndOfCombat().executeUntil(); - AllZone.getEndOfCombat().executeAt(); + Singletons.getModel().getGameState().getEndOfCombat().executeUntil(); + Singletons.getModel().getGameState().getEndOfCombat().executeAt(); CombatUtil.showCombat(); //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); break; @@ -389,7 +389,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { break; case END_OF_TURN: - AllZone.getEndOfTurn().executeAt(); + Singletons.getModel().getGameState().getEndOfTurn().executeAt(); break; case CLEANUP: @@ -411,7 +411,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { c.clearBlockedThisTurn(); } - AllZone.getEndOfTurn().executeUntil(); + Singletons.getModel().getGameState().getEndOfTurn().executeUntil(); for (Player player : Singletons.getModel().getGameState().getPlayers()) { for (Card c : player.getCardsIn(ZoneType.Hand)) @@ -437,12 +437,12 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { final HashMap runParams = new HashMap(); runParams.put("Phase", phase.Name); runParams.put("Player", turn); - AllZone.getTriggerHandler().runTrigger(TriggerType.Phase, runParams); + Singletons.getModel().getGameState().getTriggerHandler().runTrigger(TriggerType.Phase, runParams); } // This line fixes Combat Damage triggers not going off when they should - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); // UNTAP if (phase != PhaseType.UNTAP) { @@ -469,7 +469,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { this.needToNextPhase = false; // If the Stack isn't empty why is nextPhase being called? - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { Log.debug("Phase.nextPhase() is called, but Stack isn't empty."); return; } @@ -484,7 +484,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } if (this.getPhase() == PhaseType.COMBAT_DECLARE_ATTACKERS) { - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); this.nCombatsThisTurn++; } else if (this.getPhase() == PhaseType.UNTAP) { this.nCombatsThisTurn = 0; @@ -492,7 +492,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { if (this.getPhase() == PhaseType.COMBAT_END) { //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); - AllZone.getCombat().reset(); + Singletons.getModel().getGameState().getCombat().reset(); this.resetAttackedThisCombat(this.getPlayerTurn()); this.bCombat = false; } @@ -505,7 +505,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { } if (this.is(PhaseType.COMBAT_DECLARE_BLOCKERS)) { - AllZone.getStack().unfreezeStack(); + Singletons.getModel().getGameState().getStack().unfreezeStack(); } if (this.is(PhaseType.COMBAT_END) && (this.extraCombats > 0)) { @@ -518,9 +518,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { this.bCombat = true; this.extraCombats--; - AllZone.getCombat().reset(); - AllZone.getCombat().setAttackingPlayer(player); - AllZone.getCombat().setDefendingPlayer(opp); + Singletons.getModel().getGameState().getCombat().reset(); + Singletons.getModel().getGameState().getCombat().setAttackingPlayer(player); + Singletons.getModel().getGameState().getCombat().setDefendingPlayer(opp); this.phaseIndex = PhaseType.COMBAT_DECLARE_ATTACKERS.Index; } else { if (!this.bRepeat) { // for when Cleanup needs to repeat itself @@ -561,9 +561,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ private Player handleNextTurn() { - AllZone.getStack().setCardsCastLastTurn(); - AllZone.getStack().clearCardsCastThisTurn(); - AllZone.resetZoneMoveTracking(); + Singletons.getModel().getGameState().getStack().setCardsCastLastTurn(); + Singletons.getModel().getGameState().getStack().clearCardsCastThisTurn(); + GameState.resetZoneMoveTracking(); for( Player p : Singletons.getModel().getGameState().getPlayers() ) { p.resetProwl(); @@ -823,20 +823,20 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { // pass the priority to other player this.setPriorityPlayer(actingPlayer.getOpponent()); AllZone.getInputControl().resetInput(); - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } else { - if (AllZone.getStack().size() == 0) { + if (Singletons.getModel().getGameState().getStack().size() == 0) { // end phase this.needToNextPhase = true; this.pPlayerPriority = this.getPlayerTurn(); // this needs to be // set early // as we exit the phase } else { - if (!AllZone.getStack().hasSimultaneousStackEntries()) { - AllZone.getStack().resolveStack(); + if (!Singletons.getModel().getGameState().getStack().hasSimultaneousStackEntries()) { + Singletons.getModel().getGameState().getStack().resolveStack(); } } - AllZone.getStack().chooseOrderOfSimultaneousStackEntryAll(); + Singletons.getModel().getGameState().getStack().chooseOrderOfSimultaneousStackEntryAll(); } } @@ -918,7 +918,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { */ public static boolean canCastSorcery(final Player player) { PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler(); - return now.isPlayerTurn(player) && now.getPhase().isMain() && AllZone.getStack().size() == 0; + return now.isPlayerTurn(player) && now.getPhase().isMain() && Singletons.getModel().getGameState().getStack().size() == 0; } /** @@ -937,7 +937,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { PhaseHandler now = Singletons.getModel().getGameState().getPhaseHandler(); final Card source = sa.getRootSpellAbility().getSourceCard(); boolean onlyThis = true; - if (AllZone.getStack().size() != 0) { + if (Singletons.getModel().getGameState().getStack().size() != 0) { for (final Card card : GameState.getCardsIn(ZoneType.Stack)) { if (card != source) { onlyThis = false; diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index b8c2fc6fb5c..dccccf4aa6e 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -90,9 +90,9 @@ public class PhaseUtil { Singletons.getModel().getGameState().notifyNextTurn(); CMessage.SINGLETON_INSTANCE.updateGameInfo(Singletons.getModel().getMatch()); - AllZone.getCombat().reset(); - AllZone.getCombat().setAttackingPlayer(turn); - AllZone.getCombat().setDefendingPlayer(turn.getOpponent()); + Singletons.getModel().getGameState().getCombat().reset(); + Singletons.getModel().getGameState().getCombat().setAttackingPlayer(turn); + Singletons.getModel().getGameState().getCombat().setDefendingPlayer(turn.getOpponent()); // Tokens starting game in play now actually suffer from Sum. Sickness again final List list = turn.getCardsIncludePhasingIn(ZoneType.Battlefield); @@ -220,7 +220,7 @@ public class PhaseUtil { *
+ * getZone. + *
+ * resetZoneMoveTracking. + *
+ * compare. + *