diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java index 7ebb5708..b3dfa790 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java @@ -84,7 +84,7 @@ public class MdgaApp extends SimpleApplication { /** * The client game logic. */ - private final ClientGameLogic clientGameLogic; + private ClientGameLogic clientGameLogic; private ExecutorService executor; @@ -204,6 +204,7 @@ public void enter(MdgaState state) { switch (state) { case MAIN: view = mainView; + clientGameLogic.clear(); break; case LOBBY: view = lobbyView; diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java index bf93b967..d1e9c09d 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java @@ -76,6 +76,15 @@ private Piece getPiece(UUID pieceId) { return null; } + public void clear(){ + game = new Game(); + notifications.clear(); + setState(dialogsState); + isHost = false; + ownPlayerID = 0; + ownPlayerName = null; + } + /** * This method returns the clientSender * 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 64746695..81e1db1c 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 @@ -175,4 +175,16 @@ public void received(StartGameMessage msg, int from) { this.logic.getServerSender().send(from, new IncorrectRequestMessage(5)); } } + + /** + * Removed the player after receiving a LeaveGameMessage message. + * + * @param msg as the message which was sent by the player as a LeaveGameMessage object. + * @param from as the client id of the player as an Integer. + */ + @Override + public void received(LeaveGameMessage msg, int from) { + this.logic.getGame().removePlayer(from); + this.logic.getServerSender().broadcast(new LobbyPlayerLeaveMessage(from)); + } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/MovePieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/MovePieceState.java index d8d2af29..17ca0d29 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/MovePieceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/MovePieceState.java @@ -61,13 +61,13 @@ public void received(AnimationEndMessage msg, int from) { if (finishedAnimations.size() == logic.getGame().getPlayers().size()) { if (logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).isFinished()) { logic.getGame().getPlayerRanking().put(logic.getGame().getPlayerRanking().size(), logic.getGame().getActivePlayer()); - logic.getServerSender().send(logic.getGame().getPlayerIdByColor(logic.getGame().getActiveColor()), new SpectatorMessage()); - setActivePlayer(logic.getGame().getActiveColor()); if (logic.getGame().getPlayerRanking().size() == logic.getGame().getPlayers().size() - 1) { - logic.getGame().getPlayerRanking().put(logic.getGame().getPlayerRanking().size(), logic.getGame().getActivePlayer()); + logic.getGame().getPlayerRanking().put(logic.getGame().getPlayerRanking().size(), logic.getGame().getPlayerByColor(logic.getGame().getActiveColor().next(logic.getGame()))); logic.setCurrentState(logic.getCeremonyState()); return; } + logic.getServerSender().send(logic.getGame().getPlayerIdByColor(logic.getGame().getActiveColor()), new SpectatorMessage()); + setActivePlayer(logic.getGame().getActiveColor()); this.turnAutomaton.getGameAutomaton().setCurrentState(this.turnAutomaton.getGameAutomaton().getTurnState()); } else if (logic.getGame().getDiceEyes() == 6) {