Implement pause function

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@390 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-06-08 21:58:16 +02:00
parent 2e376414b9
commit 45d5b3ae10
40 changed files with 642 additions and 425 deletions

View file

@ -16,7 +16,6 @@ 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;
@ -24,8 +23,7 @@ public abstract class AbstractTurnControl implements ITurnControl {
protected IView view;
protected ITurnTimer timer;
protected List<Connection> connections = new ArrayList<Connection>();
@Override
public IEvent getEndOfTurnEvent() {
return endOfTurnEvent;
@ -35,7 +33,17 @@ public abstract class AbstractTurnControl implements ITurnControl {
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
@ -52,15 +60,27 @@ public abstract class AbstractTurnControl implements ITurnControl {
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();
}

View file

@ -36,7 +36,7 @@ public class BaseAIControl extends AbstractTurnControl {
timer.startTimer();
computeThread.start();
}
protected void timeOut() {
cleanUp();
endOfTurnEvent.emit();
@ -49,15 +49,15 @@ public class BaseAIControl extends AbstractTurnControl {
private void compute() {
switch (turnInfo.getTurnMode()) {
case MAY_REDEAL:
emitRedeal();
break;
case INSPECT_ONLY:
emitEndOfTurn();
break;
case NORMAL_TURN:
turn();
break;
case MAY_REDEAL:
emitRedeal();
break;
case INSPECT_ONLY:
emitEndOfTurn();
break;
case NORMAL_TURN:
turn();
break;
}
}
@ -111,8 +111,10 @@ public class BaseAIControl extends AbstractTurnControl {
for (Stone stone : set) {
handStones.add(pickUpMatchingStone(stone));
}
turnInfo.getTable().drop(new StoneSet(handStones), new Position(
(float) Math.random() * 30 - 15, (float) Math.random() * 6 - 3));
turnInfo.getTable().drop(
new StoneSet(handStones),
new Position((float) Math.random() * 30 - 15,
(float) Math.random() * 6 - 3));
}
emitEndOfTurn();

View file

@ -48,7 +48,7 @@ public class HumanTurnControl extends AbstractTurnControl {
HumanTurnControl(ITurnTimer testTimer) {
this.timer = testTimer;
}
protected void timeOut() {
endOfTurn(false);
}
@ -97,13 +97,12 @@ public class HumanTurnControl extends AbstractTurnControl {
}
}));
connections.add(view.getPlayerPanel().getRedealEvent()
.add(new IListener() {
@Override
public void handle() {
endOfTurn(true);
}
}));
connections.add(view.getPlayerPanel().getRedealEvent().add(new IListener() {
@Override
public void handle() {
endOfTurn(true);
}
}));
}
private void addHandPanelHandlers() {
@ -304,8 +303,10 @@ public class HumanTurnControl extends AbstractTurnControl {
}
pickUpSelectedStones();
turnInfo.getTable().drop(new StoneSet(selectedStones), new Position(position.getX()
- selectedStones.size() * 0.5f, position.getY() - 0.5f));
turnInfo.getTable().drop(
new StoneSet(selectedStones),
new Position(position.getX() - selectedStones.size() * 0.5f, position
.getY() - 0.5f));
selectedStones.clear();
view.getTablePanel().setStoneSets(turnInfo.getTable());
@ -421,15 +422,14 @@ public class HumanTurnControl extends AbstractTurnControl {
turnInfo.getTable().drop(joinedSet, newPos);
} else {
StoneSet joinedSet = new StoneSet(selectedStones).join(newSet);
turnInfo.getTable().drop(joinedSet, new Position(newPos.getX()
- selectedStones.size(), newPos.getY()));
turnInfo.getTable().drop(joinedSet,
new Position(newPos.getX() - selectedStones.size(), newPos.getY()));
}
} else {
turnInfo.getTable().drop(
new StoneSet(selectedStones),
new Position(pos.getX()
+ (set.getSize() - selectedStones.size()) * 0.5f,
pos.getY()));
new Position(pos.getX() + (set.getSize() - selectedStones.size())
* 0.5f, pos.getY()));
}
selectedStones.clear();
@ -521,8 +521,7 @@ public class HumanTurnControl extends AbstractTurnControl {
static class HandStonePositionComparator implements
Comparator<Pair<Stone, Position>> {
@Override
public int compare(Pair<Stone, Position> pair1,
Pair<Stone, Position> pair2) {
public int compare(Pair<Stone, Position> pair1, Pair<Stone, Position> pair2) {
Position pos1 = pair1.getSecond(), pos2 = pair2.getSecond();
if (pos1.getY() < pos2.getY()) {
return -1;

View file

@ -43,6 +43,11 @@ public interface ITurnControl {
*/
public void startTurn();
/**
* Abort the turn
*/
public void abortTurn();
/**
* The TurnInfo class encapsulates all information concerning the current turn
*/
@ -108,9 +113,4 @@ public interface ITurnControl {
return turnMode;
}
}
/**
* Abort the turn
*/
public void abortTurn();
}

View file

@ -32,10 +32,10 @@ public abstract class TurnControlFactory {
*/
static public TurnControlFactory getFactory(Type type) {
switch (type) {
case HUMAN:
return HumanTurnControl.getFactory();
case COMPUTER:
return BaseAIControl.getFactory();
case HUMAN:
return HumanTurnControl.getFactory();
case COMPUTER:
return BaseAIControl.getFactory();
}
return null;
}