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/network/GameJoinControl.java
Bennet Gerlach bf24a9279a Start game button in a network game sends an event
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@479 72836036-5685-4462-b002-a69064685172
2011-06-19 02:47:38 +02:00

98 lines
2.4 KiB
Java

package jrummikub.control.network;
import java.util.UUID;
import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings;
import jrummikub.model.PlayerSettings.Type;
import jrummikub.util.GameData;
import jrummikub.util.IListener;
import jrummikub.util.IListener1;
import jrummikub.view.ISettingsPanel.SettingsMode;
import jrummikub.view.IView;
/**
* Control for joining a network game
*/
public class GameJoinControl extends AbstractGameBeginControl {
/**
* Creates new game join control
*
* @param connectionControl
* the current connection control for events and messages
* @param gameData
* the game data for settings, game id
* @param view
* the view
*/
public GameJoinControl(final IConnectionControl connectionControl,
final GameData gameData, final IView view) {
super(connectionControl, view, gameData, SettingsMode.NETWORK_JOIN);
fixGameSettings(gameData.getGameSettings());
updateSettingsPanel();
connections.add(connectionControl.getGameOfferEvent().add(
new IListener1<GameData>() {
@Override
public void handle(GameData data) {
if (data.getGameID().equals(gameData.getGameID())) {
GameSettings settings = data.getGameSettings();
fixGameSettings(settings);
gameData.setGameSettings(settings);
updateSettingsPanel();
}
}
}));
connections.add(connectionControl.getGameWithdrawalEvent().add(
new IListener1<UUID>() {
@Override
public void handle(UUID uuid) {
if (uuid.equals(gameData.getGameID())) {
abort();
backEvent.emit();
}
}
}));
connections.add(connectionControl.getGameStartEvent().add(new IListener() {
@Override
public void handle() {
startGame();
}
}));
}
private void fixGameSettings(GameSettings settings) {
for (PlayerSettings player : settings.getPlayerList()) {
if (player.getType() == Type.HUMAN) {
player.setType(Type.NETWORK);
} else if (player.getType() == Type.NETWORK
&& player.getName().equals(connectionControl.getNickname())) {
player.setType(Type.HUMAN);
}
}
}
/**
* Starts the join control and sets the settings panel in game join mode
*/
public void startGameJoin() {
view.showSettingsPanel(true);
}
/**
* Aborts joining and goes back to game list
*/
@Override
protected void goBack() {
abort();
connectionControl.leaveGame();
backEvent.emit();
}
}