diff --git a/src/main/java/forge/AllZone.java b/src/main/java/forge/AllZone.java index 1a5d950d3bd..91375ba829c 100644 --- a/src/main/java/forge/AllZone.java +++ b/src/main/java/forge/AllZone.java @@ -91,6 +91,7 @@ public final class AllZone { * @return a {@link forge.game.player.Player} object. * @since 1.0.15 */ + @Deprecated public static Player getHumanPlayer() { if (Singletons.getModel() != null) { return Singletons.getModel().getGameState().getHumanPlayer(); @@ -109,6 +110,7 @@ public final class AllZone { * @return a {@link forge.game.player.Player} object. * @since 1.0.15 */ + @Deprecated public static Player getComputerPlayer() { return Singletons.getModel().getGameState().getComputerPlayer(); } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java index 6d6c977674c..e2a7181b455 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java @@ -44,6 +44,7 @@ import forge.card.spellability.Target; import forge.game.phase.PhaseType; import forge.game.player.ComputerUtil; import forge.game.player.Player; +import forge.game.player.PlayerType; import forge.game.zone.ZoneType; /** @@ -1500,8 +1501,8 @@ public class AbilityFactory { return true; } - return (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.END_OF_TURN) && Singletons.getModel().getGameState().getPhaseHandler().isNextTurn( - AllZone.getComputerPlayer())); + return (Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.END_OF_TURN) + && Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(PlayerType.COMPUTER)); } // returns true if it's better to wait until blockers are declared @@ -1519,7 +1520,7 @@ public class AbilityFactory { return (sa.getSourceCard().isCreature() && sa.getPayCosts().getTap() && (Singletons.getModel().getGameState().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY) - || Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(AllZone.getHumanPlayer()))); + || Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(PlayerType.HUMAN))); } /** @@ -2224,11 +2225,10 @@ public class AbilityFactory { players.add(sa.getActivatingPlayer().getOpponent()); } } else { - if (AllZone.getHumanPlayer().isValid(defined, sa.getActivatingPlayer(), sa.getSourceCard())) { - players.add(AllZone.getHumanPlayer()); - } - if (AllZone.getComputerPlayer().isValid(defined, sa.getActivatingPlayer(), sa.getSourceCard())) { - players.add(AllZone.getComputerPlayer()); + for (Player p : AllZone.getPlayersInGame()) { + if (p.isValid(defined, sa.getActivatingPlayer(), sa.getSourceCard())) { + players.add(p); + } } } return players; @@ -2487,7 +2487,8 @@ public class AbilityFactory { if (threatParams.containsKey("Defined")) { objects = AbilityFactory.getDefinedObjects(source, threatParams.get("Defined"), topStack); } else if (threatParams.containsKey("ValidCards")) { - List cards = CardLists.getValidCards(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), threatParams.get("ValidCards").split(","), source.getController(), source); + List battleField = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); + List cards = CardLists.getValidCards(battleField, threatParams.get("ValidCards").split(","), source.getController(), source); for (Card card : cards) { objects.add(card); } diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java index 654254f7875..79b0098859b 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryCounters.java @@ -46,6 +46,7 @@ import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.ComputerUtil; import forge.game.player.Player; +import forge.game.player.PlayerType; import forge.game.zone.PlayerZone; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; @@ -1946,7 +1947,7 @@ public class AbilityFactoryCounters { if (type.equals("P1P1") && sa.isAbility() && source.isCreature() && sa.getPayCosts() != null && sa.getPayCosts().getTap() && sa instanceof AbilitySub - && (phase.isNextTurn(AllZone.getHumanPlayer()) + && (phase.isNextTurn(PlayerType.HUMAN) || phase.getPhase().isBefore(PhaseType.COMBAT_DECLARE_BLOCKERS_INSTANT_ABILITY))) { boolean combatants = false; for (Card c : hList) { diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java index 61e1447056f..ad2aa50a728 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryDealDamage.java @@ -46,6 +46,7 @@ import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.ComputerUtil; import forge.game.player.Player; +import forge.game.player.PlayerType; import forge.game.zone.ZoneType; import forge.util.MyRandom; @@ -644,7 +645,7 @@ public class AbilityFactoryDealDamage { // on the stack // or from taking combat damage final boolean freePing = isTrigger || saMe.getPayCosts() == null || tgt.getNumTargeted() > 0 - || (phase.is(PhaseType.END_OF_TURN) && saMe.isAbility() && phase.isNextTurn(AllZone.getComputerPlayer())) + || (phase.is(PhaseType.END_OF_TURN) && saMe.isAbility() && phase.isNextTurn(PlayerType.COMPUTER)) || (phase.is(PhaseType.MAIN2) && saMe.getRestrictions().getPlaneswalker()); if (freePing && saMe.canTarget(AllZone.getHumanPlayer()) && tgt.addTarget(AllZone.getHumanPlayer())) { @@ -662,7 +663,7 @@ public class AbilityFactoryDealDamage { // because we can else if (saMe.canTarget(AllZone.getHumanPlayer())) { - if ((phase.is(PhaseType.END_OF_TURN) && phase.isNextTurn(AllZone.getComputerPlayer())) + if ((phase.is(PhaseType.END_OF_TURN) && phase.isNextTurn(PlayerType.COMPUTER)) || (AbilityFactory.isSorcerySpeed(saMe) && phase.is(PhaseType.MAIN2)) || saMe.getPayCosts() == null || isTrigger) { tgt.addTarget(AllZone.getHumanPlayer()); diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java index 1f068f1bdaa..1bdbb8216d6 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryZoneAffecting.java @@ -45,6 +45,7 @@ import forge.card.spellability.Target; import forge.game.phase.PhaseType; import forge.game.player.ComputerUtil; import forge.game.player.Player; +import forge.game.player.PlayerType; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; import forge.util.MyRandom; @@ -361,7 +362,7 @@ public class AbilityFactoryZoneAffecting { randomReturn = true; } if ((Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.END_OF_TURN) - && Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(AllZone.getComputerPlayer()))) { + && Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(PlayerType.COMPUTER))) { randomReturn = true; } @@ -912,8 +913,8 @@ public class AbilityFactoryZoneAffecting { chance = .667; // 66.7% chance for sorcery speed } - if ((Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.END_OF_TURN) && Singletons.getModel().getGameState().getPhaseHandler().isNextTurn( - AllZone.getComputerPlayer()))) { + if ((Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.END_OF_TURN) + && Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(PlayerType.COMPUTER))) { chance = .9; // 90% for end of opponents turn } diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 7cdfe65f389..e31a52fe1bf 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -87,7 +87,6 @@ public class GameNew { bf.updateObservers(); p.getPlayer().getZone(ZoneType.Hand).updateObservers(); } - GameNew.actuateGame(players); } diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 5cf1f6df8e7..c8fd97cff48 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -34,6 +34,7 @@ import forge.Singletons; import forge.card.spellability.SpellAbility; import forge.card.trigger.TriggerType; import forge.game.player.Player; +import forge.game.player.PlayerType; import forge.game.zone.ZoneType; import forge.properties.ForgePreferences.FPref; import forge.util.MyObservable; @@ -753,9 +754,9 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { * a {@link forge.game.player.Player} object. * @return a boolean. */ - public final boolean isNextTurn(final Player pl) { + public final boolean isNextTurn(final PlayerType pt) { final Player next = this.getNextTurn(); - return (pl.equals(next)); + return next.getType() == pt; } /** diff --git a/src/main/java/forge/game/player/AIPlayer.java b/src/main/java/forge/game/player/AIPlayer.java index dc8d92caa80..8d04d55574b 100644 --- a/src/main/java/forge/game/player/AIPlayer.java +++ b/src/main/java/forge/game/player/AIPlayer.java @@ -102,6 +102,7 @@ public class AIPlayer extends Player { return false; } + /** *

* isComputer. @@ -188,7 +189,7 @@ public class AIPlayer extends Player { // to doDiscard basically return; } - AllZone.getComputerPlayer().discard(num, sa, false); + this.discard(num, sa, false); } // ///////////////////////// @@ -200,13 +201,13 @@ public class AIPlayer extends Player { for (int i = 0; i < num; i++) { boolean bottom = false; if (topN.get(i).isBasicLand()) { - List bl = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); + List bl = this.getCardsIn(ZoneType.Battlefield); int nBasicLands = Iterables.size(Iterables.filter(bl, CardPredicates.Presets.BASIC_LANDS)); bottom = nBasicLands > 5; // if control more than 5 Basic land, // probably don't need more } else if (topN.get(i).isCreature()) { - List cl = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield); + List cl = this.getCardsIn(ZoneType.Battlefield); cl = CardLists.filter(cl, CardPredicates.Presets.CREATURES); bottom = cl.size() > 5; // if control more than 5 Creatures, // probably don't need more @@ -257,4 +258,11 @@ public class AIPlayer extends Player { this.drawCard(); } + /* (non-Javadoc) + * @see forge.game.player.Player#getType() + */ + @Override + public PlayerType getType() { + return PlayerType.COMPUTER; + } } // end AIPlayer class diff --git a/src/main/java/forge/game/player/ComputerUtilAttack.java b/src/main/java/forge/game/player/ComputerUtilAttack.java index 2a4b5b6f11b..9ef2839b84e 100644 --- a/src/main/java/forge/game/player/ComputerUtilAttack.java +++ b/src/main/java/forge/game/player/ComputerUtilAttack.java @@ -242,7 +242,7 @@ public class ComputerUtilAttack { int fixedBlockers = 0; final List vigilantes = new ArrayList(); //check for time walks - if (Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(AllZone.getComputerPlayer())) { + if (Singletons.getModel().getGameState().getPhaseHandler().isNextTurn(PlayerType.COMPUTER)) { return attackers; } for (final Card c : this.computerList) { diff --git a/src/main/java/forge/game/player/HumanPlayer.java b/src/main/java/forge/game/player/HumanPlayer.java index 3c93a1068dd..8274053ef4c 100644 --- a/src/main/java/forge/game/player/HumanPlayer.java +++ b/src/main/java/forge/game/player/HumanPlayer.java @@ -226,4 +226,12 @@ public class HumanPlayer extends Player { } } + /* (non-Javadoc) + * @see forge.game.player.Player#getType() + */ + @Override + public PlayerType getType() { + return PlayerType.HUMAN; + } + } // end HumanPlayer class diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 6ef06fb794a..944891da979 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -240,6 +240,7 @@ public abstract class Player extends GameEntity implements Comparable { * @return a boolean. */ public abstract boolean isComputer(); + public abstract PlayerType getType(); /** *

diff --git a/src/main/java/forge/game/zone/ZoneType.java b/src/main/java/forge/game/zone/ZoneType.java index 65b8bd1465f..56cf362e9f3 100644 --- a/src/main/java/forge/game/zone/ZoneType.java +++ b/src/main/java/forge/game/zone/ZoneType.java @@ -21,7 +21,7 @@ public enum ZoneType { Battlefield(false), /** The Exile. */ - Exile(false), + Exile(true), // Some cards get exiled face down (ex: Clone Shell) /** The Command. */ Command(false),