From 2ab06b5798df71fb1e3c3035dfc4aec7970360eb Mon Sep 17 00:00:00 2001
From: Maxmtg
Date: Sat, 25 May 2013 06:47:03 +0000
Subject: [PATCH] Moved game-to-ui binding to FControl CMessage binds to game
---
src/main/java/forge/control/FControl.java | 69 +++++++++++++++----
src/main/java/forge/game/MatchController.java | 51 +-------------
src/main/java/forge/game/phase/Upkeep.java | 9 ++-
src/main/java/forge/gui/GuiDisplayUtil.java | 2 +-
.../forge/gui/match/TargetingOverlay.java | 2 +-
.../forge/gui/match/controllers/CMessage.java | 10 +--
6 files changed, 70 insertions(+), 73 deletions(-)
diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java
index d0ef57ec066..5e406d6e3ea 100644
--- a/src/main/java/forge/control/FControl.java
+++ b/src/main/java/forge/control/FControl.java
@@ -32,20 +32,31 @@ import javax.swing.UIManager;
import javax.swing.WindowConstants;
import forge.Card;
+import forge.Constant.Preferences;
import forge.Singletons;
import forge.control.KeyboardShortcuts.Shortcut;
-import forge.game.MatchController;
+import forge.game.GameState;
import forge.game.ai.AiProfileUtil;
+import forge.game.player.LobbyPlayer;
import forge.game.player.Player;
import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.VDeckEditorUI;
+import forge.gui.framework.EDocID;
+import forge.gui.framework.SDisplayUtil;
import forge.gui.framework.SOverflowUtil;
import forge.gui.framework.SResizingUtil;
import forge.gui.home.CHomeUI;
import forge.gui.home.VHomeUI;
+import forge.gui.match.CMatchUI;
import forge.gui.match.VMatchUI;
+import forge.gui.match.controllers.CCombat;
import forge.gui.match.controllers.CDock;
+import forge.gui.match.controllers.CLog;
+import forge.gui.match.controllers.CMessage;
+import forge.gui.match.controllers.CStack;
+import forge.gui.match.nonsingleton.VField;
+import forge.gui.match.views.VAntes;
import forge.gui.toolbox.CardFaceSymbols;
import forge.gui.toolbox.FSkin;
import forge.net.NetServer;
@@ -114,7 +125,7 @@ public enum FControl {
public void windowClosing(final WindowEvent e) {
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
- if (!getMatch().getCurrentGame().isGameOver())
+ if (!FControl.this.game.isGameOver())
CDock.SINGLETON_INSTANCE.concede();
else {
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
@@ -298,11 +309,8 @@ public enum FControl {
}
public boolean mayShowCard(Card c) {
- if (match == null) {
- return true;
- }
-
- Player p = match.getCurrentGame().getPhaseHandler().getPriorityPlayer();
+ if ( game == null ) return true;
+ Player p = game.getPhaseHandler().getPriorityPlayer();
return c.canBeShownTo(p);
}
@@ -324,11 +332,48 @@ public enum FControl {
return server;
}
- private MatchController match;
- public MatchController getMatch() {
- return match;
+ private GameState game;
+ public GameState getObservedGame() {
+ return game;
}
- public void setMatch(MatchController newMatch) {
- match = newMatch;
+
+ public void attachToGame(GameState game0) {
+ // TODO: Detach from other game we might be looking at
+
+ this.game = game0;
+ game.getEvents().register(Singletons.getControl().getSoundSystem());
+
+ LobbyPlayer humanLobbyPlayer = getLobby().getGuiPlayer();
+ // The UI controls should use these game data as models
+ CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
+ CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer);
+ CStack.SINGLETON_INSTANCE.setModel(game.getStack(), humanLobbyPlayer);
+ CLog.SINGLETON_INSTANCE.setModel(game.getGameLog());
+ CCombat.SINGLETON_INSTANCE.setModel(game);
+ CMessage.SINGLETON_INSTANCE.setModel(game);
+
+
+ Singletons.getModel().getPreferences().actuateMatchPreferences();
+ Singletons.getControl().changeState(Screens.MATCH_SCREEN);
+ SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
+
+ CMessage.SINGLETON_INSTANCE.getInputControl().setGame(game);
+
+ // models shall notify controllers of changes
+
+ game.getStack().addObserver(CStack.SINGLETON_INSTANCE);
+ game.getGameLog().addObserver(CLog.SINGLETON_INSTANCE);
+ // some observers were set in CMatchUI.initMatch
+
+ // black magic still
+
+
+ VAntes.SINGLETON_INSTANCE.setModel(game.getRegisteredPlayers());
+
+ for (final VField field : VMatchUI.SINGLETON_INSTANCE.getFieldViews()) {
+ field.getLblLibrary().setHoverable(Preferences.DEV_MODE);
+ }
+
+ // per player observers were set in CMatchUI.SINGLETON_INSTANCE.initMatch
}
}
diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java
index 99f3c1891c3..819e4667a9d 100644
--- a/src/main/java/forge/game/MatchController.java
+++ b/src/main/java/forge/game/MatchController.java
@@ -10,7 +10,6 @@ import org.apache.commons.lang3.tuple.Pair;
import com.google.common.collect.Lists;
-import forge.Constant.Preferences;
import forge.FThreads;
import forge.Singletons;
import forge.control.FControl;
@@ -20,18 +19,10 @@ import forge.game.event.FlipCoinEvent;
import forge.game.player.LobbyPlayer;
import forge.game.player.Player;
import forge.game.player.PlayerStatistics;
-import forge.gui.framework.EDocID;
import forge.gui.framework.SDisplayUtil;
import forge.gui.match.CMatchUI;
-import forge.gui.match.VMatchUI;
import forge.gui.match.ViewWinLose;
-import forge.gui.match.controllers.CCombat;
-import forge.gui.match.controllers.CDock;
-import forge.gui.match.controllers.CLog;
-import forge.gui.match.controllers.CMessage;
-import forge.gui.match.controllers.CStack;
import forge.gui.match.nonsingleton.VField;
-import forge.gui.match.views.VAntes;
import forge.properties.ForgePreferences.FPref;
import forge.util.MyRandom;
@@ -142,7 +133,7 @@ public class MatchController {
currentGame = new GameState(players, gameType, this);
try {
- attachUiToMatch(this, FControl.SINGLETON_INSTANCE.getLobby().getGuiPlayer());
+ FControl.SINGLETON_INSTANCE.attachToGame(currentGame);
final boolean canRandomFoil = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL) && gameType == GameType.Constructed;
GameNew.newGame(currentGame, canRandomFoil, this.useAnte);
@@ -174,46 +165,6 @@ public class MatchController {
});
}
- public static void attachUiToMatch(MatchController match, LobbyPlayer humanLobbyPlayer) {
- FControl.SINGLETON_INSTANCE.setMatch(match);
-
- GameState game = match.getCurrentGame();
- game.getEvents().register(Singletons.getControl().getSoundSystem());
-
- // The UI controls should use these game data as models
- CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
- CDock.SINGLETON_INSTANCE.setModel(game, humanLobbyPlayer);
- CStack.SINGLETON_INSTANCE.setModel(game.getStack(), humanLobbyPlayer);
- CLog.SINGLETON_INSTANCE.setModel(game.getGameLog());
- CCombat.SINGLETON_INSTANCE.setModel(game);
- CMessage.SINGLETON_INSTANCE.setModel(match);
-
-
- Singletons.getModel().getPreferences().actuateMatchPreferences();
- Singletons.getControl().changeState(FControl.Screens.MATCH_SCREEN);
- SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
-
- CMessage.SINGLETON_INSTANCE.getInputControl().setGame(game);
-
- // models shall notify controllers of changes
-
- game.getStack().addObserver(CStack.SINGLETON_INSTANCE);
- game.getGameLog().addObserver(CLog.SINGLETON_INSTANCE);
- // some observers were set in CMatchUI.initMatch
-
- // black magic still
-
-
- VAntes.SINGLETON_INSTANCE.setModel(game.getRegisteredPlayers());
-
- for (final VField field : VMatchUI.SINGLETON_INSTANCE.getFieldViews()) {
- field.getLblLibrary().setHoverable(Preferences.DEV_MODE);
- }
-
- // per player observers were set in CMatchUI.SINGLETON_INSTANCE.initMatch
- }
-
-
public void clearGamesPlayed() {
gamesPlayed.clear();
}
diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java
index 0d4c3ba7449..ea5776ae852 100644
--- a/src/main/java/forge/game/phase/Upkeep.java
+++ b/src/main/java/forge/game/phase/Upkeep.java
@@ -37,7 +37,6 @@ import forge.card.spellability.AbilityManaPart;
import forge.card.spellability.AbilityStatic;
import forge.card.spellability.SpellAbility;
import forge.control.input.InputPayManaExecuteCommands;
-import forge.control.input.InputPayment;
import forge.control.input.InputSelectCards;
import forge.control.input.InputSelectCardsFromList;
import forge.game.GameState;
@@ -45,7 +44,6 @@ import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtilCost;
-import forge.game.ai.ComputerUtilMana;
import forge.game.player.HumanPlay;
import forge.game.player.Player;
import forge.game.player.PlayerActionConfirmMode;
@@ -520,12 +518,13 @@ public class Upkeep extends Phase {
* upkeepDemonicHordes.
*
*/
+ /*
private static void upkeepDemonicHordes(final GameState game) {
/*
* At the beginning of your upkeep, unless you pay BBB, tap Demonic
* Hordes and sacrifice a land of an opponent's choice.
- */
+ *-/
final Player player = game.getPhaseHandler().getPlayerTurn();
final List cards = player.getCardsIn(ZoneType.Battlefield, "Demonic Hordes");
@@ -563,7 +562,7 @@ public class Upkeep extends Phase {
@Override
public void resolve() {
if (game.getZoneOf(c).is(ZoneType.Battlefield)) {
- InputPayment inp = new InputPayManaExecuteCommands(cp, "Pay Demonic Hordes upkeep cost", cost.getPayCosts().getTotalMana() /*, true */);
+ InputPayment inp = new InputPayManaExecuteCommands(cp, "Pay Demonic Hordes upkeep cost", cost.getPayCosts().getTotalMana());
cp.getGame().getInputQueue().setInputAndWait(inp);
if ( !inp.isPaid() )
unpaidHordesAb.resolve();
@@ -597,7 +596,7 @@ public class Upkeep extends Phase {
} // end for loop
} // upkeepDemonicHordes
-
+*/
/**
*
* upkeepSuspend.
diff --git a/src/main/java/forge/gui/GuiDisplayUtil.java b/src/main/java/forge/gui/GuiDisplayUtil.java
index 2721e981144..73999c964af 100644
--- a/src/main/java/forge/gui/GuiDisplayUtil.java
+++ b/src/main/java/forge/gui/GuiDisplayUtil.java
@@ -692,7 +692,7 @@ public final class GuiDisplayUtil {
}
private static GameState getGame() {
- return Singletons.getControl().getMatch().getCurrentGame();
+ return Singletons.getControl().getObservedGame();
}
diff --git a/src/main/java/forge/gui/match/TargetingOverlay.java b/src/main/java/forge/gui/match/TargetingOverlay.java
index e1eddb8c44b..b7c5a9c1810 100644
--- a/src/main/java/forge/gui/match/TargetingOverlay.java
+++ b/src/main/java/forge/gui/match/TargetingOverlay.java
@@ -284,7 +284,7 @@ public enum TargetingOverlay {
@Override
public void paintComponent(final Graphics g) {
- final Combat combat = Singletons.getControl().getMatch().getCurrentGame().getCombat(); // this will get deprecated too
+ final Combat combat = Singletons.getControl().getObservedGame().getCombat(); // this will get deprecated too
// No need for this except in match view
if (FControl.SINGLETON_INSTANCE.getState() != FControl.Screens.MATCH_SCREEN) { return; }
diff --git a/src/main/java/forge/gui/match/controllers/CMessage.java b/src/main/java/forge/gui/match/controllers/CMessage.java
index 9ad5a643064..d196e7f0323 100644
--- a/src/main/java/forge/gui/match/controllers/CMessage.java
+++ b/src/main/java/forge/gui/match/controllers/CMessage.java
@@ -29,6 +29,7 @@ import java.util.Observer;
import javax.swing.JButton;
import forge.Command;
+import forge.game.GameState;
import forge.game.MatchController;
import forge.gui.InputProxy;
import forge.gui.framework.ICDoc;
@@ -70,7 +71,7 @@ public enum CMessage implements ICDoc, Observer {
}
}
};
- private MatchController match;
+ private GameState game;
private void _initButton(JButton button, ActionListener onClick) {
// remove to ensure listeners don't accumulate over many initializations
@@ -118,6 +119,7 @@ public enum CMessage implements ICDoc, Observer {
*/
@Override
public void update(Observable o, Object arg) {
+ MatchController match = game.getMatch();
view.getLblGames().setText(
match.getGameType().toString() + ": Game #"
+ (match.getPlayedGames().size() + 1)
@@ -140,9 +142,9 @@ public enum CMessage implements ICDoc, Observer {
* TODO: Write javadoc for this method.
* @param match
*/
- public void setModel(MatchController match0) {
- match = match0;
- match.getCurrentGame().getPhaseHandler().addObserver(this);
+ public void setModel(GameState game0) {
+ game = game0;
+ game.getPhaseHandler().addObserver(this);
update(null, null);
}
}