From 277eada9340b3fda689b010dcba4ca0401593e5a Mon Sep 17 00:00:00 2001 From: Seraina Date: Sat, 14 May 2022 12:46:07 +0200 Subject: [PATCH 1/4] Implemented the updating off all sprites depending on night/day and role --- .../dbis/cs108/multiplayer/client/Client.java | 3 +-- .../cs108/multiplayer/client/gui/Sprites.java | 19 +++++++++++++------ .../gui/TrainAnimationDayController.java | 8 ++++++++ .../client/gui/game/GameController.java | 10 +++++++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index 5056abc..1e204c2 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -352,7 +352,6 @@ public class Client { gameStateModel.setDayClone(false); LOGGER.debug("----------------Night, Your role is:" + gameStateModel.getYourRole() + gameStateModel); Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); - chatApp.getGameController().updateGameSprites(); chatApp.getGameController().setNoiseButtonInvisible(); chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel); break; @@ -360,12 +359,12 @@ public class Client { gameStateModel.setDayClone(true); LOGGER.debug("----------------Day, Your role is:" + gameStateModel.getYourRole()+ gameStateModel); Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); - chatApp.getGameController().updateGameSprites(); chatApp.getGameController().setNoiseButtonVisible(); chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel); break; case GuiParameters.updateGameState: gameStateModel.setGSFromString(data); + chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); chatApp.getGameController().updateRoomLabels(); gameStateModel.setRoleFromPosition(position); break; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/Sprites.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/Sprites.java index 3597bcb..74559a9 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/Sprites.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/Sprites.java @@ -78,9 +78,7 @@ public class Sprites { shadow = SpritesDay.shadow; secondWagon = SpritesDay.secondWagon; emptyWagon = SpritesDay.emptyWagon; - for (int i = 0; i < roles.length; i++) { - rooms[i] = getRoomDay(i, roles[i], kickedOff); - } + updateDayRoomSprites(roles,kickedOff); emptyWagonWall = SpritesDay.emptyWagonWall; fullWagon = SpritesDay.fullWagon; loki = SpritesDay.loki; @@ -92,6 +90,11 @@ public class Sprites { e.printStackTrace(); } } + public static void updateDayRoomSprites(String[] roles, boolean[] kickedOff) { + for (int i = 0; i < roles.length; i++) { + rooms[i] = getRoomDay(i, roles[i], kickedOff); + } + } /** * Sets all Images of this class to the Night version, takes into account which room is a ghost @@ -104,9 +107,7 @@ public class Sprites { shadow = SpritesNight.shadow; secondWagon = SpritesNight.secondWagon; emptyWagon = SpritesNight.emptyWagon; - for (int i = 0; i < roles.length; i++) { - rooms[i] = getRoomNight(i, roles[i], kickedOff); - } + updateNightRoomSprites(roles,kickedOff); emptyWagonWall = SpritesNight.emptyWagonWall; fullWagon = SpritesNight.fullWagon; loki = SpritesNight.loki; @@ -115,6 +116,12 @@ public class Sprites { fg = SpritesNight.fg; } + public static void updateNightRoomSprites(String[] roles, boolean[] kickedOff) { + for (int i = 0; i < roles.length; i++) { + rooms[i] = getRoomNight(i, roles[i], kickedOff); + } + } + /** * Returns a room Image from SpritesDay, corresponding to the position and the role of the passenger in that room * @param position the position of the room integer 0-5 diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java index 33eecae..ed96fcf 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java @@ -49,6 +49,14 @@ public class TrainAnimationDayController implements Initializable { LOGGER.debug("Empty TrainAnimationDayController() constructor was called"); } + public void updateSprites(){ + shadowTrain.setImage(Sprites.getShadow()); + wagonBGImageView.setImage(Sprites.getSecondWagon()); + wagonFloorImageView.setImage(Sprites.getEmptyWagon()); + wagonFullImageView.setImage(Sprites.getFullWagon()); + lokiImageView.setImage(Sprites.getLoki()); + } + public ChatApp getChatApp() { return chatApp; } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java index aca4fd5..d2d635d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java @@ -5,6 +5,8 @@ import static javafx.scene.AccessibleRole.PARENT; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.Sprites; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.SpritesDay; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.TrainAnimationDayController; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; @@ -126,17 +128,23 @@ public class GameController implements Initializable { @FXML private AnchorPane chatAreaGame; - public void updateGameSprites(){ + public void updateGameSprites(TrainAnimationDayController trainAnimation){ Platform.runLater(new Runnable() { @Override public void run() { try{ + if(gameStateModel.getDayClone()) { + Sprites.updateDayRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff()); + } else { + Sprites.updateNightRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff()); + } room0ImageView.setImage(Sprites.getARoom(0)); room1ImageView.setImage(Sprites.getARoom(1)); room2ImageView.setImage(Sprites.getARoom(2)); room3ImageView.setImage(Sprites.getARoom(3)); room4ImageView.setImage(Sprites.getARoom(4)); room5ImageView.setImage(Sprites.getARoom(5)); + trainAnimation.updateSprites(); } catch (Exception e) { LOGGER.info(e.getMessage()); } From c6f82fd7c10228b9bdb9789540a9f9b1629ea665 Mon Sep 17 00:00:00 2001 From: Seraina Date: Sat, 14 May 2022 13:28:42 +0200 Subject: [PATCH 2/4] Implemented a Thread that listens for changes in day/night in gameStateModel to simplify and reduce the tasks of client thread --- .../dbis/cs108/multiplayer/client/Client.java | 19 ++----- .../client/gui/DayNightChangeListener.java | 54 +++++++++++++++++++ .../client/gui/GameStateModel.java | 14 +++++ .../gui/TrainAnimationDayController.java | 18 +++++++ 4 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index 1e204c2..7bc4968 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -3,6 +3,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.gamelogic.ClientGameInfoHandler; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.DayNightChangeListener; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GUI; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp; @@ -350,23 +351,12 @@ public class Client { switch (parameter) { case GuiParameters.night: //ClientGameInfoHandler; gameStateModel.setDayClone(false); - LOGGER.debug("----------------Night, Your role is:" + gameStateModel.getYourRole() + gameStateModel); - Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); - chatApp.getGameController().setNoiseButtonInvisible(); - chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel); break; case GuiParameters.day: //ClientGameInfoHandler gameStateModel.setDayClone(true); - LOGGER.debug("----------------Day, Your role is:" + gameStateModel.getYourRole()+ gameStateModel); - Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); - chatApp.getGameController().setNoiseButtonVisible(); - chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel); break; case GuiParameters.updateGameState: gameStateModel.setGSFromString(data); - chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); - chatApp.getGameController().updateRoomLabels(); - gameStateModel.setRoleFromPosition(position); break; case GuiParameters.noiseHeardAtPosition: try { @@ -388,13 +378,12 @@ public class Client { break; case GuiParameters.viewChangeToGame: chatApp.getLoungeSceneViewController().addGameView(); - //TODO + gameStateModel.setGameOver(false); + new Thread(new DayNightChangeListener(gameStateModel, chatApp, position)).start(); break; - /*case GuiParameters.viewChangeToStart: - //TODO - break;*/ case GuiParameters.viewChangeToLobby: chatApp.getLoungeSceneViewController().removeGameView(); + gameStateModel.setGameOver(true); //TODO break; case GuiParameters.addNewMemberToLobby: diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java new file mode 100644 index 0000000..069103b --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java @@ -0,0 +1,54 @@ +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui; + + +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.GameController; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge.LoungeSceneViewController; + +/** + * This class adds methods to listen if there is a change in the day&night state and calls methods accordingly + */ +public class DayNightChangeListener implements Runnable { + + private GameStateModel gameStateModel; + private ChatApp chatApp; + private int position; + + public DayNightChangeListener(GameStateModel gameStateModel, ChatApp chatApp, int position) { + this.gameStateModel = gameStateModel; + this.chatApp = chatApp; + this.position = position; + } + + + @Override + public void run() { + try{ + while(!gameStateModel.isGameOver()) { + if(gameStateModel.getDayClone()) { //its Day + LoungeSceneViewController.getTrainAnimationDayController().dontShowFullWagon(); + Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); + chatApp.getGameController().setNoiseButtonVisible(); + chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel); + } else { //its night + if (gameStateModel.getYourRole().equals("h")) { + LoungeSceneViewController.getTrainAnimationDayController().showFullWagon(); + } + Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); + chatApp.getGameController().setNoiseButtonInvisible(); + chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel); + } + chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); + chatApp.getGameController().updateRoomLabels(); + gameStateModel.setRoleFromPosition(position); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java index fb92397..81b037d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java @@ -19,6 +19,11 @@ public class GameStateModel { */ private boolean isDayClone; + /** + * true if the game is over + */ + private boolean gameOver = false; + /** * can take the values h/g/s for human/ghost/spectator. Safes the role the client this GamesStateModel * lives on currently has @@ -48,6 +53,15 @@ public class GameStateModel { isDayClone = false; } + public void setGameOver(boolean gameOver) { + this.gameOver = gameOver; + } + + public boolean isGameOver() { + return gameOver; + } + + /** * Updates the passengerTrainClone * @param names an array of the names of the players diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java index ed96fcf..7a9fbaf 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/TrainAnimationDayController.java @@ -94,6 +94,24 @@ public class TrainAnimationDayController implements Initializable { } }); } + + public void showFullWagon() { + Platform.runLater(new Runnable() { + @Override + public void run() { + wagonFullImageView.setVisible(true); + } + }); + } + + public void dontShowFullWagon() { + Platform.runLater(new Runnable() { + @Override + public void run() { + wagonFullImageView.setVisible(false); + } + }); + } /** * Adds the gameView to the existing LobbyView From 81ce75c7c9e43e6e23a08782142ae07adb2f1023 Mon Sep 17 00:00:00 2001 From: Seraina Date: Sat, 14 May 2022 14:27:37 +0200 Subject: [PATCH 3/4] Smoothed out the view changes from day to night --- .../unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java | 1 + .../cs108/multiplayer/client/gui/DayNightChangeListener.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java index dd2d860..915b5f7 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java @@ -157,6 +157,7 @@ public class ChatApp extends Application { this.setGameC(gameController); gameC.setClient(cModel); gameC.setGameStateModel(GameController.getGameStateModel()); + Sprites.setNightSprites(GameController.getGameStateModel().getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); Sprites.setDaySprites(GameController.getGameStateModel().getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); SpritesDay.setBells(); SpritesDay.setWheels(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java index 069103b..992be4e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java @@ -27,6 +27,7 @@ public class DayNightChangeListener implements Runnable { if(gameStateModel.getDayClone()) { //its Day LoungeSceneViewController.getTrainAnimationDayController().dontShowFullWagon(); Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); + chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); chatApp.getGameController().setNoiseButtonVisible(); chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel); } else { //its night @@ -34,6 +35,7 @@ public class DayNightChangeListener implements Runnable { LoungeSceneViewController.getTrainAnimationDayController().showFullWagon(); } Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); + chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); chatApp.getGameController().setNoiseButtonInvisible(); chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel); } @@ -49,6 +51,5 @@ public class DayNightChangeListener implements Runnable { } catch (Exception e) { e.printStackTrace(); } - } } From 84ed547372b14151b854b7acb61a69b3fc88dcde Mon Sep 17 00:00:00 2001 From: Seraina Date: Sat, 14 May 2022 15:23:49 +0200 Subject: [PATCH 4/4] Fixed some quirks with the YourRole checking, now the full Wagon should appear at the right time --- OgGhostWinners.txt | 1 + .../dbis/cs108/multiplayer/client/Client.java | 1 + .../client/JClientProtocolParser.java | 1 + .../client/gui/DayNightChangeListener.java | 20 +++++++++++++------ .../client/gui/GameStateModel.java | 6 ++++++ .../client/gui/game/GameController.java | 6 +++--- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/OgGhostWinners.txt b/OgGhostWinners.txt index cf77d1f..53225b1 100644 --- a/OgGhostWinners.txt +++ b/OgGhostWinners.txt @@ -5,3 +5,4 @@ Jonas of Istanbul serai serai serai +serai diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index 7bc4968..9bd8eb0 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -371,6 +371,7 @@ public class Client { //TODO break; case GuiParameters.VoteIsOver: + chatApp.getGameController().setNoiseButtonInvisible(); chatApp.getGameController().clearAllNoiseDisplay(); break; case GuiParameters.getMembersInLobby: diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java index 050caa0..c9f3287 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java @@ -50,6 +50,7 @@ public class JClientProtocolParser { break; case Protocol.serverConfirmQuit: c.disconnectFromServer(); + c.getGameStateModel().setGameOver(true); break; case Protocol.serverRequestsGhostVote: LOGGER.debug("Ghost received Vote request"); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java index 992be4e..1d6d298 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/DayNightChangeListener.java @@ -26,16 +26,24 @@ public class DayNightChangeListener implements Runnable { while(!gameStateModel.isGameOver()) { if(gameStateModel.getDayClone()) { //its Day LoungeSceneViewController.getTrainAnimationDayController().dontShowFullWagon(); - Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); - chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); + Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], + GameController.getGameStateModel().getKickedOff()); + chatApp.getGameController() + .updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); chatApp.getGameController().setNoiseButtonVisible(); chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel); } else { //its night - if (gameStateModel.getYourRole().equals("h")) { - LoungeSceneViewController.getTrainAnimationDayController().showFullWagon(); + try { + if (gameStateModel.getYourRoleFromPosition(position).equals("")) { + LoungeSceneViewController.getTrainAnimationDayController().showFullWagon(); + } + } catch (Exception e) { + e.getMessage(); } - Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff()); - chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); + Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], + GameController.getGameStateModel().getKickedOff()); + chatApp.getGameController() + .updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController()); chatApp.getGameController().setNoiseButtonInvisible(); chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java index 81b037d..3996abf 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java @@ -30,6 +30,8 @@ public class GameStateModel { */ private String yourRole; //TODO: Maybe add a GUI field to show this in + private int yourPosition; + /** * A primitive clone of the passengerTrain in the GameState of the server. * in passengerTrainClone[0] the names of the passengers are stored, in passengerTrainClone[1] the roles @@ -98,6 +100,10 @@ public class GameStateModel { return yourRole; } + public String getYourRoleFromPosition(int position) { + return passengerTrainClone[1][position]; + } + public int getNrOfPlayers() { return nrOfPlayers; } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java index d2d635d..31d1c4b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java @@ -165,7 +165,7 @@ public class GameController implements Initializable { @Override public void run() { LOGGER.debug(buttonRoom0); - if (g.getYourRole().equals("h")) { + if (g.getYourRoleFromPosition(client.getClient().getPosition()).equals("")) { //human try { buttonRoom0.setVisible(true); buttonRoom1.setVisible(true); @@ -177,7 +177,7 @@ public class GameController implements Initializable { e.printStackTrace(); } - } else { + } else { //ghost try { buttonRoom0.setVisible(false); buttonRoom1.setVisible(false); @@ -198,7 +198,7 @@ public class GameController implements Initializable { @Override public void run() { LOGGER.debug(buttonRoom0); - if (g.getYourRole().equals("g")) { + if (g.getYourRoleFromPosition(client.getClient().getPosition()).equals("g")) {//ghost try { buttonRoom0.setVisible(true); buttonRoom1.setVisible(true);