From 72321eab9a397cadae4748c41cb9dffa7fa225a0 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Mon, 2 Dec 2024 21:22:49 +0100 Subject: [PATCH] Updated 'LobbyState' class. Updated the 'LobbyState' class by updating all received methods in it. --- .../pp/mdga/server/automaton/LobbyState.java | 53 ++++++------------- 1 file changed, 17 insertions(+), 36 deletions(-) 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 2f97e9c9..7d49a751 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 @@ -80,18 +80,13 @@ public void received(JoinedLobbyMessage msg, int from) { */ @Override public void received(SelectTSKMessage msg, int from) { - for (Map.Entry entry : this.logic.getGame().getPlayers().entrySet()) { - if (entry.getValue().getColor() == msg.getColor()) { - return; - } + if (msg.getColor() != Color.NONE && !this.logic.getGame().isColorTaken(msg.getColor())) { + this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, Color.NONE, false)); + this.logic.getGame().getPlayerById(from).setColor(msg.getColor()); + this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, msg.getColor(), true)); + } else { + this.logic.getServerSender().send(from, new IncorrectRequestMessage(0)); } - - if (this.logic.getGame().getPlayerById(from).getColor() != Color.NONE) { - this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, this.logic.getGame().getPlayerById(from).getColor(), false)); - } - - this.logic.getGame().getPlayerById(from).setColor(msg.getColor()); - this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, msg.getColor(), true)); } /** @@ -116,34 +111,21 @@ public void received(DeselectTSKMessage msg, int from) { */ @Override public void received(LobbyReadyMessage msg, int from) { - //assign a free color if (this.logic.getGame().getPlayerById(from).getColor() == Color.NONE) { - ArrayList colors = new ArrayList<>(); - colors.add(Color.ARMY); - colors.add(Color.AIRFORCE); - colors.add(Color.NAVY); - colors.add(Color.CYBER); + Color color = this.logic.getGame().getFirstUnusedColor(); - for (Map.Entry entry : this.logic.getGame().getPlayers().entrySet()) { - if (colors.contains(entry.getValue().getColor())) { - colors.remove(entry.getValue().getColor()); - } + if (color != null) { + this.logic.getGame().getPlayerById(from).setColor(color); + this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, color, true)); + } else { + this.logic.getServerSender().send(from, new IncorrectRequestMessage(1)); } - - if (colors.size() < 1) { - throw new RuntimeException("can not assign a color"); - } - - this.logic.getGame().getPlayerById(from).setColor(colors.get(0)); - this.logic.getServerSender().broadcast(new UpdateTSKMessage(from, colors.get(0), true)); } - this.logic.getGame().getPlayerById(from).setReady(true); - this.logic.getServerSender().broadcast(new UpdateReadyMessage(from, true)); - for (Map.Entry entry : this.logic.getGame().getPlayers().entrySet()) { - if (!entry.getValue().isReady()) { - return; - } + if (this.logic.getGame().areAllReady()) { + this.initializeGame(); + this.logic.getServerSender().broadcast(new ServerStartGameMessage()); + this.logic.setCurrentState(this.logic.getGameState()); } } @@ -157,7 +139,6 @@ public void received(LobbyReadyMessage msg, int from) { @Override public void received(LobbyNotReadyMessage msg, int from) { this.logic.getGame().getPlayerById(from).setReady(false); - this.logic.getGame().setAllReady(false); this.logic.getServerSender().broadcast(new UpdateReadyMessage(from, false)); } @@ -187,7 +168,7 @@ public void received(LeaveGameMessage msg, int from) { */ @Override public void received(StartGameMessage msg, int from) { - if (msg.isForceStartGame() || this.logic.getGame().allReady()) { + if (msg.isForceStartGame() || this.logic.getGame().areAllReady()) { this.initializeGame(); this.logic.getServerSender().broadcast(new ServerStartGameMessage()); this.logic.setCurrentState(this.logic.getGameState());