From 570187c95000afd1ac9f6d6e8bb5cab30b984e87 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 13 Jun 2011 22:29:28 +0200 Subject: Implemented most of network settings control git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@425 72836036-5685-4462-b002-a69064685172 --- src/jrummikub/control/SettingsControl.java | 106 +++++++++++++++++------------ 1 file changed, 61 insertions(+), 45 deletions(-) (limited to 'src/jrummikub/control/SettingsControl.java') 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. 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() { + .getChangeInitialMeldThresholdEvent().add(new IListener1() { @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() { @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; } -- cgit v1.2.3