diff --git a/src/main/java/forge/control/FControlGameEventHandler.java b/src/main/java/forge/control/FControlGameEventHandler.java index f15b3a3f490..7aa727a25d9 100644 --- a/src/main/java/forge/control/FControlGameEventHandler.java +++ b/src/main/java/forge/control/FControlGameEventHandler.java @@ -13,6 +13,7 @@ import forge.game.event.GameEventAnteCardsSelected; import forge.game.event.GameEventGameFinished; import forge.game.event.GameEventGameOutcome; import forge.game.event.GameEventPlayerControl; +import forge.game.event.GameEventTurnBegan; import forge.game.event.GameEventTurnPhase; import forge.game.event.IGameEventVisitor; import forge.game.phase.PhaseType; @@ -22,6 +23,7 @@ import forge.gui.SOverlayUtils; import forge.gui.match.CMatchUI; import forge.gui.match.VMatchUI; import forge.gui.match.ViewWinLose; +import forge.gui.match.controllers.CMessage; import forge.gui.match.nonsingleton.VHand; import forge.gui.match.nonsingleton.VField.PhaseLabel; @@ -56,6 +58,21 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { return null; } + private final AtomicBoolean turnUpdPlanned = new AtomicBoolean(false); + @Override + public Void visit(GameEventTurnBegan event) { + if ( turnUpdPlanned.getAndSet(true) ) return null; + + FThreads.invokeInEdtNowOrLater(new Runnable() { + @Override + public void run() { + turnUpdPlanned.set(false); + CMessage.SINGLETON_INSTANCE.updateText(); + } + }); + return null; + } + @Override public Void visit(GameEventAnteCardsSelected ev) { // Require EDT here? diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index 42f79b65868..afa1c03b0ea 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -44,7 +44,6 @@ import forge.gui.framework.SDisplayUtil; import forge.gui.match.CMatchUI; import forge.gui.match.nonsingleton.VField; import forge.properties.ForgePreferences.FPref; -import forge.util.MyObservable; /** @@ -55,7 +54,7 @@ import forge.util.MyObservable; * @author Forge * @version $Id: PhaseHandler.java 13001 2012-01-08 12:25:25Z Sloth $ */ -public class PhaseHandler extends MyObservable implements java.io.Serializable { +public class PhaseHandler implements java.io.Serializable { /** Constant serialVersionUID=5207222278370963197L. */ private static final long serialVersionUID = 5207222278370963197L; @@ -679,7 +678,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { setPlayerTurn(goesFirst); advanceToNextPhase(); onPhaseBegin(); - updateObservers(); + // don't even offer priority, because it's untap of 1st turn now givePriorityToPlayer = false; @@ -741,9 +740,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { // pass the priority to other player this.pPlayerPriority = nextPlayer; } - - updateObservers(); - + // If ever the karn's ultimate resolved if( game.getAge() == GameAge.RestartedByKarn) { phase = null; @@ -764,9 +761,12 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { // this is a hack for the setup game state mode, do not use outside of devSetupGameState code // as it avoids calling any of the phase effects that may be necessary in a less enforced context public final void devModeSet(final PhaseType phase0, final Player player0) { + if (null != phase0) this.phase = phase0; if (null != player0 ) setPlayerTurn(player0); + + game.fireEvent(new GameEventTurnPhase(this.getPlayerTurn(), this.getPhase(), "")); } /** diff --git a/src/main/java/forge/gui/GuiDisplayUtil.java b/src/main/java/forge/gui/GuiDisplayUtil.java index 371bfb868cb..7aae651ce9e 100644 --- a/src/main/java/forge/gui/GuiDisplayUtil.java +++ b/src/main/java/forge/gui/GuiDisplayUtil.java @@ -159,9 +159,8 @@ public final class GuiDisplayUtil { game.getTriggerHandler().clearSuppression(TriggerType.ChangesZone); - game.getAction().checkStateEffects(); - game.getPhaseHandler().updateObservers(); + for (Player p : game.getRegisteredPlayers()) { p.getZone(ZoneType.Battlefield).updateObservers(); } diff --git a/src/main/java/forge/gui/match/controllers/CMessage.java b/src/main/java/forge/gui/match/controllers/CMessage.java index ea91ba048cd..05a543f947d 100644 --- a/src/main/java/forge/gui/match/controllers/CMessage.java +++ b/src/main/java/forge/gui/match/controllers/CMessage.java @@ -23,12 +23,10 @@ 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; import forge.Command; +import forge.FThreads; import forge.game.Game; import forge.game.Match; import forge.gui.InputProxy; @@ -41,7 +39,7 @@ import forge.gui.match.views.VMessage; * *

(C at beginning of class name denotes a control class.) */ -public enum CMessage implements ICDoc, Observer { +public enum CMessage implements ICDoc { /** */ SINGLETON_INSTANCE; @@ -117,19 +115,14 @@ public enum CMessage implements ICDoc, Observer { /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ - @Override - public void update(Observable o, Object arg) { + + public void updateText() { + FThreads.assertExecutedByEdt(true); Match match = game.getMatch(); - view.getLblGames().setText( - match.getGameType().toString() + ": Game #" - + (match.getPlayedGames().size() + 1) - + " of " + match.getGamesPerMatch() - + ", turn " + match.getCurrentGame().getPhaseHandler().getTurn()); + String text = String.format("%s: Game #%d of %d, turn %d", match.getGameType(), match.getPlayedGames().size() + 1, match.getGamesPerMatch(), game.getPhaseHandler().getTurn()); + view.getLblGames().setText(text); } - /* (non-Javadoc) - * @see forge.gui.framework.ICDoc#update() - */ @Override public void update() { // set focus back to button that last had it @@ -138,13 +131,13 @@ public enum CMessage implements ICDoc, Observer { } } + /** * TODO: Write javadoc for this method. * @param match */ public void setModel(Game game0) { game = game0; - game.getPhaseHandler().addObserver(this); - update(null, null); + update(); } }