diff --git a/src/main/java/forge/card/ability/effects/RestartGameEffect.java b/src/main/java/forge/card/ability/effects/RestartGameEffect.java index 1d0572989c3..37f26c8a583 100644 --- a/src/main/java/forge/card/ability/effects/RestartGameEffect.java +++ b/src/main/java/forge/card/ability/effects/RestartGameEffect.java @@ -49,7 +49,7 @@ public class RestartGameEffect extends SpellAbilityEffect { playerLibraries.put(p, newLibrary); } - GameNew.restartGame(Singletons.getControl().getMatch(), game, sa.getActivatingPlayer(), playerLibraries); + GameNew.restartGame(game.getMatch(), game, sa.getActivatingPlayer(), playerLibraries); } /* (non-Javadoc) diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java index 5c76b092674..77723fc3e08 100644 --- a/src/main/java/forge/game/MatchController.java +++ b/src/main/java/forge/game/MatchController.java @@ -24,8 +24,6 @@ import forge.game.player.LobbyPlayer; import forge.game.player.LobbyPlayerHuman; import forge.game.player.Player; import forge.game.player.PlayerStatistics; -import forge.game.zone.ZoneType; -import forge.gui.InputProxy; import forge.gui.framework.EDocID; import forge.gui.framework.SDisplayUtil; import forge.gui.match.CMatchUI; @@ -186,23 +184,23 @@ public class MatchController { CStack.SINGLETON_INSTANCE.setModel(currentGame.getStack()); CLog.SINGLETON_INSTANCE.setModel(currentGame.getGameLog()); CCombat.SINGLETON_INSTANCE.setModel(currentGame); + CMessage.SINGLETON_INSTANCE.setModel(match); + Singletons.getModel().getPreferences().actuateMatchPreferences(); Singletons.getControl().changeState(FControl.Screens.MATCH_SCREEN); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); - InputProxy inputProxy = CMessage.SINGLETON_INSTANCE.getInputControl(); - inputProxy.setMatch(match); + CMessage.SINGLETON_INSTANCE.getInputControl().setMatch(match); // models shall notify controllers of changes - currentGame.getStack().addObserver(inputProxy); + currentGame.getStack().addObserver(CStack.SINGLETON_INSTANCE); - currentGame.getPhaseHandler().addObserver(inputProxy); currentGame.getGameLog().addObserver(CLog.SINGLETON_INSTANCE); // some observers were set in CMatchUI.initMatch // black magic still - match.getInput().addObserver(inputProxy); + VAntes.SINGLETON_INSTANCE.setModel(currentGame.getRegisteredPlayers()); @@ -211,7 +209,6 @@ public class MatchController { } // per player observers were set in CMatchUI.SINGLETON_INSTANCE.initMatch - CMessage.SINGLETON_INSTANCE.updateGameInfo(match); } /** diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 0a6a6a4e177..ac3b6a79c6b 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -246,6 +246,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { switch(this.getPhase()) { case UNTAP: //SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); + updateObservers(); PhaseUtil.handleUntap(game); break; diff --git a/src/main/java/forge/game/phase/PhaseUtil.java b/src/main/java/forge/game/phase/PhaseUtil.java index caef9c9bf1d..b5c7c7a86e7 100644 --- a/src/main/java/forge/game/phase/PhaseUtil.java +++ b/src/main/java/forge/game/phase/PhaseUtil.java @@ -26,7 +26,6 @@ import com.google.common.base.Predicate; import forge.Card; import forge.CardLists; import forge.CardPredicates.Presets; -import forge.Singletons; import forge.card.cost.Cost; import forge.card.mana.ManaCost; import forge.card.spellability.Ability; @@ -41,7 +40,6 @@ import forge.game.player.AIPlayer; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.match.CMatchUI; -import forge.gui.match.controllers.CMessage; import forge.gui.match.nonsingleton.VField.PhaseLabel; /** @@ -86,8 +84,6 @@ public class PhaseUtil { final PhaseHandler ph = game.getPhaseHandler(); final Player turn = ph.getPlayerTurn(); - CMessage.SINGLETON_INSTANCE.updateGameInfo(Singletons.getControl().getMatch()); - game.getCombat().reset(turn); // Tokens starting game in play should suffer from Sum. Sickness diff --git a/src/main/java/forge/gui/InputProxy.java b/src/main/java/forge/gui/InputProxy.java index 7cca53aed8c..aae8b0ce34c 100644 --- a/src/main/java/forge/gui/InputProxy.java +++ b/src/main/java/forge/gui/InputProxy.java @@ -45,8 +45,11 @@ public class InputProxy implements Observer { private static final boolean INPUT_DEBUG = false; - public void setMatch(MatchController matchController) { - match = matchController; + public void setMatch(MatchController match0) { + match = match0; + match.getCurrentGame().getStack().addObserver(this); + match.getCurrentGame().getPhaseHandler().addObserver(this); + match.getInput().addObserver(this); } @Override diff --git a/src/main/java/forge/gui/match/controllers/CMessage.java b/src/main/java/forge/gui/match/controllers/CMessage.java index ba32802f0b8..a220bbe0d10 100644 --- a/src/main/java/forge/gui/match/controllers/CMessage.java +++ b/src/main/java/forge/gui/match/controllers/CMessage.java @@ -23,6 +23,8 @@ import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.util.Observable; +import java.util.Observer; import javax.swing.JButton; @@ -38,7 +40,7 @@ import forge.gui.match.views.VMessage; * *

(C at beginning of class name denotes a control class.) */ -public enum CMessage implements ICDoc { +public enum CMessage implements ICDoc, Observer { /** */ SINGLETON_INSTANCE; @@ -67,6 +69,7 @@ public enum CMessage implements ICDoc { } } }; + private MatchController match; private void _initButton(JButton button, ActionListener onClick) { // remove to ensure listeners don't accumulate over many initializations @@ -96,17 +99,6 @@ public enum CMessage implements ICDoc { VMessage.SINGLETON_INSTANCE.getTarMessage().setText(s0); } - /** Updates counter label in message area. - * @param match - * @param gameState */ - public void updateGameInfo(MatchController match) { - VMessage.SINGLETON_INSTANCE.getLblGames().setText( - match.getGameType().toString() + ": Game #" - + (match.getPlayedGames().size() + 1) - + " of " + match.getGamesPerMatch() - + ", turn " + match.getCurrentGame().getPhaseHandler().getTurn()); - } - /** Flashes animation on input panel if play is currently waiting on input. */ public void remind() { SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE); @@ -120,6 +112,18 @@ public enum CMessage implements ICDoc { return null; } + /* (non-Javadoc) + * @see java.util.Observer#update(java.util.Observable, java.lang.Object) + */ + @Override + public void update(Observable o, Object arg) { + VMessage.SINGLETON_INSTANCE.getLblGames().setText( + match.getGameType().toString() + ": Game #" + + (match.getPlayedGames().size() + 1) + + " of " + match.getGamesPerMatch() + + ", turn " + match.getCurrentGame().getPhaseHandler().getTurn()); + } + /* (non-Javadoc) * @see forge.gui.framework.ICDoc#update() */ @@ -130,4 +134,14 @@ public enum CMessage implements ICDoc { lastFocusedButton.requestFocusInWindow(); } } + + /** + * TODO: Write javadoc for this method. + * @param match + */ + public void setModel(MatchController match0) { + match = match0; + match.getCurrentGame().getPhaseHandler().addObserver(this); + update(null, null); + } } diff --git a/src/main/java/forge/gui/match/views/VAntes.java b/src/main/java/forge/gui/match/views/VAntes.java index 37b88a7a488..cfe4026350f 100644 --- a/src/main/java/forge/gui/match/views/VAntes.java +++ b/src/main/java/forge/gui/match/views/VAntes.java @@ -18,7 +18,6 @@ package forge.gui.match.views; import java.awt.Dimension; -import java.util.Iterator; import java.util.Observable; import java.util.Observer; import java.util.SortedSet; @@ -172,11 +171,6 @@ public enum VAntes implements IVDoc, Observer { picPanel.setCard(c0); } - /** @return {@link forge.Card} */ - public Card getCard() { - return card; - } - @Override public int compareTo(AntePanel o) { return o.card.getUniqueNumber() - card.getUniqueNumber();