blob: 4675bc737956beb4cd4793eca8fd3ca283b8a18c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
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);
}
/**
* Aborts the settings control and emits a start game event if settings have
* been approved
*/
private void startGame() {
if (!checkSettings()) {
return;
}
abort();
startGameEvent.emit(settings);
}
}
|