Moved game-to-ui binding to FControl

CMessage binds to game
This commit is contained in:
Maxmtg
2013-05-25 06:47:03 +00:00
parent 34522bd0bb
commit 2ab06b5798
6 changed files with 70 additions and 73 deletions

View File

@@ -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
}
}

View File

@@ -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();
}

View File

@@ -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.
* </p>
*/
/*
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<Card> 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
*/
/**
* <p>
* upkeepSuspend.

View File

@@ -692,7 +692,7 @@ public final class GuiDisplayUtil {
}
private static GameState getGame() {
return Singletons.getControl().getMatch().getCurrentGame();
return Singletons.getControl().getObservedGame();
}

View File

@@ -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; }

View File

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