diff --git a/.gitattributes b/.gitattributes index 62cf8ad019a..faa55e0f881 100644 --- a/.gitattributes +++ b/.gitattributes @@ -121,7 +121,6 @@ forge-game/.settings/org.eclipse.m2e.core.prefs -text forge-game/pom.xml -text forge-game/src/main/java/forge/Command.java svneol=native#text/plain forge-game/src/main/java/forge/Constant.java svneol=native#text/plain -forge-game/src/main/java/forge/Dependencies.java -text forge-game/src/main/java/forge/ImageKeys.java -text forge-game/src/main/java/forge/ai/AiAttackController.java svneol=native#text/plain forge-game/src/main/java/forge/ai/AiBlockController.java svneol=native#text/plain @@ -256,6 +255,7 @@ forge-game/src/main/java/forge/game/GameLogEntryType.java -text forge-game/src/main/java/forge/game/GameLogFormatter.java -text forge-game/src/main/java/forge/game/GameObject.java -text forge-game/src/main/java/forge/game/GameOutcome.java -text +forge-game/src/main/java/forge/game/GameRules.java -text forge-game/src/main/java/forge/game/GameStage.java -text forge-game/src/main/java/forge/game/GameType.java -text forge-game/src/main/java/forge/game/GlobalRuleChange.java -text @@ -15207,7 +15207,6 @@ forge-gui/src/main/html/js/socket.js -text forge-gui/src/main/java/forge/FThreads.java -text forge-gui/src/main/java/forge/ImageCache.java svneol=native#text/plain forge-gui/src/main/java/forge/ImageLoader.java -text -forge-gui/src/main/java/forge/PreferencesProvider.java -text forge-gui/src/main/java/forge/Singletons.java svneol=native#text/plain forge-gui/src/main/java/forge/control/ChatArea.java -text forge-gui/src/main/java/forge/control/FControl.java -text diff --git a/forge-game/src/main/java/forge/Dependencies.java b/forge-game/src/main/java/forge/Dependencies.java deleted file mode 100644 index 6d5b0cd80b3..00000000000 --- a/forge-game/src/main/java/forge/Dependencies.java +++ /dev/null @@ -1,10 +0,0 @@ -package forge; - -public class Dependencies { - - public static PreferencesMethods preferences; - public interface PreferencesMethods { - @Deprecated public abstract boolean getCloneModeSource(); - @Deprecated public abstract boolean isManaBurnEnabled(); - } -} \ No newline at end of file diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 193260439f2..965f3247a11 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -57,7 +57,7 @@ import forge.util.Aggregates; * Represents the state of a single game, a new instance is created for each game. */ public class Game { - private final GameType type; + private final GameRules rules; private final List roIngamePlayers; private final List allPlayers; private final List ingamePlayers = new ArrayList(); @@ -89,8 +89,8 @@ public class Game { * Constructor. * @param match0 */ - public Game(List players0, GameType t, Match match0) { /* no more zones to map here */ - type = t; + public Game(List players0, GameRules rules, Match match0) { /* no more zones to map here */ + this.rules = rules; match = match0; List players = new ArrayList(); allPlayers = Collections.unmodifiableList(players); @@ -515,8 +515,8 @@ public class Game { /** * @return the type of game (Constructed/Limited/Planechase/etc...) */ - public GameType getType() { - return type; + public GameRules getRules() { + return rules; } /** diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index eb68bab4466..8aa3d53ad67 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -798,7 +798,7 @@ public class GameAction { } // Max: I don't know where to put this! - but since it's a state based action, it must be in check state effects - if (game.getType() == GameType.Archenemy) { + if (game.getRules().getGameType() == GameType.Archenemy) { game.archenemy904_10(); } @@ -1474,25 +1474,26 @@ public class GameAction { public void startGame(GameOutcome lastGameOutcome) { Player first = determineFirstTurnPlayer(lastGameOutcome); + GameType gameType = game.getRules().getGameType(); do { if (game.isGameOver()) { break; } // conceded during "play or draw" // FControl should determine now if there are any human players. // Where there are none, it should bring up speed controls - game.fireEvent(new GameEventGameStarted(game.getType(), first, game.getPlayers())); + game.fireEvent(new GameEventGameStarted(gameType, first, game.getPlayers())); game.setAge(GameStage.Mulligan); for (final Player p1 : game.getPlayers()) { p1.drawCards(p1.getMaxHandSize()); } - performMulligans(first, game.getType() == GameType.Commander); + performMulligans(first, gameType == GameType.Commander); if (game.isGameOver()) { break; } // conceded during "mulligan" prompt game.setAge(GameStage.Play); // - if (game.getType() == GameType.Planechase) { + if (gameType == GameType.Planechase) { first.initPlane(); } @@ -1515,7 +1516,7 @@ public class GameAction { Player goesFirst = null; // 904.6: in Archenemy games the Archenemy goes first - if (game != null && game.getType() == GameType.Archenemy) { + if (game != null && game.getRules().getGameType() == GameType.Archenemy) { for (Player p : game.getPlayers()) { if (p.isArchenemy()) { return p; diff --git a/forge-game/src/main/java/forge/game/GameRules.java b/forge-game/src/main/java/forge/game/GameRules.java new file mode 100644 index 00000000000..216597d2f6f --- /dev/null +++ b/forge-game/src/main/java/forge/game/GameRules.java @@ -0,0 +1,67 @@ +package forge.game; + +public class GameRules { + private GameType gameType; + private boolean manaBurn; + private int poisonCountersToLose = 10; // is commonly 10, but turns into 15 for 2HG + private int gamesPerMatch = 3; + private int gamesToWinMatch = 2; + private boolean playForAnte = false; + + public GameRules(GameType type) { + this.gameType = type; + } + + public GameType getGameType() { + return gameType; + } + + /** + * @return the manaBurn + */ + public boolean hasManaBurn() { + return manaBurn; + } + /** + * @param manaBurn the manaBurn to set + */ + public void setManaBurn(boolean manaBurn) { + this.manaBurn = manaBurn; + } + /** + * @return the poisonCountersToLose + */ + public int getPoisonCountersToLose() { + return poisonCountersToLose; + } + /** + * @param poisonCountersToLose the poisonCountersToLose to set + */ + public void setPoisonCountersToLose(int amount) { + this.poisonCountersToLose = amount; + } + + public int getGamesPerMatch() { + return gamesPerMatch; + } + + public void setGamesPerMatch(int gamesPerMatch) { + this.gamesPerMatch = gamesPerMatch; + this.gamesToWinMatch = (int)Math.ceil((gamesPerMatch+1)/2); + } + + public boolean useAnte() { + return playForAnte; + } + + public void setPlayForAnte(boolean useAnte) { + this.playForAnte = useAnte; + } + + public int getGamesToWinMatch() { + return gamesToWinMatch; + } + + // it's a preference, not rule... but I could hardly find a better place for it + public boolean canCloneUseTargetsImage; +} diff --git a/forge-game/src/main/java/forge/game/Match.java b/forge-game/src/main/java/forge/game/Match.java index 206fe35ec1f..36ebc48d28a 100644 --- a/forge-game/src/main/java/forge/game/Match.java +++ b/forge-game/src/main/java/forge/game/Match.java @@ -33,29 +33,19 @@ import forge.util.MyRandom; public class Match { private final List players; - private final GameType gameType; - - private int gamesPerMatch = 3; - private int gamesToWinMatch = 2; - - private final boolean useAnte; + private final GameRules rules; private final List gamesPlayed = new ArrayList(); private final List gamesPlayedRo; - public Match(GameType type, List players0, boolean useAnte) { - this(type, players0, useAnte, 3); - } - - public Match(GameType type, List players0, boolean useAnte, int games) { - gameType = type; + public Match(GameRules rules, List players0) { gamesPlayedRo = Collections.unmodifiableList(gamesPlayed); players = Collections.unmodifiableList(Lists.newArrayList(players0)); + this.rules = rules; + } - gamesPerMatch = games; - gamesToWinMatch = (int)Math.ceil((gamesPerMatch+1)/2); - - this.useAnte = useAnte; + public GameRules getRules() { + return rules; } /** @@ -67,15 +57,6 @@ public class Match { return this.gamesPlayedRo; } - /** @return int */ - public int getGamesPerMatch() { - return gamesPerMatch; - } - - /** @return int */ - public int getGamesToWinMatch() { - return gamesToWinMatch; - } public void addGamePlayed(Game finished) { if (!finished.isGameOver()) { @@ -88,7 +69,7 @@ public class Match { * TODO: Write javadoc for this method. */ public Game createGame() { - Game game = new Game(players, gameType, this); + Game game = new Game(players, rules, this); return game; } @@ -103,7 +84,7 @@ public class Match { @Override public void run() { prepareAllZones(game); - if (useAnte) { // Deciding which cards go to ante + if (rules.useAnte()) { // Deciding which cards go to ante Multimap list = game.chooseCardsForAnte(); for (Entry kv : list.entries()) { Player p = kv.getKey(); @@ -116,7 +97,7 @@ public class Match { GameOutcome lastOutcome = gamesPlayed.isEmpty() ? null : gamesPlayed.get(gamesPlayed.size() - 1); game.getAction().startGame(lastOutcome); - if (useAnte) { + if (rules.useAnte()) { executeAnte(game); } @@ -141,15 +122,6 @@ public class Match { gamesPlayed.remove(gamesPlayed.size() - 1); } - /** - * TODO: Write javadoc for this method. - * - * @return - */ - public GameType getGameType() { - return gameType; - } - public Iterable getOutcomes() { return gamesPlayedRo; } @@ -174,11 +146,11 @@ public class Match { } for (int score : victories) { - if (score >= gamesToWinMatch) { + if (score >= rules.getGamesToWinMatch()) { return true; } } - return gamesPlayed.size() >= gamesPerMatch; + return gamesPlayed.size() >= rules.getGamesPerMatch(); } /** @@ -204,7 +176,7 @@ public class Match { * @return */ public boolean isWonBy(LobbyPlayer questPlayer) { - return getGamesWonBy(questPlayer) >= gamesToWinMatch; + return getGamesWonBy(questPlayer) >= rules.getGamesToWinMatch(); } public List getPlayers() { @@ -261,9 +233,8 @@ public class Match { Multimap rAICards = HashMultimap.create(); Multimap removedAnteCards = ArrayListMultimap.create(); - GameType gameType = game.getType(); boolean isFirstGame = game.getMatch().getPlayedGames().isEmpty(); - boolean canSideBoard = !isFirstGame && gameType.isSideboardingAllowed(); + boolean canSideBoard = !isFirstGame && rules.getGameType().isSideboardingAllowed(); final List playersConditions = game.getMatch().getPlayers(); for (int i = 0; i < playersConditions.size(); i++) { @@ -274,7 +245,7 @@ public class Match { if (canSideBoard) { Deck toChange = psc.getDeck(); - List newMain = player.getController().sideboard(toChange, gameType); + List newMain = player.getController().sideboard(toChange, rules.getGameType()); if (null != newMain) { CardPool allCards = new CardPool(); allCards.addAll(toChange.get(DeckSection.Main)); @@ -292,7 +263,7 @@ public class Match { Deck myDeck = psc.getDeck(); Set myRemovedAnteCards = null; - if (!useAnte) { + if (!rules.useAnte()) { myRemovedAnteCards = getRemovedAnteCards(myDeck); for (PaperCard cp: myRemovedAnteCards) { for (Entry ds : myDeck) { @@ -321,8 +292,7 @@ public class Match { } } - boolean isLimitedGame = GameType.Quest == game.getType() || GameType.Sealed == game.getType() || GameType.Draft == game.getType(); - if (!rAICards.isEmpty() && !isLimitedGame) { + if (!rAICards.isEmpty() && !rules.getGameType().isCardpoolLimited()) { game.getAction().revealAnte("AI can't play these cards well", rAICards); } @@ -405,7 +375,7 @@ public class Match { outcome.anteResult.put(fromGame, GameOutcome.AnteResult.won(losses)); } - if (gameType.canAddWonCardsMidgame()) { + if (rules.getGameType().canAddWonCardsMidgame()) { // But only certain game types lets you swap midgame List chosen = fromGame.getController().chooseCardsYouWonToAddToDeck(losses); if (null != chosen) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index d01585ee193..cea20b280af 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import forge.Command; -import forge.Dependencies; import forge.card.CardCharacteristicName; import forge.game.Game; import forge.game.ability.AbilityUtils; @@ -84,7 +83,7 @@ public class CloneEffect extends SpellAbilityEffect { } // determine the image to be used for the clone - String imageFileName = Dependencies.preferences.getCloneModeSource() ? tgtCard.getImageKey() : cardToCopy.getImageKey(); + String imageFileName = cardToCopy.getGame().getRules().canCloneUseTargetsImage ? tgtCard.getImageKey() : cardToCopy.getImageKey(); if (sa.hasParam("ImageSource")) { // Allow the image to be stipulated by using a defined card source List cloneImgSources = AbilityUtils.getDefinedCards(host, sa.getParam("ImageSource"), sa); if (!cloneImgSources.isEmpty()) { diff --git a/forge-game/src/main/java/forge/game/cost/CostAddMana.java b/forge-game/src/main/java/forge/game/cost/CostAddMana.java index 1c5cbefabf3..1abf765019a 100644 --- a/forge-game/src/main/java/forge/game/cost/CostAddMana.java +++ b/forge-game/src/main/java/forge/game/cost/CostAddMana.java @@ -71,7 +71,7 @@ public class CostAddMana extends CostPart { Card source = sa.getSourceCard(); ColorSet cid = null; - if (ai.getGame().getType() == GameType.Commander) { + if (ai.getGame().getRules().getGameType() == GameType.Commander) { cid = ai.getCommander().getRules().getColorIdentity(); } ArrayList manaProduced = new ArrayList(); diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index bb56a4b7830..e8670a12db3 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -28,7 +28,6 @@ import org.apache.commons.lang3.time.StopWatch; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; -import forge.Dependencies; import forge.card.mana.ManaCost; import forge.game.GameEntity; import forge.game.GameStage; @@ -434,14 +433,14 @@ public class PhaseHandler implements java.io.Serializable { for (Player p : game.getPlayers()) { int burn = p.getManaPool().clearPool(true); - boolean dealDamage = Dependencies.preferences.isManaBurnEnabled(); - - if (dealDamage) { + + boolean manaBurns = game.getRules().hasManaBurn(); + if (manaBurns) { p.loseLife(burn); } // Play the Mana Burn sound if (burn > 0) { - game.fireEvent(new GameEventManaBurn(burn, dealDamage)); + game.fireEvent(new GameEventManaBurn(burn, manaBurns)); } } @@ -752,7 +751,7 @@ public class PhaseHandler implements java.io.Serializable { Player next = getNextActivePlayer(); - if (game.getType() == GameType.Planechase) { + if (game.getRules().getGameType() == GameType.Planechase) { for (Card p :game.getActivePlanes()) { if (p != null) { p.setController(next, 0); diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 910a8b323da..7091bf7137e 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -2170,7 +2170,7 @@ public class Player extends GameEntity implements Comparable { return this.loseConditionMet(GameLossReason.Poisoned, null); } - if(game.getType() == GameType.Commander) + if(game.getRules().getGameType() == GameType.Commander) { Map cmdDmg = getCommanderDamage(); for(Card c : cmdDmg.keySet()) diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index 05334882970..0ffdc7ae759 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -131,7 +131,7 @@ public class AbilityManaPart implements java.io.Serializable { } ColorSet CID = null; - if (player.getGame().getType() == GameType.Commander) { + if (player.getGame().getRules().getGameType() == GameType.Commander) { CID = player.getCommander().getRules().getColorIdentity(); } //clear lastProduced diff --git a/forge-gui/src/main/java/forge/PreferencesProvider.java b/forge-gui/src/main/java/forge/PreferencesProvider.java deleted file mode 100644 index 841611327f4..00000000000 --- a/forge-gui/src/main/java/forge/PreferencesProvider.java +++ /dev/null @@ -1,16 +0,0 @@ -package forge; - -import forge.properties.ForgePreferences.FPref; - -public class PreferencesProvider implements Dependencies.PreferencesMethods { - @Override - public boolean getCloneModeSource() { - return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_CLONE_MODE_SOURCE); - } - - @Override - public boolean isManaBurnEnabled() { - // TODO Auto-generated method stub - return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MANABURN); - } -} \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/control/FControl.java b/forge-gui/src/main/java/forge/control/FControl.java index 9086b79eaf7..e5c8d0aab22 100644 --- a/forge-gui/src/main/java/forge/control/FControl.java +++ b/forge-gui/src/main/java/forge/control/FControl.java @@ -42,6 +42,7 @@ import forge.ImageCache; import forge.Singletons; import forge.control.KeyboardShortcuts.Shortcut; import forge.game.Game; +import forge.game.GameRules; import forge.game.GameType; import forge.game.Match; import forge.game.card.Card; @@ -452,7 +453,7 @@ public enum FControl implements KeyEventDispatcher { private final FControlGameEventHandler fcVisitor = new FControlGameEventHandler(this); private final FControlGamePlayback playbackControl = new FControlGamePlayback(this); private void attachToGame(Game game0) { - if (game0.getType() == GameType.Quest) { + if (game0.getRules().getGameType() == GameType.Quest) { QuestController qc = Singletons.getModel().getQuest(); // Reset new list when the Match round starts, not when each game starts if (game0.getMatch().getPlayedGames().isEmpty()) { @@ -557,14 +558,17 @@ public enum FControl implements KeyEventDispatcher { } } - public void startMatch(GameType gameType, List starter) { + public void startMatch(GameType gameType, List players) { boolean useRandomFoil = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL); - for(RegisteredPlayer rp : starter) { + for(RegisteredPlayer rp : players) { rp.setRandomFoil(useRandomFoil); } - - boolean useAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); - final Match mc = new Match(gameType, starter, useAnte); + + GameRules rules = new GameRules(gameType); + rules.setPlayForAnte(Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE)); + rules.setManaBurn(Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MANABURN)); + rules.canCloneUseTargetsImage = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_CLONE_MODE_SOURCE); + final Match mc = new Match(rules, players); SOverlayUtils.startGameOverlay(); SOverlayUtils.showOverlay(); FThreads.invokeInEdtLater(new Runnable(){ diff --git a/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java b/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java index 56f0300c78f..56c16886324 100644 --- a/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java +++ b/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java @@ -445,7 +445,7 @@ public final class GuiDisplayUtil { public static void devModePlaneswalkTo() { final Game game = getGame(); - if (game.getMatch().getGameType() != GameType.Planechase) { return; } + if (game.getRules().getGameType() != GameType.Planechase) { return; } final Player p = game.getPhaseHandler().getPlayerTurn(); final List allPlanars = new ArrayList(); diff --git a/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index d4fae8d811e..5fe2ef39ff3 100644 --- a/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/forge-gui/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -13,6 +13,7 @@ import forge.FThreads; import forge.Singletons; import forge.card.CardEdition; import forge.deck.Deck; +import forge.game.GameRules; import forge.game.GameType; import forge.game.Match; import forge.game.player.LobbyPlayer; @@ -456,7 +457,12 @@ public class SSubmenuQuestUtil { boolean useAnte = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); if(forceAnte != null) useAnte = forceAnte.booleanValue(); - final Match mc = new Match(GameType.Quest, starter, useAnte, qData.getCharmState() ? 5 : 3); + GameRules rules = new GameRules(GameType.Quest); + rules.setPlayForAnte(useAnte); + rules.setGamesPerMatch(qData.getCharmState() ? 5 : 3); + rules.setManaBurn(Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MANABURN)); + rules.canCloneUseTargetsImage = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_CLONE_MODE_SOURCE); + final Match mc = new Match(rules, starter); FThreads.invokeInEdtLater(new Runnable(){ @Override public void run() { diff --git a/forge-gui/src/main/java/forge/gui/match/VMatchUI.java b/forge-gui/src/main/java/forge/gui/match/VMatchUI.java index 2cea990ca94..1bba6d1b400 100644 --- a/forge-gui/src/main/java/forge/gui/match/VMatchUI.java +++ b/forge-gui/src/main/java/forge/gui/match/VMatchUI.java @@ -102,7 +102,7 @@ public enum VMatchUI implements IVTopLevelUI { } } - if (Singletons.getControl().getObservedGame().getType().isCommandZoneNeeded()) { + if (Singletons.getControl().getObservedGame().getRules().getGameType().isCommandZoneNeeded()) { // Add extra players alternatively to existing user/AI field panels. for (int i = 2; i < lstCommands.size(); i++) { // If already in layout, no need to add again. diff --git a/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java b/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java index c808a7b5935..be45c9bfc21 100644 --- a/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java +++ b/forge-gui/src/main/java/forge/gui/match/ViewWinLose.java @@ -60,7 +60,7 @@ public class ViewWinLose { // Control of the win/lose is handled differently for various game // modes. ControlWinLose control = null; - switch (game0.getType()) { + switch (game0.getRules().getGameType()) { case Quest: control = new QuestWinLose(this, game0); break; diff --git a/forge-gui/src/main/java/forge/gui/match/controllers/CPrompt.java b/forge-gui/src/main/java/forge/gui/match/controllers/CPrompt.java index 33828536fe8..3c891fb937b 100644 --- a/forge-gui/src/main/java/forge/gui/match/controllers/CPrompt.java +++ b/forge-gui/src/main/java/forge/gui/match/controllers/CPrompt.java @@ -29,6 +29,7 @@ import javax.swing.JButton; import forge.Command; import forge.FThreads; import forge.game.Game; +import forge.game.GameRules; import forge.game.Match; import forge.gui.InputProxy; import forge.gui.framework.ICDoc; @@ -120,9 +121,10 @@ public enum CPrompt implements ICDoc { public void updateText(Game game) { FThreads.assertExecutedByEdt(true); final Match match = game.getMatch(); - final String text = String.format("T:%d G:%d/%d [%s]", game.getPhaseHandler().getTurn(), match.getPlayedGames().size() + 1, match.getGamesPerMatch(), match.getGameType()); + final GameRules rules = game.getRules(); + final String text = String.format("T:%d G:%d/%d [%s]", game.getPhaseHandler().getTurn(), match.getPlayedGames().size() + 1, rules.getGamesPerMatch(), rules.getGameType()); view.getLblGames().setText(text); - view.getLblGames().setToolTipText(String.format("%s: Game #%d of %d, turn %d", match.getGameType(), match.getPlayedGames().size() + 1, match.getGamesPerMatch(), game.getPhaseHandler().getTurn())); + view.getLblGames().setToolTipText(String.format("%s: Game #%d of %d, turn %d", rules.getGameType(), match.getPlayedGames().size() + 1, rules.getGamesPerMatch(), game.getPhaseHandler().getTurn())); } @Override diff --git a/forge-gui/src/main/java/forge/gui/match/views/VPlayers.java b/forge-gui/src/main/java/forge/gui/match/views/VPlayers.java index 50ad0e6660a..41428eb3c1f 100644 --- a/forge-gui/src/main/java/forge/gui/match/views/VPlayers.java +++ b/forge-gui/src/main/java/forge/gui/match/views/VPlayers.java @@ -173,7 +173,7 @@ public enum VPlayers implements IVDoc { } temp[6].setText(sb.toString()); } - if(p0.getGame().getType() == GameType.Commander) { + if(p0.getGame().getRules().getGameType() == GameType.Commander) { temp[7].setText(CardFactoryUtil.getCommanderInfo(p0)); } } diff --git a/forge-gui/src/main/java/forge/net/FServer.java b/forge-gui/src/main/java/forge/net/FServer.java index da93c0eb939..a83b2a098ca 100644 --- a/forge-gui/src/main/java/forge/net/FServer.java +++ b/forge-gui/src/main/java/forge/net/FServer.java @@ -14,6 +14,7 @@ import forge.Singletons; import forge.deck.Deck; import forge.game.Game; import forge.game.GameLogEntry; +import forge.game.GameRules; import forge.game.GameType; import forge.game.Match; import forge.game.player.LobbyPlayer; @@ -88,8 +89,8 @@ public enum FServer { List pp = new ArrayList(); pp.add(new RegisteredPlayer(d1).setPlayer(FServer.instance.getLobby().getAiPlayer("Ai-" + d1.getName()))); pp.add(new RegisteredPlayer(d2).setPlayer(FServer.instance.getLobby().getAiPlayer("Ai_" + d2.getName()))); - - Match mc = new Match(GameType.Constructed, pp, false); + GameRules rules = new GameRules(GameType.Constructed); + Match mc = new Match(rules, pp); for(int iGame = 0; iGame < nGames; iGame++) simulateSingleMatch(mc, iGame); System.out.flush(); diff --git a/forge-gui/src/main/java/forge/view/Main.java b/forge-gui/src/main/java/forge/view/Main.java index 8d0e6a96535..dde2f4cff33 100644 --- a/forge-gui/src/main/java/forge/view/Main.java +++ b/forge-gui/src/main/java/forge/view/Main.java @@ -17,7 +17,6 @@ */ package forge.view; -import forge.PreferencesProvider; import forge.Singletons; import forge.net.FServer; @@ -34,8 +33,6 @@ public final class Main { //Turn off the Java 2D system's use of Direct3D to improve rendering speed (particularly when Full Screen) System.setProperty("sun.java2d.d3d", "false"); - - forge.Dependencies.preferences = new PreferencesProvider(); // Start splash screen first, then data models, then controller. if (args.length == 0) { diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java index ae58164e772..5a7b360d514 100644 --- a/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java +++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/GameWrapper.java @@ -13,6 +13,7 @@ import forge.game.GameLog; import forge.game.GameLogEntry; import forge.game.GameLogEntryType; import forge.game.GameLogFormatter; +import forge.game.GameRules; import forge.game.GameStage; import forge.game.GameType; import forge.game.Match; @@ -69,8 +70,10 @@ public class GameWrapper { registeredPlayers.add( registeredPlayer ); } - boolean an = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE); - Match match = new Match( GameType.Constructed, registeredPlayers, an); + GameRules rules = new GameRules(GameType.Constructed); + rules.setPlayForAnte(Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_ANTE)); + rules.setManaBurn(Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MANABURN)); + Match match = new Match(rules, registeredPlayers); game = match.createGame(); game.subscribeToEvents( new GameLogFormatter( gameLog ) );