
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@430 72836036-5685-4462-b002-a69064685172
166 lines
4.2 KiB
Java
166 lines
4.2 KiB
Java
package jrummikub.control.network;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
import jrummikub.control.AbstractSettingsControl;
|
|
import jrummikub.model.GameSettings;
|
|
import jrummikub.model.PlayerSettings;
|
|
import jrummikub.model.PlayerSettings.Type;
|
|
import jrummikub.util.Event;
|
|
import jrummikub.util.Event1;
|
|
import jrummikub.util.IListener;
|
|
import jrummikub.view.ISettingsPanel;
|
|
import jrummikub.view.ISettingsPanel.SettingsMode;
|
|
import jrummikub.view.IView;
|
|
|
|
/**
|
|
* Settings for network games, entered by host
|
|
*/
|
|
public class NetworkSettingsControl extends AbstractSettingsControl {
|
|
private String nickname;
|
|
private Event1<GameSettings> offerGameEvent = new Event1<GameSettings>();
|
|
private Event backEvent = new Event();
|
|
|
|
/**
|
|
* Creates a new network settings control
|
|
*
|
|
* @param nickname
|
|
* to be set as player name
|
|
* @param view
|
|
* for events and handlers
|
|
* @param settings
|
|
* for playerNumber, color...
|
|
*/
|
|
public NetworkSettingsControl(String nickname, IView view,
|
|
GameSettings settings) {
|
|
super(view, settings);
|
|
this.nickname = nickname;
|
|
|
|
view.getSettingsPanel().setSettingsMode(SettingsMode.NETWORK_SETUP);
|
|
view.getSettingsPanel().setPlayerNamesEditable(
|
|
Collections.<Boolean> emptyList());
|
|
|
|
addFirstPlayer();
|
|
addPlayer();
|
|
|
|
addListeners();
|
|
|
|
connections.add(view.getSettingsPanel().getOfferGameEvent()
|
|
.add(new IListener() {
|
|
@Override
|
|
public void handle() {
|
|
offerGame();
|
|
}
|
|
}));
|
|
|
|
connections.add(view.getSettingsPanel().getBackEvent()
|
|
.add(new IListener() {
|
|
@Override
|
|
public void handle() {
|
|
abort();
|
|
backEvent.emit();
|
|
}
|
|
}));
|
|
}
|
|
|
|
public Event1<GameSettings> getOfferGameEvent() {
|
|
return offerGameEvent;
|
|
}
|
|
|
|
public Event getBackEvent() {
|
|
return backEvent;
|
|
}
|
|
|
|
private void offerGame(){
|
|
if (!checkSettings()) {
|
|
return;
|
|
}
|
|
abort();
|
|
offerGameEvent.emit(settings);
|
|
}
|
|
|
|
@Override
|
|
protected void update() {
|
|
view.getSettingsPanel()
|
|
.enableAddPlayerButton(
|
|
settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length);
|
|
|
|
checkSettings();
|
|
|
|
List<List<Type>> choices = new ArrayList<List<Type>>();
|
|
List<Boolean> enableRemoveButtons = new ArrayList<Boolean>();
|
|
List<Boolean> playerNamesEditable = new ArrayList<Boolean>();
|
|
|
|
for (int i = 0; i < settings.getPlayerList().size(); i++) {
|
|
if (i == 0) {
|
|
choices.add(Collections.singletonList(Type.HUMAN));
|
|
enableRemoveButtons.add(false);
|
|
} else {
|
|
choices.add(Arrays.asList(Type.NETWORK, Type.COMPUTER));
|
|
enableRemoveButtons.add(settings.getPlayerList().size() > 2);
|
|
}
|
|
|
|
playerNamesEditable
|
|
.add(settings.getPlayerList().get(i).getType() == Type.COMPUTER);
|
|
}
|
|
view.getSettingsPanel().enableRemovePlayerButtons(enableRemoveButtons);
|
|
view.getSettingsPanel().setPlayerNamesEditable(playerNamesEditable);
|
|
view.getSettingsPanel().setPlayerTypeChoices(choices);
|
|
|
|
view.getSettingsPanel().setGameSettings(settings);
|
|
}
|
|
|
|
@Override
|
|
protected void setPlayerType(int i, Type type) {
|
|
Type oldType = settings.getPlayerList().get(i).getType();
|
|
|
|
settings.getPlayerList().get(i).setType(type);
|
|
|
|
if (type == Type.NETWORK) {
|
|
settings.getPlayerList().get(i).setName("Offen");
|
|
} else if (oldType != Type.COMPUTER && type == Type.COMPUTER) {
|
|
// Find unused player name
|
|
int num = 0;
|
|
|
|
nameLoop: while (true) {
|
|
num++;
|
|
String playerName = "Computer " + num;
|
|
|
|
for (PlayerSettings player : settings.getPlayerList()) {
|
|
if (player.getType() == Type.COMPUTER
|
|
&& playerName.equals(player.getName())) {
|
|
continue nameLoop;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
settings.getPlayerList().get(i).setName("Computer " + num);
|
|
}
|
|
|
|
update();
|
|
}
|
|
|
|
private void addFirstPlayer() {
|
|
PlayerSettings playerSettings = new PlayerSettings(nickname,
|
|
findUnusedColor());
|
|
settings.getPlayerList().add(playerSettings);
|
|
}
|
|
|
|
@Override
|
|
protected void addPlayer() {
|
|
if (settings.getPlayerList().size() >= ISettingsPanel.PLAYER_COLORS.length) {
|
|
return;
|
|
}
|
|
|
|
PlayerSettings playerSettings = new PlayerSettings("Offen",
|
|
findUnusedColor());
|
|
playerSettings.setType(Type.NETWORK);
|
|
settings.getPlayerList().add(playerSettings);
|
|
|
|
update();
|
|
}
|
|
}
|