From 70af06e1bff47a36de9d9106412388b2f5b91f15 Mon Sep 17 00:00:00 2001 From: Ida Massow Date: Wed, 8 Jun 2011 17:46:44 +0200 Subject: LAden und Speichern geht jetzt immer sauber git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@388 72836036-5685-4462-b002-a69064685172 --- src/jrummikub/control/ApplicationControl.java | 9 ++++++--- src/jrummikub/control/GameControl.java | 16 +++++++++++++++- src/jrummikub/control/RoundControl.java | 18 +++++++++++++++--- 3 files changed, 36 insertions(+), 7 deletions(-) (limited to 'src/jrummikub/control') 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 winners = new ArrayList(); List points = new ArrayList(); -- cgit v1.2.3