This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
JRummikub/src/jrummikub/control/SettingsControl.java
Matthias Schiffer 297d5de03e Move some code to AbstractSettingsControl for consistency
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@466 72836036-5685-4462-b002-a69064685172
2011-06-18 17:36:09 +02:00

120 lines
2.8 KiB
Java

package jrummikub.control;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings;
import jrummikub.model.PlayerSettings.Type;
import jrummikub.util.Event1;
import jrummikub.util.IEvent1;
import jrummikub.util.IListener;
import jrummikub.view.ISettingsPanel;
import jrummikub.view.ISettingsPanel.SettingsMode;
import jrummikub.view.IView;
/**
* The settings control controls the settings panel
*/
public class SettingsControl extends AbstractSettingsControl {
private Event1<GameSettings> startGameEvent = new Event1<GameSettings>();
/**
* Create a new settings control
*
* @param view
* the view to use
* @param settings
* initial game settings
*/
public SettingsControl(IView view, GameSettings settings) {
super(view, settings);
view.getSettingsPanel().setSettingsMode(SettingsMode.DEFAULT);
addPlayer();
addPlayer();
addListeners();
connections.add(view.getSettingsPanel().getStartGameEvent()
.add(new IListener() {
@Override
public void handle() {
startGame();
}
}));
}
/**
* the start game event is emitted when the user wants to start a game and the
* settings made are valid
*
* @return the event
*/
public IEvent1<GameSettings> getStartGameEvent() {
return startGameEvent;
}
@Override
protected void addPlayer() {
if (settings.getPlayerList().size() >= ISettingsPanel.PLAYER_COLORS.length) {
return;
}
// Find unused player name
int num = settings.getPlayerList().size();
nameLoop: while (true) {
num++;
String playerName = "Spieler " + num;
for (PlayerSettings player : settings.getPlayerList()) {
if (playerName.equals(player.getName())) {
continue nameLoop;
}
}
break;
}
settings.getPlayerList().add(
new PlayerSettings("Spieler " + num, findUnusedColor()));
update();
}
@Override
protected void setPlayerType(int i, Type type) {
settings.getPlayerList().get(i).setType(type);
update();
}
@Override
protected void update() {
boolean enableRemoveButtons = settings.getPlayerList().size() > 2;
view.getSettingsPanel().enableRemovePlayerButtons(
Collections.nCopies(settings.getPlayerList().size(),
enableRemoveButtons));
view.getSettingsPanel().enableAddPlayerButton(
settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length);
checkSettings();
List<List<Type>> choices = new ArrayList<List<Type>>();
for (int i = 0; i < settings.getPlayerList().size(); i++) {
choices.add(Arrays.asList(Type.HUMAN, Type.COMPUTER));
}
view.getSettingsPanel().setPlayerTypeChoices(choices);
view.getSettingsPanel().setGameSettings(settings);
}
private void startGame() {
if (!checkSettings()) {
return;
}
abort();
startGameEvent.emit(settings);
}
}