package jrummikub.control; import java.util.ArrayList; import java.util.List; import jrummikub.model.IHand; import jrummikub.model.ITable; import jrummikub.model.Position; import jrummikub.model.Stone; import jrummikub.model.StoneSet; import jrummikub.util.Connection; import jrummikub.util.Event; import jrummikub.util.IEvent; import jrummikub.util.IListener; import jrummikub.util.IListener2; import jrummikub.view.IView; public class TurnControl { private IHand hand; private ITable table; private ITurnTimer timer; private IView view; private List selectedStones = new ArrayList(); private Event endOfTurnEvent = new Event(); List connections = new ArrayList(); public TurnControl(IHand hand, ITable table, IView view) { this.hand = hand; this.table = table; this.view = view; this.timer = new TurnTimer(view); } /** Test only constructor **/ TurnControl(IHand hand, ITable table, IView view, ITurnTimer testTimer) { this.hand = hand; this.table = table; this.view = view; this.timer = testTimer; } public void startTurn() { IListener endOfTurnListener = new IListener() { @Override public void handle() { endOfTurn(); } }; connections.add(timer.getTimeRunOutEvent().add(endOfTurnListener)); connections.add(view.getPlayerPanel().getEndTurnEvent() .add(endOfTurnListener)); connections.add(view.getPlayerPanel().getHandPanel().getStoneClickEvent() .add(new IListener2() { @Override public void handle(Stone stone, Boolean collect) { handStoneClick(stone, collect); } })); connections.add(view.getTablePanel().getStoneCollectionPanel() .getStoneClickEvent().add(new IListener2() { @Override public void handle(Stone stone, Boolean collect) { collectionStoneClick(stone, collect); } })); view.getPlayerPanel().getHandPanel().setStones(hand.clone()); view.enableStartTurnPanel(false); timer.startTimer(); } private void sortByValue() { } private void sortByColor() { } private void handStoneClick(Stone stone, boolean collect) { if (collect) { if (!selectedStones.remove(stone)) { selectedStones.add(stone); } } else { selectedStones.clear(); selectedStones.add(stone); } view.setSelectedStones(selectedStones); } private void collectionStoneClick(Stone stone, boolean collect) { selectedStones.remove(stone); if (collect) { selectedStones.add(stone); } view.setSelectedStones(selectedStones); } private void leftConnectorClick(StoneSet set){ } private void rightConnectorClick(StoneSet set){ } private void tableClick(Position position){ } private void endOfTurn() { timer.stopTimer(); endOfTurnEvent.emit(); for (Connection c : connections) { c.remove(); } view.setSelectedStones(new ArrayList()); } public IEvent getEndOfTurnEvent() { return endOfTurnEvent; } }