package forge; import forge.card.cardFactory.CardFactory; import forge.card.mana.ManaPool; import forge.card.trigger.TriggerHandler; import forge.deck.DeckManager; import forge.gui.input.InputControl; import forge.properties.ForgeProps; import forge.properties.NewConstants; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * Please use public getters and setters instead of direct field access. * <p/> * If you need a setter, by all means, add it. * * @author Forge * @version $Id: $ */ public class AllZone implements NewConstants { //only for testing, should read decks from local directory // public static final IO IO = new IO("all-decks"); /** Constant <code>HumanPlayer</code> */ private static final Player HumanPlayer = new HumanPlayer("Human"); /** Constant <code>ComputerPlayer</code> */ private static final Player ComputerPlayer = new AIPlayer("Computer"); /** Constant <code>QuestData</code> */ private static forge.quest.data.QuestData QuestData = null; /** Constant <code>QuestAssignment</code> */ private static Quest_Assignment QuestAssignment = null; /** Constant <code>NameChanger</code> */ private static final NameChanger NameChanger = new NameChanger(); /** Constant <code>EndOfTurn</code> */ private static EndOfTurn EndOfTurn = new EndOfTurn(); /** Constant <code>EndOfCombat</code> */ private static EndOfCombat EndOfCombat = new EndOfCombat(); private static Upkeep Upkeep = new Upkeep(); /** Constant <code>Phase</code> */ private static final Phase Phase = new Phase(); // Phase is now a prerequisite for CardFactory /** Constant <code>CardFactory</code> */ private static final CardFactory CardFactory = new CardFactory(ForgeProps.getFile(CARDSFOLDER)); /** Constant <code>Stack</code> */ private static final MagicStack Stack = new MagicStack(); /** Constant <code>InputControl</code> */ private static final InputControl InputControl = new InputControl(); /** Constant <code>GameAction</code> */ private static final GameAction GameAction = new GameAction(); /** Constant <code>StaticEffects</code> */ private static final StaticEffects StaticEffects = new StaticEffects(); /** Constant <code>GameInfo</code> */ private static final GameInfo GameInfo = new GameInfo(); /** Constant <code>TriggerHandler</code> */ private static final TriggerHandler TriggerHandler = new TriggerHandler(); //initialized at Runtime since it has to be the last object constructed /** Constant <code>Computer</code> */ private static ComputerAI_Input Computer; //shared between Input_Attack, Input_Block, Input_CombatDamage , InputState_Computer /** Constant <code>Combat</code> */ private static Combat Combat = new Combat(); //Human_Play, Computer_Play is different because Card.comesIntoPlay() is called when a card is added by PlayerZone.add(Card) /** Constant <code>Human_Battlefield</code> */ private final static PlayerZone Human_Battlefield = new PlayerZone_ComesIntoPlay(Constant.Zone.Battlefield, AllZone.getHumanPlayer()); /** Constant <code>Human_Hand</code> */ private final static PlayerZone Human_Hand = new DefaultPlayerZone(Constant.Zone.Hand, AllZone.getHumanPlayer()); /** Constant <code>Human_Graveyard</code> */ private final static PlayerZone Human_Graveyard = new DefaultPlayerZone(Constant.Zone.Graveyard, AllZone.getHumanPlayer()); /** Constant <code>Human_Library</code> */ private final static PlayerZone Human_Library = new DefaultPlayerZone(Constant.Zone.Library, AllZone.getHumanPlayer()); /** Constant <code>Human_Exile</code> */ private final static PlayerZone Human_Exile = new DefaultPlayerZone(Constant.Zone.Exile, AllZone.getHumanPlayer()); /** Constant <code>Human_Command</code> */ private final static PlayerZone Human_Command = new DefaultPlayerZone(Constant.Zone.Command, AllZone.getHumanPlayer()); /** Constant <code>Computer_Battlefield</code> */ private final static PlayerZone Computer_Battlefield = new PlayerZone_ComesIntoPlay(Constant.Zone.Battlefield, AllZone.getComputerPlayer()); /** Constant <code>Computer_Hand</code> */ private final static PlayerZone Computer_Hand = new DefaultPlayerZone(Constant.Zone.Hand, AllZone.getComputerPlayer()); /** Constant <code>Computer_Graveyard</code> */ private final static PlayerZone Computer_Graveyard = new DefaultPlayerZone(Constant.Zone.Graveyard, AllZone.getComputerPlayer()); /** Constant <code>Computer_Library</code> */ private final static PlayerZone Computer_Library = new DefaultPlayerZone(Constant.Zone.Library, AllZone.getComputerPlayer()); /** Constant <code>Computer_Exile</code> */ private final static PlayerZone Computer_Exile = new DefaultPlayerZone(Constant.Zone.Exile, AllZone.getComputerPlayer()); /** Constant <code>Computer_Command</code> */ private final static PlayerZone Computer_Command = new DefaultPlayerZone(Constant.Zone.Command, AllZone.getComputerPlayer()); /** Constant <code>Stack_Zone</code> */ private final static PlayerZone Stack_Zone = new DefaultPlayerZone(Constant.Zone.Stack, null); /** Constant <code>ManaPool</code> */ private static final ManaPool ManaPool = new ManaPool(AllZone.getHumanPlayer()); /** Constant <code>Computer_ManaPool</code> */ private static final ManaPool Computer_ManaPool = new ManaPool(AllZone.getComputerPlayer()); /** Constant <code>Display</code> */ private static Display Display; /** Constant <code>map</code> */ private final static Map<String, PlayerZone> map = new HashMap<String, PlayerZone>(); static { map.put(Constant.Zone.Graveyard + AllZone.getHumanPlayer(), Human_Graveyard); map.put(Constant.Zone.Hand + AllZone.getHumanPlayer(), Human_Hand); map.put(Constant.Zone.Library + AllZone.getHumanPlayer(), Human_Library); map.put(Constant.Zone.Battlefield + AllZone.getHumanPlayer(), Human_Battlefield); map.put(Constant.Zone.Exile + AllZone.getHumanPlayer(), Human_Exile); map.put(Constant.Zone.Command + AllZone.getHumanPlayer(), Human_Command); map.put(Constant.Zone.Graveyard + AllZone.getComputerPlayer(), Computer_Graveyard); map.put(Constant.Zone.Hand + AllZone.getComputerPlayer(), Computer_Hand); map.put(Constant.Zone.Library + AllZone.getComputerPlayer(), Computer_Library); map.put(Constant.Zone.Battlefield + AllZone.getComputerPlayer(), Computer_Battlefield); map.put(Constant.Zone.Exile + AllZone.getComputerPlayer(), Computer_Exile); map.put(Constant.Zone.Command + AllZone.getComputerPlayer(), Computer_Command); map.put(Constant.Zone.Stack + null, Stack_Zone); } private static long timestamp = 0; /** Constant <code>DeckManager</code> */ private final static DeckManager dMgr = new DeckManager(ForgeProps.getFile(NEW_DECKS)); /** * <p>getHumanPlayer.</p> * * @return a {@link forge.Player} object. * @since 1.0.15 */ public static Player getHumanPlayer() { return HumanPlayer; } /** * <p>getComputerPlayer.</p> * * @return a {@link forge.Player} object. * @since 1.0.15 */ public static Player getComputerPlayer() { return ComputerPlayer; } /** * <p>getQuestData.</p> * * @return a {@link forge.quest.data.QuestData} object. * @since 1.0.15 */ public static forge.quest.data.QuestData getQuestData() { return QuestData; } /** * <p>setQuestData.</p> * * @param questData a {@link forge.quest.data.QuestData} object. * @since 1.0.15 */ public static void setQuestData(forge.quest.data.QuestData questData) { QuestData = questData; } /** * <p>getQuestAssignment.</p> * * @return a {@link forge.Quest_Assignment} object. * @since 1.0.15 */ public static Quest_Assignment getQuestAssignment() { return QuestAssignment; } /** * <p>setQuestAssignment.</p> * * @param assignment a {@link forge.Quest_Assignment} object. * @since 1.0.15 */ public static void setQuestAssignment(Quest_Assignment assignment) { QuestAssignment = assignment; } /** * <p>getNameChanger.</p> * * @return a {@link forge.NameChanger} object. * @since 1.0.15 */ public static NameChanger getNameChanger() { return NameChanger; } /** * <p>getEndOfTurn.</p> * * @return a {@link forge.EndOfTurn} object. * @since 1.0.15 */ public static EndOfTurn getEndOfTurn() { return EndOfTurn; } /** * <p>getEndOfCombat.</p> * * @return a {@link forge.EndOfCombat} object. * @since 1.0.15 */ public static forge.EndOfCombat getEndOfCombat() { return EndOfCombat; } /** * <p>getUpkeep.</p> * * @return a {@link forge.EndOfCombat} object. * @since 1.0.16 */ public static forge.Upkeep getUpkeep() { return Upkeep; } /** * <p>getPhase.</p> * * @return a {@link forge.Phase} object. * @since 1.0.15 */ public static Phase getPhase() { return Phase; } /** * <p>getCardFactory.</p> * * @return a {@link forge.card.cardFactory.CardFactory} object. * @since 1.0.15 */ public static CardFactory getCardFactory() { return CardFactory; } /** * <p>getStack.</p> * * @return a {@link forge.MagicStack} object. * @since 1.0.15 */ public static MagicStack getStack() { return Stack; } /** * <p>getInputControl.</p> * * @return a {@link forge.gui.input.InputControl} object. * @since 1.0.15 */ public static InputControl getInputControl() { return InputControl; } /** * <p>getGameAction.</p> * * @return a {@link forge.GameAction} object. * @since 1.0.15 */ public static GameAction getGameAction() { return GameAction; } /** * <p>getStaticEffects.</p> * * @return a {@link forge.StaticEffects} object. * @since 1.0.15 */ public static StaticEffects getStaticEffects() { return StaticEffects; } /** * <p>getGameInfo.</p> * * @return a {@link forge.GameInfo} object. * @since 1.0.15 */ public static GameInfo getGameInfo() { return GameInfo; } /** * <p>getTriggerHandler.</p> * * @return a {@link forge.card.trigger.TriggerHandler} object. * @since 1.0.15 */ public static TriggerHandler getTriggerHandler() { return TriggerHandler; } /** * <p>getComputer.</p> * * @return a {@link forge.ComputerAI_Input} object. * @since 1.0.15 */ public static ComputerAI_Input getComputer() { return Computer; } /** * <p>setComputer.</p> * * @param input a {@link forge.ComputerAI_Input} object. * @since 1.0.15 */ public static void setComputer(ComputerAI_Input input) { Computer = input; } /** * <p>getCombat.</p> * * @return a {@link forge.Combat} object. * @since 1.0.15 */ public static Combat getCombat() { return Combat; } /** * <p>setCombat.</p> * * @param attackers a {@link forge.Combat} object. * @since 1.0.15 */ public static void setCombat(Combat attackers) { Combat = attackers; } //Human_Play, Computer_Play is different because Card.comesIntoPlay() is called when a card is added by PlayerZone.add(Card) /** * <p>getHumanBattlefield.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getHumanBattlefield() { return Human_Battlefield; } /** * <p>getHumanHand.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getHumanHand() { return Human_Hand; } /** * <p>getHumanGraveyard.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getHumanGraveyard() { return Human_Graveyard; } /** * <p>getHumanLibrary.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getHumanLibrary() { return Human_Library; } /** * <p>getHumanExile.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getHumanExile() { return Human_Exile; } /** * <p>getHumanCommand.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getHumanCommand() { return Human_Command; } /** * <p>getComputerBattlefield.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getComputerBattlefield() { return Computer_Battlefield; } /** * <p>getComputerHand.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getComputerHand() { return Computer_Hand; } /** * <p>getComputerGraveyard.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getComputerGraveyard() { return Computer_Graveyard; } /** * <p>getComputerLibrary.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getComputerLibrary() { return Computer_Library; } /** * <p>getComputerExile.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getComputerExile() { return Computer_Exile; } /** * <p>getComputerCommand.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getComputerCommand() { return Computer_Command; } /** * <p>getStackZone.</p> * * @return a {@link forge.PlayerZone} object. * @since 1.0.15 */ public static PlayerZone getStackZone() { return Stack_Zone; } /** * <p>getManaPool.</p> * * @return a {@link forge.card.mana.ManaPool} object. * @since 1.0.15 */ public static ManaPool getManaPool() { return ManaPool; } /** * <p>getComputerManaPool.</p> * * @return a {@link forge.card.mana.ManaPool} object. * @since 1.0.15 */ public static ManaPool getComputerManaPool() { return Computer_ManaPool; } /** * <p>getDisplay.</p> * * @return a {@link forge.Display} object. * @since 1.0.15 */ public static Display getDisplay() { return Display; } /** * <p>setDisplay.</p> * * @param display a {@link forge.Display} object. * @since 1.0.15 */ public static void setDisplay(Display display) { Display = display; } /** * <p>Getter for the field <code>map</code>.</p> * * @return a {@link java.util.Map} object. */ private static Map<String, PlayerZone> getMap() { return map; } /** * <p>getZone.</p> * * @param c a {@link forge.Card} object. * @return a {@link forge.PlayerZone} object. */ public static PlayerZone getZone(Card c) { Iterator<PlayerZone> it = getMap().values().iterator(); PlayerZone p; while (it.hasNext()) { p = (PlayerZone) it.next(); if (AllZoneUtil.isCardInZone(p, c)) return p; } return null; } /** * <p>getZone.</p> * * @param zone a {@link java.lang.String} object. * @param player a {@link forge.Player} object. * @return a {@link forge.PlayerZone} object. */ public static PlayerZone getZone(String zone, Player player) { if (zone.equals("Stack")) player = null; Object o = getMap().get(zone + player); if (o == null) throw new RuntimeException("AllZone : getZone() invalid parameters " + zone + " " + player); return (PlayerZone) o; } /** * <p>resetZoneMoveTracking.</p> */ public static void resetZoneMoveTracking() { ((DefaultPlayerZone) getHumanCommand()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getHumanLibrary()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getHumanHand()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getHumanBattlefield()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getHumanGraveyard()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getComputerCommand()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getComputerLibrary()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getComputerHand()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getComputerBattlefield()).resetCardsAddedThisTurn(); ((DefaultPlayerZone) getComputerGraveyard()).resetCardsAddedThisTurn(); } /** * <p>getDeckManager.</p> */ public static DeckManager getDeckManager() { return dMgr; } public static long getNextTimestamp() { timestamp++; return timestamp; } }//AllZone