mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Moved game-to-ui binding to FControl
CMessage binds to game
This commit is contained in:
@@ -32,20 +32,31 @@ import javax.swing.UIManager;
|
|||||||
import javax.swing.WindowConstants;
|
import javax.swing.WindowConstants;
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
|
import forge.Constant.Preferences;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.KeyboardShortcuts.Shortcut;
|
import forge.control.KeyboardShortcuts.Shortcut;
|
||||||
import forge.game.MatchController;
|
import forge.game.GameState;
|
||||||
import forge.game.ai.AiProfileUtil;
|
import forge.game.ai.AiProfileUtil;
|
||||||
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.deckeditor.CDeckEditorUI;
|
import forge.gui.deckeditor.CDeckEditorUI;
|
||||||
import forge.gui.deckeditor.VDeckEditorUI;
|
import forge.gui.deckeditor.VDeckEditorUI;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
import forge.gui.framework.SOverflowUtil;
|
import forge.gui.framework.SOverflowUtil;
|
||||||
import forge.gui.framework.SResizingUtil;
|
import forge.gui.framework.SResizingUtil;
|
||||||
import forge.gui.home.CHomeUI;
|
import forge.gui.home.CHomeUI;
|
||||||
import forge.gui.home.VHomeUI;
|
import forge.gui.home.VHomeUI;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.gui.match.VMatchUI;
|
import forge.gui.match.VMatchUI;
|
||||||
|
import forge.gui.match.controllers.CCombat;
|
||||||
import forge.gui.match.controllers.CDock;
|
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.CardFaceSymbols;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
import forge.net.NetServer;
|
import forge.net.NetServer;
|
||||||
@@ -114,7 +125,7 @@ public enum FControl {
|
|||||||
public void windowClosing(final WindowEvent e) {
|
public void windowClosing(final WindowEvent e) {
|
||||||
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||||
|
|
||||||
if (!getMatch().getCurrentGame().isGameOver())
|
if (!FControl.this.game.isGameOver())
|
||||||
CDock.SINGLETON_INSTANCE.concede();
|
CDock.SINGLETON_INSTANCE.concede();
|
||||||
else {
|
else {
|
||||||
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
||||||
@@ -298,11 +309,8 @@ public enum FControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean mayShowCard(Card c) {
|
public boolean mayShowCard(Card c) {
|
||||||
if (match == null) {
|
if ( game == null ) return true;
|
||||||
return true;
|
Player p = game.getPhaseHandler().getPriorityPlayer();
|
||||||
}
|
|
||||||
|
|
||||||
Player p = match.getCurrentGame().getPhaseHandler().getPriorityPlayer();
|
|
||||||
return c.canBeShownTo(p);
|
return c.canBeShownTo(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,11 +332,48 @@ public enum FControl {
|
|||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MatchController match;
|
private GameState game;
|
||||||
public MatchController getMatch() {
|
public GameState getObservedGame() {
|
||||||
return match;
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.Constant.Preferences;
|
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.FControl;
|
import forge.control.FControl;
|
||||||
@@ -20,18 +19,10 @@ import forge.game.event.FlipCoinEvent;
|
|||||||
import forge.game.player.LobbyPlayer;
|
import forge.game.player.LobbyPlayer;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerStatistics;
|
import forge.game.player.PlayerStatistics;
|
||||||
import forge.gui.framework.EDocID;
|
|
||||||
import forge.gui.framework.SDisplayUtil;
|
import forge.gui.framework.SDisplayUtil;
|
||||||
import forge.gui.match.CMatchUI;
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.gui.match.VMatchUI;
|
|
||||||
import forge.gui.match.ViewWinLose;
|
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.nonsingleton.VField;
|
||||||
import forge.gui.match.views.VAntes;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
@@ -142,7 +133,7 @@ public class MatchController {
|
|||||||
currentGame = new GameState(players, gameType, this);
|
currentGame = new GameState(players, gameType, this);
|
||||||
|
|
||||||
try {
|
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;
|
final boolean canRandomFoil = Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_RANDOM_FOIL) && gameType == GameType.Constructed;
|
||||||
GameNew.newGame(currentGame, canRandomFoil, this.useAnte);
|
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() {
|
public void clearGamesPlayed() {
|
||||||
gamesPlayed.clear();
|
gamesPlayed.clear();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import forge.card.spellability.AbilityManaPart;
|
|||||||
import forge.card.spellability.AbilityStatic;
|
import forge.card.spellability.AbilityStatic;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.InputPayManaExecuteCommands;
|
import forge.control.input.InputPayManaExecuteCommands;
|
||||||
import forge.control.input.InputPayment;
|
|
||||||
import forge.control.input.InputSelectCards;
|
import forge.control.input.InputSelectCards;
|
||||||
import forge.control.input.InputSelectCardsFromList;
|
import forge.control.input.InputSelectCardsFromList;
|
||||||
import forge.game.GameState;
|
import forge.game.GameState;
|
||||||
@@ -45,7 +44,6 @@ import forge.game.ai.ComputerUtil;
|
|||||||
import forge.game.ai.ComputerUtilCard;
|
import forge.game.ai.ComputerUtilCard;
|
||||||
import forge.game.ai.ComputerUtilCombat;
|
import forge.game.ai.ComputerUtilCombat;
|
||||||
import forge.game.ai.ComputerUtilCost;
|
import forge.game.ai.ComputerUtilCost;
|
||||||
import forge.game.ai.ComputerUtilMana;
|
|
||||||
import forge.game.player.HumanPlay;
|
import forge.game.player.HumanPlay;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.player.PlayerActionConfirmMode;
|
import forge.game.player.PlayerActionConfirmMode;
|
||||||
@@ -520,12 +518,13 @@ public class Upkeep extends Phase {
|
|||||||
* upkeepDemonicHordes.
|
* upkeepDemonicHordes.
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
private static void upkeepDemonicHordes(final GameState game) {
|
private static void upkeepDemonicHordes(final GameState game) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At the beginning of your upkeep, unless you pay BBB, tap Demonic
|
* At the beginning of your upkeep, unless you pay BBB, tap Demonic
|
||||||
* Hordes and sacrifice a land of an opponent's choice.
|
* Hordes and sacrifice a land of an opponent's choice.
|
||||||
*/
|
*-/
|
||||||
|
|
||||||
final Player player = game.getPhaseHandler().getPlayerTurn();
|
final Player player = game.getPhaseHandler().getPlayerTurn();
|
||||||
final List<Card> cards = player.getCardsIn(ZoneType.Battlefield, "Demonic Hordes");
|
final List<Card> cards = player.getCardsIn(ZoneType.Battlefield, "Demonic Hordes");
|
||||||
@@ -563,7 +562,7 @@ public class Upkeep extends Phase {
|
|||||||
@Override
|
@Override
|
||||||
public void resolve() {
|
public void resolve() {
|
||||||
if (game.getZoneOf(c).is(ZoneType.Battlefield)) {
|
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);
|
cp.getGame().getInputQueue().setInputAndWait(inp);
|
||||||
if ( !inp.isPaid() )
|
if ( !inp.isPaid() )
|
||||||
unpaidHordesAb.resolve();
|
unpaidHordesAb.resolve();
|
||||||
@@ -597,7 +596,7 @@ public class Upkeep extends Phase {
|
|||||||
} // end for loop
|
} // end for loop
|
||||||
|
|
||||||
} // upkeepDemonicHordes
|
} // upkeepDemonicHordes
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* upkeepSuspend.
|
* upkeepSuspend.
|
||||||
|
|||||||
@@ -692,7 +692,7 @@ public final class GuiDisplayUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static GameState getGame() {
|
private static GameState getGame() {
|
||||||
return Singletons.getControl().getMatch().getCurrentGame();
|
return Singletons.getControl().getObservedGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -284,7 +284,7 @@ public enum TargetingOverlay {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void paintComponent(final Graphics g) {
|
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
|
// No need for this except in match view
|
||||||
if (FControl.SINGLETON_INSTANCE.getState() != FControl.Screens.MATCH_SCREEN) { return; }
|
if (FControl.SINGLETON_INSTANCE.getState() != FControl.Screens.MATCH_SCREEN) { return; }
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.util.Observer;
|
|||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
import forge.game.GameState;
|
||||||
import forge.game.MatchController;
|
import forge.game.MatchController;
|
||||||
import forge.gui.InputProxy;
|
import forge.gui.InputProxy;
|
||||||
import forge.gui.framework.ICDoc;
|
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) {
|
private void _initButton(JButton button, ActionListener onClick) {
|
||||||
// remove to ensure listeners don't accumulate over many initializations
|
// remove to ensure listeners don't accumulate over many initializations
|
||||||
@@ -118,6 +119,7 @@ public enum CMessage implements ICDoc, Observer {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void update(Observable o, Object arg) {
|
public void update(Observable o, Object arg) {
|
||||||
|
MatchController match = game.getMatch();
|
||||||
view.getLblGames().setText(
|
view.getLblGames().setText(
|
||||||
match.getGameType().toString() + ": Game #"
|
match.getGameType().toString() + ": Game #"
|
||||||
+ (match.getPlayedGames().size() + 1)
|
+ (match.getPlayedGames().size() + 1)
|
||||||
@@ -140,9 +142,9 @@ public enum CMessage implements ICDoc, Observer {
|
|||||||
* TODO: Write javadoc for this method.
|
* TODO: Write javadoc for this method.
|
||||||
* @param match
|
* @param match
|
||||||
*/
|
*/
|
||||||
public void setModel(MatchController match0) {
|
public void setModel(GameState game0) {
|
||||||
match = match0;
|
game = game0;
|
||||||
match.getCurrentGame().getPhaseHandler().addObserver(this);
|
game.getPhaseHandler().addObserver(this);
|
||||||
update(null, null);
|
update(null, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user