diff --git a/src/main/java/forge/Constant.java b/src/main/java/forge/Constant.java index 2885bd49b41..5c98a80843d 100644 --- a/src/main/java/forge/Constant.java +++ b/src/main/java/forge/Constant.java @@ -20,7 +20,6 @@ package forge; import java.util.ArrayList; import java.util.List; -import forge.deck.Deck; import forge.game.GameType; import forge.properties.ForgeProps; import forge.properties.NewConstants; @@ -42,36 +41,21 @@ public final class Constant { * The Class Runtime. */ public static class Preferences { - - /** The Constant Mill. */ - public static boolean MILL; /** The Constant DevMode. */ // one for normal mode, one for quest mode public static boolean DEV_MODE; /** The Constant UpldDrft. */ public static boolean UPLOAD_DRAFT; - /** The Constant RndCFoil. */ - public static boolean RANDOM_FOIL; } public static class Runtime { - - /** The Constant HumanDeck. */ - public static final Deck[] HUMAN_DECK = new Deck[1]; - - /** The Constant ComputerDeck. */ - public static final Deck[] COMPUTER_DECK = new Deck[1]; - /** The skin name. */ private static String skinName = "default"; /** The game type. */ private static GameType gameType = GameType.Constructed; - /** The Constant Smooth. */ - public static final boolean[] SMOOTH = new boolean[1]; - /** The Constant NetConn. */ public static final boolean[] NET_CONN = new boolean[1]; diff --git a/src/main/java/forge/game/GameNew.java b/src/main/java/forge/game/GameNew.java index 0e9423264f5..6f5461c8c87 100644 --- a/src/main/java/forge/game/GameNew.java +++ b/src/main/java/forge/game/GameNew.java @@ -135,7 +135,7 @@ public class GameNew { CMessage.SINGLETON_INSTANCE.updateGameInfo(); // friendliness - final boolean canRandomFoil = Preferences.RANDOM_FOIL + final boolean canRandomFoil = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL) && Constant.Runtime.getGameType().equals(GameType.Constructed); final Random generator = MyRandom.getRandom(); @@ -246,7 +246,7 @@ public class GameNew { } // do this instead of shuffling Computer's deck - final boolean smoothLand = Constant.Runtime.SMOOTH[0]; + final boolean smoothLand = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_SMOOTH_LAND); if (smoothLand) { final Iterable c1 = GameNew.smoothComputerManaCurve(AllZone.getComputerPlayer().getCardsIn(ZoneType.Library)); diff --git a/src/main/java/forge/game/limited/GauntletMini.java b/src/main/java/forge/game/limited/GauntletMini.java index 7418e65ea2f..224a92ccd71 100644 --- a/src/main/java/forge/game/limited/GauntletMini.java +++ b/src/main/java/forge/game/limited/GauntletMini.java @@ -21,6 +21,7 @@ import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import java.util.List; +import forge.AllZone; import forge.Constant; import forge.Singletons; import forge.deck.Deck; @@ -91,8 +92,8 @@ public class GauntletMini { public void resetCurrentRound() { wins = 0; losses = 0; - Constant.Runtime.HUMAN_DECK[0] = humanDeck; - Constant.Runtime.COMPUTER_DECK[0] = aiDecks.get(0); + AllZone.getHumanPlayer().setDeck(humanDeck); + AllZone.getComputerPlayer().setDeck(aiDecks.get(0)); currentRound = 1; } @@ -108,8 +109,8 @@ public class GauntletMini { return; } - Constant.Runtime.HUMAN_DECK[0] = humanDeck; - Constant.Runtime.COMPUTER_DECK[0] = aiDecks.get(currentRound); + AllZone.getHumanPlayer().setDeck(humanDeck); + AllZone.getComputerPlayer().setDeck(aiDecks.get(currentRound)); currentRound += 1; } @@ -163,7 +164,7 @@ public class GauntletMini { Constant.Runtime.setGameType(gauntletType); - GameNew.newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0]); + GameNew.newGame(AllZone.getHumanPlayer().getDeck(), AllZone.getComputerPlayer().getDeck()); return null; } diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 6f02178bfb5..2227618079f 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -48,6 +48,7 @@ import forge.card.replacement.ReplacementResult; import forge.card.spellability.SpellAbility; import forge.card.staticability.StaticAbility; import forge.card.trigger.TriggerType; +import forge.deck.Deck; import forge.game.GameLossReason; import forge.game.phase.PhaseHandler; import forge.game.zone.DefaultPlayerZone; @@ -149,6 +150,10 @@ public abstract class Player extends GameEntity implements Comparable { public static final List ALL_ZONES = Collections.unmodifiableList(Arrays.asList(ZoneType.Battlefield, ZoneType.Library, ZoneType.Graveyard, ZoneType.Hand, ZoneType.Exile, ZoneType.Command, ZoneType.Ante, ZoneType.Stack)); + + // Moved deck here from Constants.Runtime + private Deck deck; + /** *

* Constructor for Player. @@ -1304,7 +1309,7 @@ public abstract class Player extends GameEntity implements Comparable { AllZone.getTriggerHandler().runTrigger(TriggerType.Drawn, runParams); } // lose: - else if (!Preferences.DEV_MODE || Preferences.MILL) { + else if (!Preferences.DEV_MODE || Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MILLING_LOSS)) { // if devMode is off, or canLoseByDecking is Enabled, run Lose condition if (!this.cantLose()) { this.loseConditionMet(GameLossReason.Milled, null); @@ -2691,4 +2696,12 @@ public abstract class Player extends GameEntity implements Comparable { public int hashCode() { return (41 * (41 + this.getName().hashCode())); } + + public Deck getDeck() { + return deck; + } + + public void setDeck(Deck deck) { + this.deck = deck; + } } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java index 7d05a47c12a..09f5a741a18 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java @@ -20,7 +20,7 @@ package forge.gui.deckeditor.controllers; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; -import forge.Constant; +import forge.AllZone; import forge.Singletons; import forge.control.FControl; import forge.deck.Deck; @@ -169,7 +169,7 @@ public class CEditorDraftingProcess extends ACEditorBase */ private Deck getPlayersDeck() { final Deck deck = new Deck(); - Constant.Runtime.HUMAN_DECK[0] = deck; + AllZone.getHumanPlayer().setDeck(deck); // add sideboard to deck deck.getSideboard().addAll(this.getTableDeck().getCards()); diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java index 94298a00222..746af96dae7 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java @@ -27,7 +27,6 @@ import com.google.common.base.Function; import com.google.common.base.Supplier; import forge.AllZone; -import forge.Constant; import forge.deck.Deck; import forge.gui.deckeditor.SEditorIO; import forge.gui.deckeditor.SEditorUtil; @@ -222,8 +221,8 @@ public final class CEditorQuest extends ACEditorBase { this.getTableCatalog().setup(VCardCatalog.SINGLETON_INSTANCE, columnsCatalog); this.getTableDeck().setup(VCurrentDeck.SINGLETON_INSTANCE, columnsDeck); - Deck deck = Constant.Runtime.HUMAN_DECK[0] == null ? null : this.questData.getMyDecks().get( - Constant.Runtime.HUMAN_DECK[0].getName()); + Deck deck = AllZone.getHumanPlayer().getDeck() == null ? null : this.questData.getMyDecks().get( + AllZone.getHumanPlayer().getDeck().getName()); if (deck == null) { deck = new Deck(); diff --git a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index 0c16bba3129..5d0a5b7be06 100644 --- a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -232,8 +232,8 @@ public class SSubmenuQuestUtil { final SwingWorker worker = new SwingWorker() { @Override public Object doInBackground() { - Constant.Runtime.HUMAN_DECK[0] = SSubmenuQuestUtil.getCurrentDeck(); - Constant.Runtime.COMPUTER_DECK[0] = event.getEventDeck(); + AllZone.getHumanPlayer().setDeck(SSubmenuQuestUtil.getCurrentDeck()); + AllZone.getComputerPlayer().setDeck(event.getEventDeck()); Constant.Runtime.setGameType(GameType.Quest); qData.getChallengesManager().randomizeOpponents(); @@ -255,8 +255,8 @@ public class SSubmenuQuestUtil { } GameNew.newGame( - Constant.Runtime.HUMAN_DECK[0], - Constant.Runtime.COMPUTER_DECK[0], + AllZone.getHumanPlayer().getDeck(), + AllZone.getComputerPlayer().getDeck(), QuestUtil.getHumanStartingCards(qData, event), QuestUtil.getComputerStartingCards(event), baseLifeHuman + extraLifeHuman, diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java index 8452c25692d..7531f4ba87b 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java @@ -344,15 +344,15 @@ public enum CSubmenuConstructed implements ICDoc { final SwingWorker worker = new SwingWorker() { @Override public Object doInBackground() { - Constant.Runtime.HUMAN_DECK[0] = - generateDeck(VSubmenuConstructed.SINGLETON_INSTANCE.getLstHumanDecks(), PlayerType.HUMAN); - Constant.Runtime.COMPUTER_DECK[0] = - generateDeck(VSubmenuConstructed.SINGLETON_INSTANCE.getLstAIDecks(), PlayerType.COMPUTER); + AllZone.getHumanPlayer().setDeck( + generateDeck(VSubmenuConstructed.SINGLETON_INSTANCE.getLstHumanDecks(), PlayerType.HUMAN)); + AllZone.getComputerPlayer().setDeck( + generateDeck(VSubmenuConstructed.SINGLETON_INSTANCE.getLstAIDecks(), PlayerType.COMPUTER)); Constant.Runtime.setGameType(GameType.Constructed); - if (Constant.Runtime.HUMAN_DECK[0] != null && Constant.Runtime.COMPUTER_DECK[0] != null) { - GameNew.newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0]); + if (AllZone.getHumanPlayer().getDeck() != null && AllZone.getComputerPlayer().getDeck() != null) { + GameNew.newGame(AllZone.getHumanPlayer().getDeck(), AllZone.getComputerPlayer().getDeck()); } return null; } diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java index bdc60575ce9..a4e322beeb8 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java @@ -202,15 +202,15 @@ public enum CSubmenuDraft implements ICDoc { public Object doInBackground() { DeckGroup opponentDecks = Singletons.getModel().getDecks().getDraft().get(human.getName()); - Constant.Runtime.HUMAN_DECK[0] = human; - Constant.Runtime.COMPUTER_DECK[0] = opponentDecks.getAiDecks().get(aiIndex); //zero is human deck, so it must be +1 + AllZone.getHumanPlayer().setDeck(human); + AllZone.getComputerPlayer().setDeck(opponentDecks.getAiDecks().get(aiIndex)); //zero is human deck, so it must be +1 - if (Constant.Runtime.COMPUTER_DECK[0] == null) { + if (AllZone.getComputerPlayer().getDeck() == null) { throw new IllegalStateException("Draft: Computer deck is null!"); } Constant.Runtime.setGameType(GameType.Draft); - GameNew.newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0]); + GameNew.newGame(AllZone.getHumanPlayer().getDeck(), AllZone.getComputerPlayer().getDeck()); return null; } diff --git a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java index 5d88eccf7cf..7450701f609 100644 --- a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java +++ b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java @@ -8,7 +8,6 @@ import java.awt.event.MouseEvent; import org.apache.commons.lang3.text.WordUtils; import forge.Command; -import forge.Constant; import forge.Constant.Preferences; import forge.Singletons; import forge.control.RestartUtil; @@ -120,9 +119,7 @@ public enum CSubmenuPreferences implements ICDoc { view.getCbStackLand().addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent arg0) { - final boolean toggle = view.getCbStackLand().isSelected(); - prefs.setPref(FPref.UI_SMOOTH_LAND, String.valueOf(toggle)); - Constant.Runtime.SMOOTH[0] = toggle; + prefs.setPref(FPref.UI_SMOOTH_LAND, view.getCbRandomFoil().isSelected()); prefs.save(); } }); @@ -130,9 +127,7 @@ public enum CSubmenuPreferences implements ICDoc { view.getCbRandomFoil().addItemListener(new ItemListener() { @Override public void itemStateChanged(final ItemEvent arg0) { - final boolean toggle = view.getCbRandomFoil().isSelected(); - prefs.setPref(FPref.UI_RANDOM_FOIL, String.valueOf(toggle)); - Preferences.RANDOM_FOIL = toggle; + prefs.setPref(FPref.UI_RANDOM_FOIL, view.getCbRandomFoil().isSelected()); prefs.save(); } }); diff --git a/src/main/java/forge/gui/match/ControlWinLose.java b/src/main/java/forge/gui/match/ControlWinLose.java index 01336bc1a14..273a6b477be 100644 --- a/src/main/java/forge/gui/match/ControlWinLose.java +++ b/src/main/java/forge/gui/match/ControlWinLose.java @@ -91,10 +91,11 @@ public class ControlWinLose { boolean isAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); GameType gameType = Constant.Runtime.getGameType(); + Deck hDeck = AllZone.getHumanPlayer().getDeck(); + Deck cDeck = AllZone.getComputerPlayer().getDeck(); + //This is called from QuestWinLoseHandler also. If we're in a quest, this is already handled elsewhere if (isAnte && !gameType.equals(GameType.Quest)) { - Deck hDeck = Constant.Runtime.HUMAN_DECK[0]; - Deck cDeck = Constant.Runtime.COMPUTER_DECK[0]; if (Singletons.getModel().getMatchState().hasWonLastGame(AllZone.getHumanPlayer().getName())) { List compAntes = AllZone.getComputerPlayer().getCardsIn(ZoneType.Ante); @@ -104,8 +105,6 @@ public class ControlWinLose { cDeck.getMain().remove(toRemove); } - Constant.Runtime.COMPUTER_DECK[0] = cDeck; - List o = GuiChoose.noneOrMany("Select cards to add to your deck", compAntes); if (null != o) { for (Card c : o) { @@ -121,11 +120,11 @@ public class ControlWinLose { CardPrinted toRemove = CardDb.instance().getCard(c); hDeck.getMain().remove(toRemove); } - Constant.Runtime.HUMAN_DECK[0] = hDeck; + AllZone.getHumanPlayer().setDeck(hDeck); } } Singletons.getModel().savePrefs(); - GameNew.newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0]); + GameNew.newGame(hDeck, cDeck); } /** diff --git a/src/main/java/forge/gui/match/QuestWinLoseHandler.java b/src/main/java/forge/gui/match/QuestWinLoseHandler.java index 30303938a81..79441f93474 100644 --- a/src/main/java/forge/gui/match/QuestWinLoseHandler.java +++ b/src/main/java/forge/gui/match/QuestWinLoseHandler.java @@ -19,7 +19,6 @@ package forge.gui.match; import forge.AllZone; import forge.Card; -import forge.Constant; import forge.Singletons; import forge.control.FControl; @@ -133,7 +132,7 @@ public class QuestWinLoseHandler extends ControlWinLose { computerLife = ((QuestEventChallenge) qEvent).getAILife(); } - GameNew.newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0], + GameNew.newGame(AllZone.getHumanPlayer().getDeck(), AllZone.getComputerPlayer().getDeck(), humanList, computerList, humanLife, computerLife, qEvent.getIconFilename()); } else { super.startNextRound(); diff --git a/src/main/java/forge/gui/match/controllers/CDock.java b/src/main/java/forge/gui/match/controllers/CDock.java index 87409a2d4da..2659f27ca30 100644 --- a/src/main/java/forge/gui/match/controllers/CDock.java +++ b/src/main/java/forge/gui/match/controllers/CDock.java @@ -36,7 +36,6 @@ import forge.Card; import forge.CardListUtil; import forge.CardPredicates.Presets; import forge.Command; -import forge.Constant; import forge.Singletons; import forge.deck.Deck; import forge.game.phase.CombatUtil; @@ -194,10 +193,10 @@ public enum CDock implements ICDoc { public void actionPerformed(final ActionEvent e) { Deck targetDeck; - if (!Constant.Runtime.HUMAN_DECK[0].getMain().isEmpty()) { - targetDeck = Constant.Runtime.HUMAN_DECK[0]; - } else if (!Constant.Runtime.COMPUTER_DECK[0].getMain().isEmpty()) { - targetDeck = Constant.Runtime.COMPUTER_DECK[0]; + if (!AllZone.getHumanPlayer().getDeck().getMain().isEmpty()) { + targetDeck = AllZone.getHumanPlayer().getDeck(); + } else if (!AllZone.getComputerPlayer().getDeck().getMain().isEmpty()) { + targetDeck = AllZone.getComputerPlayer().getDeck(); } else { return; } diff --git a/src/main/java/forge/gui/toolbox/DeckLister.java b/src/main/java/forge/gui/toolbox/DeckLister.java index cac8efc9afe..8af34e638d3 100644 --- a/src/main/java/forge/gui/toolbox/DeckLister.java +++ b/src/main/java/forge/gui/toolbox/DeckLister.java @@ -38,7 +38,6 @@ import javax.swing.border.MatteBorder; import net.miginfocom.swing.MigLayout; import forge.AllZone; import forge.Command; -import forge.Constant; import forge.Singletons; import forge.control.FControl; import forge.deck.CardCollections; @@ -425,7 +424,7 @@ public class DeckLister extends JPanel implements ILocalRepaint { private void editDeck(final Deck d0) { switch (this.gametype) { case Quest: - Constant.Runtime.HUMAN_DECK[0] = d0; + AllZone.getHumanPlayer().setDeck(d0); final CEditorQuest qEditor = new CEditorQuest(AllZone.getQuest()); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(qEditor); FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST); diff --git a/src/main/java/forge/properties/ForgePreferences.java b/src/main/java/forge/properties/ForgePreferences.java index 718844b230e..92403f49364 100644 --- a/src/main/java/forge/properties/ForgePreferences.java +++ b/src/main/java/forge/properties/ForgePreferences.java @@ -234,14 +234,13 @@ public class ForgePreferences { this.setPref(FPref.PHASE_HUMAN_COMBATDAMAGE, String.valueOf(fieldViews.get(1).getLblCombatDamage().getEnabled())); this.setPref(FPref.PHASE_HUMAN_ENDCOMBAT, String.valueOf(fieldViews.get(1).getLblEndCombat().getEnabled())); this.setPref(FPref.PHASE_HUMAN_MAIN2, String.valueOf(fieldViews.get(1).getLblMain2().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_EOT, String.valueOf(fieldViews.get(1).getLblEndTurn().getEnabled())); - this.setPref(FPref.PHASE_HUMAN_CLEANUP, String.valueOf(fieldViews.get(1).getLblCleanup().getEnabled())); + this.setPref(FPref.PHASE_HUMAN_EOT, fieldViews.get(1).getLblEndTurn().getEnabled()); + this.setPref(FPref.PHASE_HUMAN_CLEANUP, fieldViews.get(1).getLblCleanup().getEnabled()); final VDev v = VDev.SINGLETON_INSTANCE; - Preferences.MILL = v.getLblMilling().getEnabled(); - - this.setPref(FPref.DEV_MILLING_LOSS, String.valueOf(Preferences.MILL)); - this.setPref(FPref.DEV_UNLIMITED_LAND, String.valueOf(v.getLblUnlimitedLands().getEnabled())); + + this.setPref(FPref.DEV_MILLING_LOSS, v.getLblMilling().getEnabled()); + this.setPref(FPref.DEV_UNLIMITED_LAND, v.getLblUnlimitedLands().getEnabled()); } /** @@ -251,9 +250,7 @@ public class ForgePreferences { public void actuateMatchPreferences() { final List fieldViews = VMatchUI.SINGLETON_INSTANCE.getFieldViews(); - Preferences.MILL = this.getPrefBoolean(FPref.DEV_MILLING_LOSS); Preferences.DEV_MODE = this.getPrefBoolean(FPref.DEV_MODE_ENABLED); - Preferences.RANDOM_FOIL = this.getPrefBoolean(FPref.UI_RANDOM_FOIL); Preferences.UPLOAD_DRAFT = (Constant.Runtime.NET_CONN[0] ? this.getPrefBoolean(FPref.UI_UPLOAD_DRAFT) : false); // AI field is at index [0] @@ -336,6 +333,10 @@ public class ForgePreferences { preferenceValues.put(q0, s0); } + public void setPref(FPref q0, boolean val) { + setPref(q0, String.valueOf(val)); + } + /** * Returns a non-difficulty-indexed preference value. *