From f4ccb6894ac45d2b3cf704fd4ef8dfc809d33eee Mon Sep 17 00:00:00 2001 From: Seraina Date: Sun, 1 May 2022 00:24:52 +0200 Subject: [PATCH 1/2] Had to change some things around, now notificationText and the bell pop up works, as well as voting and noise notification --- OgGhostWinners.txt | 1 + .../unibas/dmi/dbis/cs108/BudaLogConfig.java | 2 +- .../dmi/dbis/cs108/gamelogic/GameState.java | 2 +- .../dbis/cs108/multiplayer/client/Client.java | 35 ++- .../client/JClientProtocolParser.java | 10 +- .../client/gui/{chat => }/ChatApp.java | 46 ++- .../cs108/multiplayer/client/gui/GUI.java | 1 - .../client/gui/chat/ChatController.java | 1 + .../client/gui/game/GameController.java | 277 ++++++++++++------ .../cs108/multiplayer/helpers/Protocol.java | 6 + .../multiplayer/server/ClientHandler.java | 10 +- .../client/gui/game/GameDayAll.fxml | 7 +- 12 files changed, 263 insertions(+), 135 deletions(-) rename src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/{chat => }/ChatApp.java (71%) diff --git a/OgGhostWinners.txt b/OgGhostWinners.txt index 223b783..914ddb5 100644 --- a/OgGhostWinners.txt +++ b/OgGhostWinners.txt @@ -1 +1,2 @@ B +serai diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java b/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java index 0ee0b70..dc9f6c1 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/BudaLogConfig.java @@ -19,7 +19,7 @@ public class BudaLogConfig { LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration config = ctx.getConfiguration(); LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); - loggerConfig.setLevel(Level.INFO); // change level here + loggerConfig.setLevel(Level.DEBUG); // change level here ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig. } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java index 06f041e..1d0c725 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java @@ -167,7 +167,7 @@ public class GameState { } else if (array[i].getIsGhost()) { print[i] = array[i].getName() + ":g:" + array[i].getKickedOff(); } else { - print[i] = "| " + array[i].getName() + ":h:" + array[i].getKickedOff(); + print[i] = array[i].getName() + ":h:" + array[i].getKickedOff(); } } 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 d693491..27673fa 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 @@ -5,7 +5,7 @@ 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.GUI; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel; -import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat.ChatApp; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat.ChatController; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.GameController; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ClientPinger; @@ -41,7 +41,6 @@ public class Client { private GUI chatGui; private ClientModel clientModel; private GameStateModel gameStateModel; - private GameController gameController; /** * Saves the position of the client, gets refreshed everytime the client gets a vote request. @@ -70,11 +69,11 @@ public class Client { systemName = username; } sendMsgToServer(Protocol.clientLogin + "$" + systemName); - this.chatApp = new ChatApp(new ClientModel(systemName, this)); - this.chatGui = new GUI(this.chatApp); clientPinger = new ClientPinger(this, this.socket); this.gameStateModel = new GameStateModel(); - this.gameController = new GameController(ChatApp.getClientModel(), gameStateModel); + this.chatApp = new ChatApp(new ClientModel(systemName, this)); + ChatApp.setGameController(new GameController(ChatApp.getClientModel(), gameStateModel)); + this.chatGui = new GUI(this.chatApp); } catch (IOException e) { e.printStackTrace(); } @@ -146,6 +145,9 @@ public class Client { } + public void setPosition(int position) { + this.position = position; + } /** * Starts a thread which listens for incoming chat messages / other messages that the user has to @@ -327,6 +329,7 @@ public class Client { */ public void sendToGUI(String parameter, String data) { try { + LOGGER.debug("GUI: PARAMETER:" + parameter + ", DATA: " + data); switch (parameter) { case ClientGameInfoHandler.itsNightTime: //ClientGameInfoHandler gameStateModel.setDayClone(false); @@ -336,14 +339,14 @@ public class Client { break; case GuiParameters.updateGameState: gameStateModel.setGSFromString(data); - gameController.updateRoomLabels(); + chatApp.getGameController().updateRoomLabels(); break; case GuiParameters.noiseHeardAtPosition: try { int position = Integer.parseInt(data); determineNoiseDisplay(position); } catch (Exception e) { - LOGGER.warn("Not a position given for noise"); + LOGGER.warn("Not a position given for noise " +e.getMessage()); } break; case GuiParameters.listOfLobbies: @@ -380,7 +383,7 @@ public class Client { int n = arr.length; for (int i = 0; i < n; i = i + 2) { list.add(new SimpleStringProperty(arr[i])); - ChatController.getClient().addLobbyToList(new SimpleStringProperty(arr[i])); + //ChatController.getClient().addLobbyToList(new SimpleStringProperty(arr[i])); } } @@ -403,9 +406,9 @@ public class Client { public void notificationTextDisplay(String data) { new Thread(() -> { try { - gameController.addMessageToNotificationText(data); + chatApp.getGameController().addMessageToNotificationText(data); Thread.sleep(3000); - gameController.clearNotificationText(); + chatApp.getGameController().clearNotificationText(); } catch (InterruptedException e) { LOGGER.warn(e.getMessage()); } @@ -416,17 +419,17 @@ public class Client { public void determineNoiseDisplay(int position) { switch (position) { case 0: - gameController.noiseDisplay0(); + chatApp.getGameController().noiseDisplay0(); case 1: - gameController.noiseDisplay1(); + chatApp.getGameController().noiseDisplay1(); case 2: - gameController.noiseDisplay2(); + chatApp.getGameController().noiseDisplay2(); case 3: - gameController.noiseDisplay3(); + chatApp.getGameController().noiseDisplay3(); case 4: - gameController.noiseDisplay4(); + chatApp.getGameController().noiseDisplay4(); case 5: - gameController.noiseDisplay5(); + chatApp.getGameController().noiseDisplay5(); } } 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 2ad6979..58d8b98 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 @@ -2,6 +2,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.game.GameController; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; import java.io.OutputStreamWriter; import org.apache.logging.log4j.LogManager; @@ -61,17 +62,20 @@ public class JClientProtocolParser { break; case Protocol.printToGUI: String substring = msg.substring(6); - int index = msg.indexOf("$"); + int index = substring.indexOf("$"); String parameter = ""; String data = substring; try { - parameter = msg.substring(0,index); - data = msg.substring(index+1); + parameter = substring.substring(0,index); + data = substring.substring(index+1); } catch (Exception e) { LOGGER.warn("No parameter in PTGUI"); } c.sendToGUI(parameter,data); break; + case Protocol.positionOfClient: + int position = Integer.parseInt(msg.substring(6)); + GameController.getClient().getClient().setPosition(position); default: System.out.println("Received unknown command"); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java similarity index 71% rename from src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java rename to src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java index 84e7947..2aa522c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/ChatApp.java @@ -1,11 +1,14 @@ -package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; +package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat.ChatController; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.GameController; import java.net.URL; import java.util.Objects; import javafx.application.Application; import javafx.fxml.FXMLLoader; +import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; @@ -19,7 +22,9 @@ public class ChatApp extends Application { private static ClientModel clientModel; private static ChatController chatController; + private static GameController gameController; private ClientModel cModel; + private GameController gameC; public ChatApp() { super(); @@ -50,10 +55,27 @@ public class ChatApp extends Application { this.cModel = cModel; } + public void setGameC(GameController gameC) { + this.gameC = gameC; + } + public ClientModel getcModel() { return cModel; } + public static void setGameController( + GameController gameController) { + ChatApp.gameController = gameController; + } + + public GameController getGameController() { + return gameController; + } + + public GameController getGameC() { + return gameC; + } + public static void setClientModel(ClientModel clientM) { clientModel = clientM; } @@ -83,16 +105,16 @@ public class ChatApp extends Application { @Override public void start(Stage primaryStage) throws Exception { this.setcModel(clientModel); - URL resource = ChatApp.class.getResource( - "ChatView.fxml"); - if (resource == null) { - System.out.println("File wasnt found"); - } - //ChatApp chatApp = new ChatApp(new ClientModel()); + this.setGameC(gameController); + gameC.setClient(cModel); + gameC.setGameStateModel(GameController.getGameStateModel()); + URL chatResource = ChatApp.class.getResource( + "chat/ChatView.fxml"); + URL gameResource = ChatApp.class.getResource( + "game/GameDayAll.fxml"); try { Parent root = FXMLLoader.load( - Objects.requireNonNull(ChatApp.class.getResource( - "ChatView.fxml"))); + Objects.requireNonNull(gameResource)); // TODO bin chatController.getChatPaneRoot() border to root border for rezising Scene scene = new Scene(root); scene.setRoot(root); @@ -100,11 +122,15 @@ public class ChatApp extends Application { } catch (Exception e) { e.printStackTrace(); } + primaryStage.setResizable(false); + Node chat = FXMLLoader.load( + Objects.requireNonNull(chatResource)); + primaryStage.setTitle("Night Train To Budapest"); primaryStage.setResizable(true); - primaryStage.setTitle("Chat"); primaryStage.show(); + } public static void main(String[] args) { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java index 06a9d30..e06bd0b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GUI.java @@ -1,7 +1,6 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; -import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat.ChatApp; import javafx.application.Application; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java index 16f186f..3248849 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/chat/ChatController.java @@ -2,6 +2,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.chat; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; +import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.utils.ChatLabelConfigurator; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; 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 c5112b3..2a72312 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 @@ -1,44 +1,33 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game; -import ch.unibas.dmi.dbis.cs108.multiplayer.client.Client; +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.helpers.GuiParameters; -import javafx.event.EventHandler; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; import java.net.URL; import java.util.ResourceBundle; import javafx.application.Platform; -import javafx.beans.property.SimpleBooleanProperty; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; -import javafx.collections.ListChangeListener; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.scene.control.SplitPane; -import javafx.scene.control.TextArea; -import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.Background; import javafx.scene.layout.HBox; -import javafx.scene.layout.Pane; -import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Text; import javafx.scene.text.TextFlow; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -public class GameController { +public class GameController implements Initializable{ public static final Logger LOGGER = LogManager.getLogger(GameController.class); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); @@ -47,13 +36,27 @@ public class GameController { private static GameStateModel gameStateModel; - + public GameController() { + super(); + } //TODO(Seraina, Sebi): Same issue as ChatController? do with setters? public GameController(ClientModel c, GameStateModel g) { client = c; gameStateModel = g; } + public void setClient(ClientModel c) { + client = c; + } + + public static ClientModel getClient() { + return client; + } + + public static GameStateModel getGameStateModel() { + return gameStateModel; + } + @FXML private AnchorPane gameBG; @FXML @@ -102,14 +105,25 @@ public class GameController { @FXML private Button noiseButton; @FXML - private TextFlow notificationText; + public TextFlow notificationText; + @FXML + private AnchorPane chatAreaGame; + + + public void addToChatArea(Node n) { + chatAreaGame.getChildren().add(n); + } + + public AnchorPane getChatAreaGame() { + return chatAreaGame; + } /** * If button 0 is clicked, send the vote message 0 to the server */ public void sendVote0() { client.getClient() - .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + 0); + .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + "$" + 0); } /** @@ -117,7 +131,7 @@ public class GameController { */ public void sendVote1() { client.getClient() - .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + 1); + .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + "$" + 1); } /** @@ -125,7 +139,7 @@ public class GameController { */ public void sendVote2() { client.getClient() - .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + 2); + .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + "$" + 2); } /** @@ -133,7 +147,7 @@ public class GameController { */ public void sendVote3() { client.getClient() - .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + 3); + .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + "$" + 3); } /** @@ -141,7 +155,7 @@ public class GameController { */ public void sendVote4() { client.getClient() - .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + 4); + .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + "$" + 4); } /** @@ -149,15 +163,21 @@ public class GameController { */ public void sendVote5() { client.getClient() - .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + 5); + .sendMsgToServer(Protocol.votedFor + "$" + client.getClient().getPosition() + "$" + 5); } /** * Sends a noise message, to the server, should be a gui message? */ public void noise() { + LOGGER.info("Do you even get here"); + LOGGER.info(client.getClient()); + LOGGER.info(client.getClient().getPosition()); + if(client.getClient() == null) { + LOGGER.info("But why???"); + } client.getClient().sendMsgToServer( - Protocol.sendMessageToAllClients + "$" + Protocol.printToGUI + GuiParameters.noiseHeardAtPosition + "$" + Protocol.sendMessageToAllClients + "$" + Protocol.printToGUI + "$" +GuiParameters.noiseHeardAtPosition + "$" + client.getClient().getPosition()); //TODO: Test!! } @@ -166,13 +186,22 @@ public class GameController { * @param msg the message to be displayed */ public void addMessageToNotificationText(String msg){ + LOGGER.trace("addMessage " + msg); Text notification = new Text(msg); - try { - notificationText.getChildren().clear(); - notificationText.getChildren().add(notification); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + notification.setFill(Color.BLACK); + notification.setStyle("-fx-font: 50 arial;"); + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + notificationText.getChildren().add(notification); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + e.printStackTrace(); + } + } + }); + //TODO: Wait for a certain time, then clear all again } @@ -180,17 +209,25 @@ public class GameController { * Clears all children from notificationText TextFlow */ public void clearNotificationText() { - try { - notificationText.getChildren().clear(); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + LOGGER.trace("clear notify"); + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + notificationText.getChildren().clear(); + } catch (Exception e) { + LOGGER.debug("Not yet initialized"); + } + } + }); + } /** * Updates the labels of the rooms accordingly to the datastructures in GameStateModel */ public void updateRoomLabels() { + LOGGER.debug("roomlables update"); String[] names = gameStateModel.getPassengerTrainClone()[0]; String[] roles = gameStateModel.getPassengerTrainClone()[1]; Text name0 = new Text(names[0]); @@ -206,106 +243,152 @@ public class GameController { Text role4 = new Text(roles[4]); Text role5 = new Text(roles[5]); - try { - lableRoom0.getChildren().clear(); - lableRoom0.getChildren().add(name0); - lableRoom0.getChildren().add(role0); - lableRoom1.getChildren().clear(); - lableRoom1.getChildren().add(name1); - lableRoom1.getChildren().add(role1); - lableRoom2.getChildren().clear(); - lableRoom2.getChildren().add(name2); - lableRoom2.getChildren().add(role2); - lableRoom3.getChildren().clear(); - lableRoom3.getChildren().add(name3); - lableRoom3.getChildren().add(role3); - lableRoom4.getChildren().clear(); - lableRoom4.getChildren().add(name4); - lableRoom4.getChildren().add(role4); - lableRoom5.getChildren().clear(); - lableRoom5.getChildren().add(name5); - lableRoom5.getChildren().add(role5); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + lableRoom0.getChildren().clear(); + lableRoom0.getChildren().add(name0); + lableRoom0.getChildren().add(role0); + lableRoom1.getChildren().clear(); + lableRoom1.getChildren().add(name1); + lableRoom1.getChildren().add(role1); + lableRoom2.getChildren().clear(); + lableRoom2.getChildren().add(name2); + lableRoom2.getChildren().add(role2); + lableRoom3.getChildren().clear(); + lableRoom3.getChildren().add(name3); + lableRoom3.getChildren().add(role3); + lableRoom4.getChildren().clear(); + lableRoom4.getChildren().add(name4); + lableRoom4.getChildren().add(role4); + lableRoom5.getChildren().clear(); + lableRoom5.getChildren().add(name5); + lableRoom5.getChildren().add(role5); + } catch (Exception e) { + LOGGER.trace("Not yet initialized"); + } + } + }); + } + + public Image loadBellImage(){ + Image bell = new Image("ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/DayOpen/bell.png"); + return bell; } /** * Adds an image of a bell on top of button0 */ public void noiseDisplay0(){ - Image bell = new Image("ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.DayOpen.bell.png"); - try { - noiseImage0.setImage(bell); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + LOGGER.debug("noise0 called"); + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + noiseImage0.setImage(loadBellImage()); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); + } /** * Adds an image of a bell on top of button1 */ public void noiseDisplay1(){ - Image bell = new Image("ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.DayOpen.bell.png"); - try { - noiseImage0.setImage(bell); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + LOGGER.debug("noise1 called"); + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + noiseImage1.setImage(loadBellImage()); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); } /** * Adds an image of a bell on top of button2 */ public void noiseDisplay2(){ - Image bell = new Image("ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.DayOpen.bell.png"); - try { - noiseImage0.setImage(bell); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + LOGGER.debug("noise2 called"); + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + noiseImage2.setImage(loadBellImage()); + } catch (Exception e) { + LOGGER.debug(e.getMessage());; + } + } + }); } /** * Adds an image of a bell on top of button3 */ - public void noiseDisplay3(){ - Image bell = new Image("ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.DayOpen.bell.png"); - try { - noiseImage0.setImage(bell); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + public void noiseDisplay3() { + LOGGER.debug("noise3 called"); + Platform.runLater(new Runnable() { + @Override + public void run() { + try { + LOGGER.debug("hello"); + noiseImage3.setImage(loadBellImage()); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); } /** * Adds an image of a bell on top of button4 */ - public void noiseDisplay4(){ - Image bell = new Image("ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.DayOpen.bell.png"); - try { - noiseImage0.setImage(bell); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + public void noiseDisplay4() { + LOGGER.debug("noise4 called"); + Platform.runLater(new Runnable() { + @Override + public void run() { + try { + LOGGER.debug("hello"); + noiseImage4.setImage(loadBellImage()); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); } /** * Adds an image of a bell on top of button5 */ public void noiseDisplay5(){ - Image bell = new Image("ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.DayOpen.bell.png"); - try { - noiseImage0.setImage(bell); - } catch (Exception e) { - LOGGER.trace("Not yet initialized"); - } + LOGGER.debug("noise5 called"); + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + noiseImage5.setImage(loadBellImage()); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); } - - public void setGameStateModel( GameStateModel gameStateModel) { GameController.gameStateModel = gameStateModel; } + + @Override + public void initialize(URL location, ResourceBundle resources) { + ChatApp.setGameController(this); + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java index b9e3ae1..6d08971 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java @@ -207,5 +207,11 @@ public class Protocol { */ public static final String printToGUI = "PTGUI"; + /** + * Sends an information to client at which position in the train from the game (0 to 5) they sit, as soon as the game starts + * {@code POSOF$position} + */ + public static final String positionOfClient = "POSOF"; + } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java index 27a47ed..0024bed 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java @@ -376,9 +376,13 @@ public class ClientHandler implements Runnable { } LOGGER.debug("Vote is:" + vote); if (vote != Integer.MAX_VALUE) { //gets MAX_VALUE when the vote wasn't valid - getLobby().getGame().getGameState().getClientVoteData().setVote(position, vote); - LOGGER.debug("Player vote: " + vote); - getLobby().getGame().getGameState().getClientVoteData().setHasVoted(position, true); + try { + getLobby().getGame().getGameState().getClientVoteData().setVote(position, vote); + LOGGER.debug("Player vote: " + vote); + getLobby().getGame().getGameState().getClientVoteData().setHasVoted(position, true); + } catch (NullPointerException e) { + LOGGER.info("Client not in Lobby"); + } } } diff --git a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml index 18eaabb..0862993 100644 --- a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml +++ b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml @@ -9,7 +9,7 @@ - + @@ -107,10 +107,11 @@ - - + + From 27c31967e5ee8ced9048db98123d82f5663a75aa Mon Sep 17 00:00:00 2001 From: Seraina Date: Sun, 1 May 2022 03:05:32 +0200 Subject: [PATCH 2/2] The game is now playable wia the game gui, there are still some quirks to work out, especially timing wise and with the POSOF network message --- OgGhostWinners.txt | 1 + .../gamelogic/ClientGameInfoHandler.java | 4 +- .../unibas/dmi/dbis/cs108/gamelogic/Game.java | 14 ++- .../dmi/dbis/cs108/gamelogic/GameState.java | 2 + .../gamelogic/ServerGameInfoHandler.java | 20 ++-- .../dmi/dbis/cs108/gamelogic/Timer.java | 2 +- .../dmi/dbis/cs108/gamelogic/VoteHandler.java | 8 +- .../dbis/cs108/multiplayer/client/Client.java | 23 +++- .../client/JClientProtocolParser.java | 13 ++- .../client/gui/GameStateModel.java | 1 + .../client/gui/game/GameController.java | 101 ++++++++++++++++-- .../multiplayer/helpers/GuiParameters.java | 19 +++- .../client/gui/game/GameDayAll.fxml | 28 ++--- 13 files changed, 184 insertions(+), 52 deletions(-) diff --git a/OgGhostWinners.txt b/OgGhostWinners.txt index 914ddb5..50bb8fd 100644 --- a/OgGhostWinners.txt +++ b/OgGhostWinners.txt @@ -1,2 +1,3 @@ B serai +serai diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java index 0ed9285..b7717f0 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java @@ -17,8 +17,8 @@ public class ClientGameInfoHandler { public static final String ghostVoteRequest = "Vote on who to ghostify!"; public static final String humanVoteRequest = "Vote for a ghost to kick off!"; public static final String noiseNotification = "Someone passed by you "; - public static final String gameOverHumansWin = "Game over: humans win!"; - public static final String gameOverGhostsWin = "Game over: ghosts win!"; + public static final String gameOverHumansWin = "Game over, humans win!"; + public static final String gameOverGhostsWin = "Game over, ghosts win!"; //relevant for gui public static final String itsNightTime = "Please wait, ghosts are active"; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java index 657a200..b5c9a17 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java @@ -95,7 +95,7 @@ public class Game implements Runnable { passenger.send(GuiParameters.updateGameState, getGame()); } try { - Thread.sleep(4000); //TODO: Is this a good intervall? + Thread.sleep(2000); //TODO: Is this a good intervall? } catch (InterruptedException e) { e.printStackTrace(); } @@ -148,19 +148,22 @@ public class Game implements Runnable { } LOGGER.info(gameState.toString()); gameStateModelUpdater(); //TODO: does that work? - + for(Passenger passenger : gameState.getPassengerTrain()) { + passenger.send(Protocol.positionOfClient + "$" + passenger.getPosition(), this); + } + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.night + "$"); i = 0; while (isOngoing) {//game cycle TODO: maybe check that more often inside game loop?! if (!isDay) { LOGGER.info("NIGHT"); gameOverCheck = voteHandler.ghostVote(gameState.getPassengerTrain(), this); setDay(true); - lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + ClientGameInfoHandler.itsDayTime + "$"); + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.day + "$"); } else { LOGGER.info("DAY"); gameOverCheck = voteHandler.humanVote(gameState.getPassengerTrain(), this); setDay(false); - lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + ClientGameInfoHandler.itsNightTime + "$"); + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.night + "$"); } if (gameOverCheck.equals(ClientGameInfoHandler.gameOverGhostsWin) || gameOverCheck.equals( ClientGameInfoHandler.gameOverHumansWin)) { @@ -169,6 +172,9 @@ public class Game implements Runnable { } lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.viewChangeToLobby + "$"); lobby.getAdmin().broadcastAnnouncementToLobby(gameOverCheck); + isOngoing = false; + Timer.ghostAfterVoteTimer(); + isOngoing = true; lobby.removeGameFromRunningGames(this); lobby.addGameToFinishedGames(this); return; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java index 1d0c725..f93005c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java @@ -174,6 +174,7 @@ public class GameState { for (int i = 0; i < array.length; i++) { stringBuilder.append("$").append(print[i]); } + stringBuilder.append("$"); return stringBuilder.toString(); } @@ -194,6 +195,7 @@ public class GameState { for (int i = 0; i < array.length; i++) { stringBuilder.append("$").append(print[i]); } + stringBuilder.append("$"); return stringBuilder.toString(); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java index 54eb4de..5337714 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java @@ -30,12 +30,10 @@ public class ServerGameInfoHandler { public static String format(String msg, Passenger passenger, Game game) { switch (msg) { case ClientGameInfoHandler.ghostVoteRequest: - msg = Protocol.serverRequestsGhostVote + "$" + passenger.getPosition() + "$" - + game.gameState.toString(); + msg = Protocol.serverRequestsGhostVote + "$" + passenger.getPosition() + "$"; break; case ClientGameInfoHandler.humanVoteRequest: - msg = Protocol.serverRequestsHumanVote + "$" + passenger.getPosition() + "$" - + game.gameState.humanToString(); + msg = Protocol.serverRequestsHumanVote + "$" + passenger.getPosition() + "$"; break; default: msg = Protocol.printToClientConsole + "$" + msg; @@ -56,11 +54,11 @@ public class ServerGameInfoHandler { switch (msg) { case ClientGameInfoHandler.ghostVoteRequest: case ClientGameInfoHandler.itsNightTime: - msg = Protocol.printToClientConsole + "$Ghosts are voting: " + game.gameState.toString(); + msg = Protocol.printToClientConsole + "$Ghosts are voting"; break; case ClientGameInfoHandler.humanVoteRequest: case ClientGameInfoHandler.itsDayTime: - msg = Protocol.printToClientConsole + "$Humans are voting:" + game.gameState.toString(); + msg = Protocol.printToClientConsole + "$Humans are voting"; break; case GuiParameters.updateGameState: msg = Protocol.printToGUI + "$" + GuiParameters.updateGameState + game.getGameState().toString(); @@ -114,9 +112,10 @@ public class ServerGameInfoHandler { case ClientGameInfoHandler.noiseNotification + 5 + " time(s)": String outMsg = npc.getName() + ": " + noiseRandomizer(); //TODO: add likelyhood + Timer.ghostAfterVoteTimer(); game.getLobby().getAdmin().broadcastNpcChatMessageToLobby(outMsg); - game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + GuiParameters.noiseHeardAtPosition - + "$" + npc.getPosition() + "$"); + game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.noiseHeardAtPosition + + "$" + npc.getPosition()); break; case ClientGameInfoHandler.ghostVoteRequest: npc.vote(game); @@ -138,9 +137,10 @@ public class ServerGameInfoHandler { case ClientGameInfoHandler.noiseNotification + 4 + " time(s)": case ClientGameInfoHandler.noiseNotification + 5 + " time(s)": String outMsg = npc.getName() + ": " + noiseRandomizer(); + Timer.ghostAfterVoteTimer(); game.getLobby().getAdmin().broadcastNpcChatMessageToLobby(outMsg); - game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + GuiParameters.noiseHeardAtPosition - + "$" + npc.getPosition() + "$"); + game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.noiseHeardAtPosition + + "$" + npc.getPosition()); break; case ClientGameInfoHandler.humanVoteRequest: npc.vote(game); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java index e5eef8e..d52ec23 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java @@ -22,7 +22,7 @@ public class Timer { * The length of time in seconds after the ghost vote during which the ghosts visually walk to / * from their victim and the timespan within which humans will hear a noise. After this, the day starts. */ - public static final int ghostAfterVoteTime = 7; + public static final int ghostAfterVoteTime = 4; /** * The maximum length of the human vote in the day, in seconds */ diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index 377def6..07d3ce3 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -2,6 +2,8 @@ package ch.unibas.dmi.dbis.cs108.gamelogic; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; +import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters; +import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -66,7 +68,7 @@ public class VoteHandler { } } LOGGER.info("Most votes for: " + newGhostPosition); - + Timer.ghostAfterVoteTimer(); for(Passenger passenger : passengers) { if(passenger.getIsGhost() || passenger.getIsSpectator()) { passenger.send(passengers[newGhostPosition].getName() + ClientGameInfoHandler.gotGhostyfied, game); @@ -85,7 +87,7 @@ public class VoteHandler { walk by is being updated. Finally, each passenger receives information about how often he heard something during this night. The player who's just been ghostified is ignored since he didn't participate in this night's ghostification. */ - + Timer.ghostAfterVoteTimer(); int[] noiseAmount = new int[6]; for (int i = 0; i < passengers.length; i++) { if (passengers[i].getIsGhost() && i != newGhostPosition) { @@ -152,6 +154,7 @@ public class VoteHandler { } Timer.humanVoteTimer(game); + game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.VoteIsOver + "$"); int currentMax = humanVoteEvaluation(passengers, votesForPlayers, game.getGameState().getClientVoteData(), game); @@ -170,6 +173,7 @@ public class VoteHandler { ClientGameInfoHandler.humansVotedFor + voteIndex + ClientGameInfoHandler.isAHuman, game); } } + Timer.ghostAfterVoteTimer(); if (passengers[voteIndex].getIsGhost()) { // if player is a ghost if (passengers[voteIndex].getIsOG()) { // if ghost is OG --> end game, humans win System.out.println(ClientGameInfoHandler.gameOverHumansWin); 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 27673fa..7a9b84a 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 @@ -14,6 +14,7 @@ import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ClientPinger; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; +import com.google.inject.Guice; import java.net.InetAddress; import java.net.Socket; import java.io.*; @@ -329,13 +330,17 @@ public class Client { */ public void sendToGUI(String parameter, String data) { try { - LOGGER.debug("GUI: PARAMETER:" + parameter + ", DATA: " + data); + if(!parameter.equals(GuiParameters.updateGameState)) { + LOGGER.debug("GUI: PARAMETER:" + parameter + ", DATA: " + data); + } switch (parameter) { - case ClientGameInfoHandler.itsNightTime: //ClientGameInfoHandler + case GuiParameters.night: //ClientGameInfoHandler gameStateModel.setDayClone(false); + chatApp.getGameController().setNoiseButtonInvisible(); break; - case ClientGameInfoHandler.itsDayTime: //ClientGameInfoHandler + case GuiParameters.day: //ClientGameInfoHandler gameStateModel.setDayClone(true); + chatApp.getGameController().setNoiseButtonVisible(); break; case GuiParameters.updateGameState: gameStateModel.setGSFromString(data); @@ -353,6 +358,9 @@ public class Client { //updateListOfLobbies(data); (commented out due to compiling error) //TODO break; + case GuiParameters.VoteIsOver: + chatApp.getGameController().clearAllNoiseDisplay(); + break; case GuiParameters.listOfPLayers: updateListOfClients(data); //TODO @@ -407,7 +415,7 @@ public class Client { new Thread(() -> { try { chatApp.getGameController().addMessageToNotificationText(data); - Thread.sleep(3000); + Thread.sleep(5000); chatApp.getGameController().clearNotificationText(); } catch (InterruptedException e) { LOGGER.warn(e.getMessage()); @@ -417,19 +425,26 @@ public class Client { } public void determineNoiseDisplay(int position) { + LOGGER.debug(position); switch (position) { case 0: chatApp.getGameController().noiseDisplay0(); + break; case 1: chatApp.getGameController().noiseDisplay1(); + break; case 2: chatApp.getGameController().noiseDisplay2(); + break; case 3: chatApp.getGameController().noiseDisplay3(); + break; case 4: chatApp.getGameController().noiseDisplay4(); + break; case 5: chatApp.getGameController().noiseDisplay5(); + break; } } 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 58d8b98..275db4e 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 @@ -40,6 +40,9 @@ public class JClientProtocolParser { break; case Protocol.printToClientConsole: System.out.println(msg.substring(6)); + if (!msg.substring(6).equals("Your vote was invalid")) { + c.notificationTextDisplay(msg.substring(6)); + } break; case Protocol.printToClientChat: //todo: handle chat separately from console. @@ -74,9 +77,13 @@ public class JClientProtocolParser { c.sendToGUI(parameter,data); break; case Protocol.positionOfClient: - int position = Integer.parseInt(msg.substring(6)); - GameController.getClient().getClient().setPosition(position); - default: + try { + int position = Integer.parseInt(msg.substring(6)); + GameController.getClient().getClient().setPosition(position); + } catch (Exception e) { + LOGGER.warn(msg.substring(6)); + } + default: System.out.println("Received unknown command"); } } 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 5a4a594..164419e 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 @@ -117,6 +117,7 @@ public class GameStateModel { j = right.indexOf(':'); roles[i] = right.substring(0, j); kickedOff[i] = Boolean.parseBoolean(right.substring(j + 1)); + LOGGER.info(kickedOff[i]); i++; } setPassengerTrainClone(names, roles); 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 2a72312..22f5a5c 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 @@ -181,6 +181,14 @@ public class GameController implements Initializable{ + client.getClient().getPosition()); //TODO: Test!! } + public void setNoiseButtonInvisible() { + noiseButton.setVisible(false); + } + + public void setNoiseButtonVisible() { + noiseButton.setVisible(true); + } + /** * Takes a given message and displays it in the notificationText Flow in the game Scene * @param msg the message to be displayed @@ -197,7 +205,6 @@ public class GameController implements Initializable{ notificationText.getChildren().add(notification); } catch (Exception e) { LOGGER.debug(e.getMessage()); - e.printStackTrace(); } } }); @@ -214,7 +221,7 @@ public class GameController implements Initializable{ @Override public void run() { try { - notificationText.getChildren().clear(); + notificationText.getChildren().remove(0); } catch (Exception e) { LOGGER.debug("Not yet initialized"); } @@ -230,18 +237,73 @@ public class GameController implements Initializable{ LOGGER.debug("roomlables update"); String[] names = gameStateModel.getPassengerTrainClone()[0]; String[] roles = gameStateModel.getPassengerTrainClone()[1]; + boolean[] kickedOff = gameStateModel.getKickedOff(); Text name0 = new Text(names[0]); + name0.setStyle("-fx-font: 25 arial;"); + name0.setFill(Color.WHITE); Text name1 = new Text(names[1]); + name1.setStyle("-fx-font: 25 arial;"); + name1.setFill(Color.WHITE); Text name2 = new Text(names[2]); + name2.setStyle("-fx-font: 25 arial;"); + name2.setFill(Color.WHITE); Text name3 = new Text(names[3]); + name3.setStyle("-fx-font: 25 arial;"); + name3.setFill(Color.WHITE); Text name4 = new Text(names[4]); + name4.setStyle("-fx-font: 25 arial;"); + name4.setFill(Color.WHITE); Text name5 = new Text(names[5]); - Text role0 = new Text(roles[0]); - Text role1 = new Text(roles[1]); - Text role2 = new Text(roles[2]); - Text role3 = new Text(roles[3]); - Text role4 = new Text(roles[4]); - Text role5 = new Text(roles[5]); + name5.setStyle("-fx-font: 25 arial;"); + name5.setFill(Color.WHITE); + Text role0; + if(kickedOff[0]) { + role0 = new Text("\nkicked off"); + } else { + role0 = new Text("\n" + roles[0]); + } + role0.setStyle("-fx-font: 25 arial;"); + role0.setFill(Color.WHITE); + Text role1; + if(kickedOff[1]) { + role1 = new Text("\nkicked off"); + } else { + role1 = new Text("\n" + roles[0]); + } + role1.setStyle("-fx-font: 25 arial;"); + role1.setFill(Color.WHITE); + Text role2; + if(kickedOff[2]) { + role2 = new Text("\nkicked off"); + } else { + role2 = new Text("\n" + roles[0]); + } + role2.setStyle("-fx-font: 25 arial;"); + role2.setFill(Color.WHITE); + Text role3; + if(kickedOff[3]) { + role3 = new Text("\nkicked off"); + } else { + role3 = new Text("\n" + roles[0]); + } + role3.setStyle("-fx-font: 25 arial;"); + role3.setFill(Color.WHITE); + Text role4; + if(kickedOff[4]) { + role4 = new Text("\nkicked off"); + } else { + role4 = new Text("\n" + roles[0]); + } + role4.setStyle("-fx-font: 25 arial;"); + role4.setFill(Color.WHITE); + Text role5; + if(kickedOff[5]) { + role5 = new Text("\nkicked off"); + } else { + role5 = new Text("\n" + roles[0]); + } + role5.setStyle("-fx-font: 25 arial;"); + role5.setFill(Color.WHITE); Platform.runLater(new Runnable(){ @Override @@ -368,7 +430,7 @@ public class GameController implements Initializable{ /** * Adds an image of a bell on top of button5 */ - public void noiseDisplay5(){ + public void noiseDisplay5() { LOGGER.debug("noise5 called"); Platform.runLater(new Runnable(){ @Override @@ -382,6 +444,27 @@ public class GameController implements Initializable{ }); } + /** + * Clears all bells from the view + */ + public void clearAllNoiseDisplay() { + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + noiseImage0.setImage(null); + noiseImage1.setImage(null); + noiseImage2.setImage(null); + noiseImage3.setImage(null); + noiseImage4.setImage(null); + noiseImage5.setImage(null); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); + } + public void setGameStateModel( GameStateModel gameStateModel) { GameController.gameStateModel = gameStateModel; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java index 5af59de..4bbba46 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java @@ -40,11 +40,24 @@ public class GuiParameters { */ public static final String viewChangeToGame = "VCGAME"; - - /** * Tells, Gui, who the members of a specified Lobby are. * Form: {@code LMEMBS$$$..} */ - public static String changeToLobby = "LMEMBS"; + public static final String changeToLobby = "LMEMBS"; + + /** + * Informs the GUI, that a vote is over + */ + public static final String VoteIsOver = "VOTEOVER"; + + /** + * Informes Gui, that its the night + */ + public static final String night = "NIGHT"; + /** + * Informes Gui, that its the day + */ + public static final String day = "DAY"; + } diff --git a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml index 0862993..8c6467c 100644 --- a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml +++ b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml @@ -13,14 +13,14 @@ - + - - - - - - + + + + + + - + - - - - - - + + + + + +