summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r--src/jrummikub/control/ApplicationControl.java9
-rw-r--r--src/jrummikub/control/GameControl.java16
-rw-r--r--src/jrummikub/control/RoundControl.java18
3 files changed, 36 insertions, 7 deletions
diff --git a/src/jrummikub/control/ApplicationControl.java b/src/jrummikub/control/ApplicationControl.java
index 068b898..e4ddb55 100644
--- a/src/jrummikub/control/ApplicationControl.java
+++ b/src/jrummikub/control/ApplicationControl.java
@@ -16,6 +16,7 @@ import jrummikub.view.IView.BottomPanelType;
public class ApplicationControl {
private SaveControl saveControl;
private IView view;
+ private GameControl gameControl;
/**
* Creates a new application control
@@ -53,8 +54,10 @@ public class ApplicationControl {
public void handle(GameSettings settings,
GameState gameState, IRoundState roundState) {
settingsControl.abort();
- // TODO alles ordentlich beenden (controls)
- GameControl gameControl = new GameControl(settings,
+ if (gameControl != null){
+ gameControl.abortGame();
+ }
+ gameControl = new GameControl(settings,
saveControl, view);
addGameControlListeners(gameControl);
gameControl.continueGame(gameState, roundState);
@@ -67,7 +70,7 @@ public class ApplicationControl {
public void handle(GameSettings settings) {
saveControl.setGameSettings(settings);
- GameControl gameControl = new GameControl(settings,
+ gameControl = new GameControl(settings,
saveControl, view);
addGameControlListeners(gameControl);
diff --git a/src/jrummikub/control/GameControl.java b/src/jrummikub/control/GameControl.java
index 985781a..194d0de 100644
--- a/src/jrummikub/control/GameControl.java
+++ b/src/jrummikub/control/GameControl.java
@@ -83,10 +83,14 @@ public class GameControl {
}
private void endGame() {
+ removeListeners();
+ endOfGameEvent.emit();
+ }
+
+ private void removeListeners() {
for (Connection c : connections) {
c.remove();
}
- endOfGameEvent.emit();
}
/**
@@ -106,6 +110,16 @@ public class GameControl {
}
}
+ public void abortGame() {
+ removeListeners();
+ if (roundControl != null) {
+ roundControl.abortRound();
+ roundControl = null;
+ }
+
+ view.clearView();
+ }
+
private void startRound() {
if (roundControl != null) {
return;
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java
index 4fadc15..e1009af 100644
--- a/src/jrummikub/control/RoundControl.java
+++ b/src/jrummikub/control/RoundControl.java
@@ -84,6 +84,14 @@ public class RoundControl {
prepareTurn();
}
+ public void abortRound() {
+ removeListeners();
+ if (turnControl != null) {
+ turnControl.abortTurn();
+ turnControl = null;
+ }
+ }
+
private void prepareTurn() {
boolean isHuman = roundState.getActivePlayer().getPlayerSettings()
.getTurnControlType() == HUMAN;
@@ -294,14 +302,18 @@ public class RoundControl {
}
void endOfRound() {
- for (Connection c : connections) {
- c.remove();
- }
+ removeListeners();
Score roundScore = score();
endOfRoundEvent.emit(roundScore);
roundFinished = true;
}
+ private void removeListeners() {
+ for (Connection c : connections) {
+ c.remove();
+ }
+ }
+
private Score score() {
List<Boolean> winners = new ArrayList<Boolean>();
List<Integer> points = new ArrayList<Integer>();