git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@180 72836036-5685-4462-b002-a69064685172
184 lines
4.2 KiB
Java
184 lines
4.2 KiB
Java
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.IListener1;
|
|
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<Stone> selectedStones = new ArrayList<Stone>();
|
|
|
|
private Event endOfTurnEvent = new Event();
|
|
List<Connection> connections = new ArrayList<Connection>();
|
|
|
|
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<Stone, Boolean>() {
|
|
|
|
@Override
|
|
public void handle(Stone stone, Boolean collect) {
|
|
stoneClick(stone, collect);
|
|
}
|
|
}));
|
|
|
|
connections.add(view.getTablePanel().getStoneCollectionPanel()
|
|
.getStoneClickEvent().add(new IListener2<Stone, Boolean>() {
|
|
|
|
@Override
|
|
public void handle(Stone stone, Boolean collect) {
|
|
collectionStoneClick(stone, collect);
|
|
}
|
|
}));
|
|
connections.add(view.getTablePanel().getStoneClickEvent()
|
|
.add(new IListener2<Stone, Boolean>() {
|
|
|
|
@Override
|
|
public void handle(Stone stone, Boolean collect) {
|
|
stoneClick(stone, collect);
|
|
}
|
|
}));
|
|
|
|
connections.add(view.getTablePanel().getClickEvent()
|
|
.add(new IListener1<Position>() {
|
|
@Override
|
|
public void handle(Position pos) {
|
|
tableClick(pos);
|
|
}
|
|
}));
|
|
connections.add(view.getTablePanel().getLeftConnectorClickEvent()
|
|
.add(new IListener1<StoneSet>() {
|
|
@Override
|
|
public void handle(StoneSet set) {
|
|
leftConnectorClick(set);
|
|
}
|
|
}));
|
|
connections.add(view.getTablePanel().getRightConnectorClickEvent()
|
|
.add(new IListener1<StoneSet>() {
|
|
@Override
|
|
public void handle(StoneSet set) {
|
|
rightConnectorClick(set);
|
|
}
|
|
}));
|
|
|
|
view.getPlayerPanel().getHandPanel().setStones(hand.clone());
|
|
view.enableStartTurnPanel(false);
|
|
|
|
timer.startTimer();
|
|
}
|
|
|
|
private void sortByValue() {
|
|
|
|
}
|
|
|
|
private void sortByColor() {
|
|
|
|
}
|
|
|
|
private void stoneClick(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 pickUpSelectedStones() {
|
|
for (Stone stone : selectedStones) {
|
|
hand.pickUp(stone);
|
|
table.pickUpStone(stone);
|
|
}
|
|
}
|
|
|
|
private void tableClick(Position position) {
|
|
if (selectedStones.isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
pickUpSelectedStones();
|
|
table.drop(new StoneSet(selectedStones), position);
|
|
selectedStones.clear();
|
|
|
|
view.getTablePanel().setStoneSets(table);
|
|
view.getPlayerPanel().getHandPanel().setStones(hand);
|
|
view.setSelectedStones(selectedStones);
|
|
}
|
|
|
|
private void leftConnectorClick(StoneSet set) {
|
|
|
|
}
|
|
|
|
private void rightConnectorClick(StoneSet set) {
|
|
|
|
}
|
|
|
|
private void endOfTurn() {
|
|
timer.stopTimer();
|
|
endOfTurnEvent.emit();
|
|
for (Connection c : connections) {
|
|
c.remove();
|
|
}
|
|
view.setSelectedStones(new ArrayList<Stone>());
|
|
}
|
|
|
|
public IEvent getEndOfTurnEvent() {
|
|
return endOfTurnEvent;
|
|
}
|
|
}
|