Moved timer code to AbstractTurnControl
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@383 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
8b763a817b
commit
67d084d48b
4 changed files with 51 additions and 45 deletions
|
@ -1,8 +1,15 @@
|
||||||
package jrummikub.control.turn;
|
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.model.GameSettings;
|
||||||
|
import jrummikub.util.Connection;
|
||||||
import jrummikub.util.Event;
|
import jrummikub.util.Event;
|
||||||
import jrummikub.util.IEvent;
|
import jrummikub.util.IEvent;
|
||||||
|
import jrummikub.util.IListener;
|
||||||
import jrummikub.view.IView;
|
import jrummikub.view.IView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,7 +22,10 @@ public abstract class AbstractTurnControl implements ITurnControl {
|
||||||
protected TurnInfo turnInfo;
|
protected TurnInfo turnInfo;
|
||||||
protected GameSettings settings;
|
protected GameSettings settings;
|
||||||
protected IView view;
|
protected IView view;
|
||||||
|
protected ITurnTimer timer;
|
||||||
|
protected List<Connection> connections = new ArrayList<Connection>();
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IEvent getEndOfTurnEvent() {
|
public IEvent getEndOfTurnEvent() {
|
||||||
return endOfTurnEvent;
|
return endOfTurnEvent;
|
||||||
|
@ -25,12 +35,34 @@ public abstract class AbstractTurnControl implements ITurnControl {
|
||||||
public IEvent getRedealEvent() {
|
public IEvent getRedealEvent() {
|
||||||
return redealEvent;
|
return redealEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract void timeOut();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup(TurnInfo info, GameSettings settings, IView view) {
|
public void setup(TurnInfo info, GameSettings settings, IView view) {
|
||||||
turnInfo = info;
|
turnInfo = info;
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.view = view;
|
this.view = view;
|
||||||
|
if (timer == null) {
|
||||||
|
timer = new TurnTimer(view);
|
||||||
|
}
|
||||||
|
connections.add(timer.getTimeRunOutEvent().add(new IListener() {
|
||||||
|
@Override
|
||||||
|
public void handle() {
|
||||||
|
timeOut();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void cleanUp() {
|
||||||
|
timer.stopTimer();
|
||||||
|
for (Connection c : connections) {
|
||||||
|
c.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void abortTurn() {
|
||||||
|
cleanUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -7,14 +7,10 @@ import java.util.TreeMap;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
import jrummikub.control.AIUtil;
|
import jrummikub.control.AIUtil;
|
||||||
import jrummikub.control.ITurnTimer;
|
|
||||||
import jrummikub.control.TurnTimer;
|
|
||||||
import jrummikub.model.Position;
|
import jrummikub.model.Position;
|
||||||
import jrummikub.model.Stone;
|
import jrummikub.model.Stone;
|
||||||
import jrummikub.model.StoneColor;
|
import jrummikub.model.StoneColor;
|
||||||
import jrummikub.model.StoneSet;
|
import jrummikub.model.StoneSet;
|
||||||
import jrummikub.util.Connection;
|
|
||||||
import jrummikub.util.IListener;
|
|
||||||
import jrummikub.util.Pair;
|
import jrummikub.util.Pair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,24 +19,12 @@ import jrummikub.util.Pair;
|
||||||
*/
|
*/
|
||||||
public class BaseAIControl extends AbstractTurnControl {
|
public class BaseAIControl extends AbstractTurnControl {
|
||||||
private long startTime;
|
private long startTime;
|
||||||
private ITurnTimer turnTimer;
|
|
||||||
private List<Connection> connections = new ArrayList<Connection>();
|
|
||||||
private Thread computeThread;
|
private Thread computeThread;
|
||||||
|
|
||||||
private volatile boolean stopRunning = false;
|
private volatile boolean stopRunning = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startTurn() {
|
public void startTurn() {
|
||||||
turnTimer = new TurnTimer(view);
|
|
||||||
connections.add(turnTimer.getTimeRunOutEvent().add(new IListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle() {
|
|
||||||
cleanUp();
|
|
||||||
endOfTurnEvent.emit();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
computeThread = new Thread(new Runnable() {
|
computeThread = new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -49,16 +33,17 @@ public class BaseAIControl extends AbstractTurnControl {
|
||||||
});
|
});
|
||||||
startTime = System.currentTimeMillis();
|
startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
turnTimer.startTimer();
|
timer.startTimer();
|
||||||
computeThread.start();
|
computeThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void timeOut() {
|
||||||
|
cleanUp();
|
||||||
|
endOfTurnEvent.emit();
|
||||||
|
}
|
||||||
|
|
||||||
private void cleanUp() {
|
protected void cleanUp() {
|
||||||
turnTimer.stopTimer();
|
super.cleanUp();
|
||||||
|
|
||||||
for (Connection c : connections) {
|
|
||||||
c.remove();
|
|
||||||
}
|
|
||||||
stopRunning = true;
|
stopRunning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,13 +7,11 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import jrummikub.control.ITurnTimer;
|
import jrummikub.control.ITurnTimer;
|
||||||
import jrummikub.control.TurnTimer;
|
|
||||||
import jrummikub.model.Hand;
|
import jrummikub.model.Hand;
|
||||||
import jrummikub.model.Position;
|
import jrummikub.model.Position;
|
||||||
import jrummikub.model.Stone;
|
import jrummikub.model.Stone;
|
||||||
import jrummikub.model.StoneColor;
|
import jrummikub.model.StoneColor;
|
||||||
import jrummikub.model.StoneSet;
|
import jrummikub.model.StoneSet;
|
||||||
import jrummikub.util.Connection;
|
|
||||||
import jrummikub.util.IListener;
|
import jrummikub.util.IListener;
|
||||||
import jrummikub.util.IListener1;
|
import jrummikub.util.IListener1;
|
||||||
import jrummikub.util.IListener2;
|
import jrummikub.util.IListener2;
|
||||||
|
@ -24,12 +22,8 @@ import jrummikub.view.IView.BottomPanelType;
|
||||||
* Controller for a single turn made by a human player
|
* Controller for a single turn made by a human player
|
||||||
*/
|
*/
|
||||||
public class HumanTurnControl extends AbstractTurnControl {
|
public class HumanTurnControl extends AbstractTurnControl {
|
||||||
private ITurnTimer timer;
|
|
||||||
|
|
||||||
private List<Stone> selectedStones = new ArrayList<Stone>();
|
private List<Stone> selectedStones = new ArrayList<Stone>();
|
||||||
|
|
||||||
private List<Connection> connections = new ArrayList<Connection>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new human player's turn control
|
* Create a new human player's turn control
|
||||||
*/
|
*/
|
||||||
|
@ -54,20 +48,13 @@ public class HumanTurnControl extends AbstractTurnControl {
|
||||||
HumanTurnControl(ITurnTimer testTimer) {
|
HumanTurnControl(ITurnTimer testTimer) {
|
||||||
this.timer = testTimer;
|
this.timer = testTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void timeOut() {
|
||||||
|
endOfTurn(false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startTurn() {
|
public void startTurn() {
|
||||||
if (this.timer == null) {
|
|
||||||
this.timer = new TurnTimer(view);
|
|
||||||
}
|
|
||||||
|
|
||||||
connections.add(timer.getTimeRunOutEvent().add(new IListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle() {
|
|
||||||
endOfTurn(false);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
addButtonHandlers();
|
addButtonHandlers();
|
||||||
|
|
||||||
addHandPanelHandlers();
|
addHandPanelHandlers();
|
||||||
|
@ -453,15 +440,12 @@ public class HumanTurnControl extends AbstractTurnControl {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void endOfTurn(boolean redeal) {
|
private void endOfTurn(boolean redeal) {
|
||||||
timer.stopTimer();
|
cleanUp();
|
||||||
if (redeal) {
|
if (redeal) {
|
||||||
redealEvent.emit();
|
redealEvent.emit();
|
||||||
} else {
|
} else {
|
||||||
endOfTurnEvent.emit();
|
endOfTurnEvent.emit();
|
||||||
}
|
}
|
||||||
for (Connection c : connections) {
|
|
||||||
c.remove();
|
|
||||||
}
|
|
||||||
view.setSelectedStones(new ArrayList<Stone>());
|
view.setSelectedStones(new ArrayList<Stone>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,4 +108,9 @@ public interface ITurnControl {
|
||||||
return turnMode;
|
return turnMode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abort the turn
|
||||||
|
*/
|
||||||
|
public void abortTurn();
|
||||||
}
|
}
|
Reference in a new issue