summaryrefslogtreecommitdiffstats
path: root/src/jrummikub
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub')
-rw-r--r--src/jrummikub/control/RoundControl.java23
-rw-r--r--src/jrummikub/control/network/NetworkRoundControl.java44
-rw-r--r--src/jrummikub/control/turn/AbstractTurnControl.java6
-rw-r--r--src/jrummikub/control/turn/HumanTurnControl.java1
4 files changed, 54 insertions, 20 deletions
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java
index a19a2ab..f209f3e 100644
--- a/src/jrummikub/control/RoundControl.java
+++ b/src/jrummikub/control/RoundControl.java
@@ -117,7 +117,20 @@ public class RoundControl {
}
}
- private void prepareTurn() {
+ protected void prepareTurn() {
+ doPrepareTurn();
+
+ boolean isHuman = roundState.getActivePlayer().getPlayerSettings()
+ .getType() == HUMAN;
+ boolean oneHuman = roundState.getGameSettings().oneHuman();
+ boolean isAI = (turnControl instanceof AIControl);
+
+ if (isAI || (isHuman && oneHuman)) {
+ startTurn();
+ }
+ }
+
+ protected void doPrepareTurn() {
boolean isHuman = roundState.getActivePlayer().getPlayerSettings()
.getType() == HUMAN;
boolean oneHuman = roundState.getGameSettings().oneHuman();
@@ -141,12 +154,6 @@ public class RoundControl {
turnControl = createTurnControl(roundState.getActivePlayer()
.getPlayerSettings());
-
- boolean isAI = (turnControl instanceof AIControl);
-
- if (isAI || (isHuman && oneHuman)) {
- startTurn();
- }
}
protected void startTurn() {
@@ -217,7 +224,7 @@ public class RoundControl {
|| totalValue >= roundState.getGameSettings().getInitialMeldThreshold();
}
- private void endOfTurn(ITable newTable) {
+ protected void endOfTurn(ITable newTable) {
boolean wasHuman = (turnControl instanceof HumanTurnControl);
boolean wasAI = (turnControl instanceof AIControl);
diff --git a/src/jrummikub/control/network/NetworkRoundControl.java b/src/jrummikub/control/network/NetworkRoundControl.java
index d7de9ea..a05f8ae 100644
--- a/src/jrummikub/control/network/NetworkRoundControl.java
+++ b/src/jrummikub/control/network/NetworkRoundControl.java
@@ -11,12 +11,22 @@ import jrummikub.view.IView;
public class NetworkRoundControl extends RoundControl {
private IConnectionControl connectionControl;
private boolean currentlyActive;
-
- public NetworkRoundControl(IRoundState roundState, IView view, IConnectionControl connectionControl, boolean startActive) {
+
+ public NetworkRoundControl(IRoundState roundState, IView view,
+ IConnectionControl connectionControl, boolean startActive) {
super(roundState, view);
-
+
this.connectionControl = connectionControl;
currentlyActive = startActive;
+
+ connections.add(connectionControl.getTurnStartEvent().add(
+ new IListener1<IRoundState>() {
+ @Override
+ public void handle(IRoundState state) {
+ NetworkRoundControl.this.roundState = state;
+ startTurn();
+ }
+ }));
}
@Override
@@ -28,7 +38,7 @@ public class NetworkRoundControl extends RoundControl {
}
});
}
-
+
@Override
protected ITurnControl createTurnControl(PlayerSettings playerSettings) {
switch (playerSettings.getType()) {
@@ -39,17 +49,31 @@ public class NetworkRoundControl extends RoundControl {
currentlyActive = false;
break;
}
-
+
if (!currentlyActive) {
return new NetworkTurnControl(connectionControl);
}
-
+
return super.createTurnControl(playerSettings);
}
-
+
@Override
- protected void startTurn() {
- connectionControl.startTurn(roundState);
- super.startTurn();
+ protected void prepareTurn() {
+ boolean wasActive = currentlyActive;
+
+ doPrepareTurn();
+
+ if (wasActive) {
+ connectionControl.startTurn(roundState);
+ }
+ }
+
+ @Override
+ protected void endOfTurn(ITable newTable) {
+ if (currentlyActive) {
+ connectionControl.endTurn(newTable);
+ }
+
+ super.endOfTurn(newTable);
}
}
diff --git a/src/jrummikub/control/turn/AbstractTurnControl.java b/src/jrummikub/control/turn/AbstractTurnControl.java
index f129f24..b687ca0 100644
--- a/src/jrummikub/control/turn/AbstractTurnControl.java
+++ b/src/jrummikub/control/turn/AbstractTurnControl.java
@@ -97,7 +97,11 @@ public abstract class AbstractTurnControl implements ITurnControl {
}
protected void cleanUp() {
- timer.stopTimer();
+ if (timer != null) {
+ timer.stopTimer();
+ }
+ started = true;
+
for (Connection c : connections) {
c.remove();
}
diff --git a/src/jrummikub/control/turn/HumanTurnControl.java b/src/jrummikub/control/turn/HumanTurnControl.java
index 51f77e4..7ca2731 100644
--- a/src/jrummikub/control/turn/HumanTurnControl.java
+++ b/src/jrummikub/control/turn/HumanTurnControl.java
@@ -90,7 +90,6 @@ public class HumanTurnControl extends AbstractTurnControl {
connections.add(view.getPlayerPanel().getEndTurnEvent()
.add(new IListener() {
-
@Override
public void handle() {
endOfTurn(false);