CMessage is not Observer, PhaseHandler is not a MyObservable

FControlGameEventHandler updates CMessage as events arrive
This commit is contained in:
Maxmtg
2013-06-01 22:40:23 +00:00
parent 7fae9ed8b8
commit f137ac390f
4 changed files with 33 additions and 24 deletions

View File

@@ -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<Void> {
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?

View File

@@ -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 <code>serialVersionUID=5207222278370963197L</code>. */
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(), ""));
}
/**

View File

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

View File

@@ -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;
*
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
*/
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();
}
}