diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-13 22:29:28 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-06-13 22:29:28 +0200 |
commit | 570187c95000afd1ac9f6d6e8bb5cab30b984e87 (patch) | |
tree | cd6ed34d64da7621545d66c9f1126c723645b58f /src/jrummikub/control/SettingsControl.java | |
parent | 741a94953f2d4667de564d8ade37e68a04442fe0 (diff) | |
download | JRummikub-570187c95000afd1ac9f6d6e8bb5cab30b984e87.tar JRummikub-570187c95000afd1ac9f6d6e8bb5cab30b984e87.zip |
Implemented most of network settings control
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@425 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/SettingsControl.java')
-rw-r--r-- | src/jrummikub/control/SettingsControl.java | 106 |
1 files changed, 61 insertions, 45 deletions
diff --git a/src/jrummikub/control/SettingsControl.java b/src/jrummikub/control/SettingsControl.java index abcbd5d..398ce5d 100644 --- a/src/jrummikub/control/SettingsControl.java +++ b/src/jrummikub/control/SettingsControl.java @@ -3,6 +3,7 @@ package jrummikub.control; import java.awt.Color; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -34,20 +35,44 @@ public class SettingsControl { * Create a new settings control * * @param view - * the view to use + * the view to use * @param settings - * initial game settings + * initial game settings */ public SettingsControl(IView view, GameSettings settings) { this.view = view; this.settings = settings; view.getSettingsPanel().enableNetworkMode(false); + view.getSettingsPanel().setPlayerNamesEditable( + Collections.<Boolean> emptyList()); + addPlayer(); + addPlayer(); + + addListeners(); + + connections.add(view.getSettingsPanel().getStartGameEvent() + .add(new IListener() { + @Override + public void handle() { + startGame(); + } + })); + } + + protected SettingsControl() { + } + + protected void addListeners() { + addPlayerSettingsListeners(); + + addOptionListeners1(); + addOptionListeners2(); } /** - * the start game event is emitted when the user wants to start a game and - * the settings made are valid + * the start game event is emitted when the user wants to start a game and the + * settings made are valid * * @return the event */ @@ -59,28 +84,12 @@ public class SettingsControl { * Start the operation of the settings control */ public void startSettings() { - addPlayer(); - addPlayer(); - - addPlayerSettingsListeners(); - - addOptionListeners1(); - addOptionListeners2(); - - connections.add(view.getSettingsPanel().getStartGameEvent() - .add(new IListener() { - @Override - public void handle() { - startGame(); - } - })); view.showSettingsPanel(true); } private void addOptionListeners1() { connections.add(view.getSettingsPanel() - .getChangeInitialMeldThresholdEvent() - .add(new IListener1<Integer>() { + .getChangeInitialMeldThresholdEvent().add(new IListener1<Integer>() { @Override public void handle(Integer value) { settings.setInitialMeldThreshold(value); @@ -105,8 +114,7 @@ public class SettingsControl { update(); } })); - connections.add(view.getSettingsPanel() - .getChangeNumberOfStonesDealtEvent() + connections.add(view.getSettingsPanel().getChangeNumberOfStonesDealtEvent() .add(new IListener1<Integer>() { @Override public void handle(Integer value) { @@ -217,7 +225,7 @@ public class SettingsControl { })); } - private void addPlayer() { + protected void addPlayer() { if (settings.getPlayerList().size() >= ISettingsPanel.PLAYER_COLORS.length) { return; } @@ -237,7 +245,13 @@ public class SettingsControl { break; } - // Next, find unused color + settings.getPlayerList().add( + new PlayerSettings("Spieler " + num, findUnusedColor())); + + update(); + } + + protected Color findUnusedColor() { Color color = null; colorLoop: for (Color c : ISettingsPanel.PLAYER_COLORS) { color = c; @@ -248,11 +262,7 @@ public class SettingsControl { } break; } - - settings.getPlayerList().add( - new PlayerSettings("Spieler " + num, color)); - - update(); + return color; } private void removePlayer(int i) { @@ -283,17 +293,18 @@ public class SettingsControl { update(); } - private void setPlayerType(int i, Type type) { - settings.getPlayerList().get(i).setTurnControlType(type); + protected void setPlayerType(int i, Type type) { + settings.getPlayerList().get(i).setType(type); update(); } protected void update() { + boolean enableRemoveButtons = settings.getPlayerList().size() > 2; view.getSettingsPanel().enableRemovePlayerButtons( - settings.getPlayerList().size() > 2); - view.getSettingsPanel() - .enableAddPlayerButton( - settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length); + Collections.nCopies(settings.getPlayerList().size(), + enableRemoveButtons)); + view.getSettingsPanel().enableAddPlayerButton( + settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length); checkSettings(); @@ -305,7 +316,7 @@ public class SettingsControl { view.getSettingsPanel().setGameSettings(settings); } - private boolean checkSettings() { + protected boolean checkSettings() { if (!checkErrors()) { return false; } @@ -328,13 +339,19 @@ public class SettingsControl { } } for (int i = 0; i < settings.getPlayerList().size(); ++i) { - String name = settings.getPlayerList().get(i).getName(); + PlayerSettings player1 = settings.getPlayerList().get(i); + String name = player1.getName(); + Type type = player1.getType(); + + if (type == Type.NETWORK) { + continue; + } for (int j = i + 1; j < settings.getPlayerList().size(); ++j) { - if (settings.getPlayerList().get(j).getName().equals(name)) { - view.getSettingsPanel() - .setError( - ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME_ERROR); + PlayerSettings player2 = settings.getPlayerList().get(j); + if (player2.getName().equals(name) && player2.getType() == type) { + view.getSettingsPanel().setError( + ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME_ERROR); view.getSettingsPanel().enableStartGameButton(false); return false; } @@ -343,8 +360,7 @@ public class SettingsControl { int totalStonesDealt = settings.getNumberOfStonesDealt() * settings.getPlayerList().size(); - int totalStones = settings.getHighestValue() - * settings.getStoneSetNumber() + int totalStones = settings.getHighestValue() * settings.getStoneSetNumber() * settings.getStoneColors().size() + settings.getJokerNumber(); if (totalStones <= totalStonesDealt) { @@ -373,7 +389,7 @@ public class SettingsControl { boolean humanPlayerFound = false; for (PlayerSettings player : settings.getPlayerList()) { - if (player.getTurnControlType() == Type.HUMAN) { + if (player.getType() == Type.HUMAN) { humanPlayerFound = true; break; } |