package jrummikub.control.turn; import java.util.ArrayList; import java.util.List; import jrummikub.control.ITurnTimer; import jrummikub.control.TurnTimer; import jrummikub.model.GameSettings; import jrummikub.util.Connection; import jrummikub.util.Event; import jrummikub.util.IEvent; import jrummikub.util.IListener; import jrummikub.view.IView; /** * Abstract base class for TurnControls */ public abstract class AbstractTurnControl implements ITurnControl { protected Event endOfTurnEvent = new Event(); protected Event redealEvent = new Event(); protected TurnInfo turnInfo; protected GameSettings settings; protected IView view; protected ITurnTimer timer; protected List connections = new ArrayList(); @Override public IEvent getEndOfTurnEvent() { return endOfTurnEvent; } @Override public IEvent getRedealEvent() { return redealEvent; } private void pauseTurn() { timer.stopTimer(); view.enablePauseMode(true); } private void resumeTurn() { timer.startTimer(); view.enablePauseMode(false); } protected abstract void timeOut(); @Override public void setup(TurnInfo info, GameSettings settings, IView view) { turnInfo = info; this.settings = settings; this.view = view; if (timer == null) { timer = new TurnTimer(view, settings.getTotalTime()); } connections.add(timer.getTimeRunOutEvent().add(new IListener() { @Override public void handle() { timeOut(); } })); connections.add(view.getPauseEvent().add(new IListener() { @Override public void handle() { pauseTurn(); } })); connections.add(view.getEndPauseEvent().add(new IListener() { @Override public void handle() { resumeTurn(); } })); } protected void cleanUp() { timer.stopTimer(); for (Connection c : connections) { c.remove(); } } public void abortTurn() { cleanUp(); } }