diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java index ed4a47b5..6adfcf6f 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java @@ -4,7 +4,9 @@ import pp.mdga.client.ClientState; import pp.mdga.client.DialogsState; import pp.mdga.game.Color; +import pp.mdga.game.Piece; import pp.mdga.game.Player; +import pp.mdga.game.PlayerData; import pp.mdga.message.client.*; import pp.mdga.message.server.LobbyPlayerJoinedMessage; import pp.mdga.message.server.LobbyPlayerLeaveMessage; @@ -13,6 +15,8 @@ import pp.mdga.message.server.UpdateTSKMessage; import pp.mdga.notification.*; +import java.util.*; + public class LobbyState extends DialogStates { private final DialogsState parent; @@ -73,6 +77,13 @@ public void selectStart(){ public void received(ServerStartGameMessage msg){ logic.getGame().setBoard(msg.getBoard()); logic.addNotification(new GameNotification(logic.getGame().getPlayers().get(parent.getOwnPlayerId()).getColor())); + for(Map.Entry entry : msg.getBoard().getPlayerData().entrySet()){ + List pieceIds = new ArrayList<>(); + for (Piece piece : entry.getValue().getPieces()){ + pieceIds.add(piece.getUuid()); + } + logic.addNotification(new PlayerInGameNotification(entry.getKey(), pieceIds, logic.getGame().getPlayerByColor(entry.getKey()).getName())); + } parent.startGame(); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java index d7227511..0348c5a6 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Board.java @@ -33,6 +33,17 @@ public Board() { } } + /** + * This method will be used to add the given color and playerData parameters to the playerData attribute of + * Board class. + * + * @param color as the color of the player as a Color enumeration. + * @param playerData as the playerData of the player as a PlayerData object. + */ + public void addPlayerData(Color color, PlayerData playerData) { + this.playerData.put(color, playerData); + } + /** * This method returns the playerData * diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java index ab4e74af..6d72dcc5 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java @@ -2,6 +2,7 @@ import pp.mdga.game.Color; import pp.mdga.game.Player; +import pp.mdga.game.PlayerData; import pp.mdga.message.client.*; import pp.mdga.message.server.*; import pp.mdga.server.ServerGameLogic; @@ -43,6 +44,15 @@ public void exit() { LOGGER.log(System.Logger.Level.DEBUG, "Exited LobbyState state."); } + /** + * This method will be used to initialize the game and all necessary objects. + */ + public void initializeGame() { + for (Map.Entry entry: this.logic.getGame().getPlayers().entrySet()) { + this.logic.getGame().getBoard().addPlayerData(entry.getValue().getColor(), new PlayerData(entry.getValue().getColor())); + } + } + /** * This method will be called whenever the server received a JoinedLobbyMessage message. * It will also get the client id of the player who send this message @@ -110,6 +120,7 @@ public void received(LobbyReadyMessage msg, int from) { this.logic.getGame().setAllReady(true); if (this.logic.getGame().allReady()) { + this.initializeGame(); this.logic.getServerSender().broadcast(new ServerStartGameMessage(this.logic.getGame().getBoard())); } } @@ -152,6 +163,7 @@ public void received(LeaveGameMessage msg, int from) { @Override public void received(StartGameMessage msg, int from) { if (msg.isForceStartGame() || this.logic.getGame().allReady()) { + this.initializeGame(); this.logic.getServerSender().broadcast(new ServerStartGameMessage(this.logic.getGame().getBoard())); this.logic.setCurrentState(this.logic.getGameState()); }