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 ) );