From 1b30cd64351871aacad5cbba5fd69be375078f11 Mon Sep 17 00:00:00 2001 From: Seraina Date: Sun, 1 May 2022 12:41:59 +0200 Subject: [PATCH 1/2] Added game view to lounge viwe via anchor pane, currently there is a dedicated button for starting a game, might need to be removed later --- .../cs108/multiplayer/client/gui/ChatApp.java | 21 ++++++--- .../gui/lounge/LoungeSceneViewController.java | 46 +++++++++++++++++-- .../client/gui/lounge/LoungeSceneView.fxml | 4 +- 3 files changed, 58 insertions(+), 13 deletions(-) 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 064dd54..aa85546 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 @@ -29,6 +29,9 @@ public class ChatApp extends Application { private static LoungeSceneViewController loungeSceneViewController; private LoungeSceneViewController lSVController; + public Node chat; + public Node game; + public ChatApp() { super(); LOGGER.info("Empty ChatApp constructor got called: "); @@ -122,20 +125,24 @@ public class ChatApp extends Application { public void start(Stage primaryStage) throws Exception { this.setcModel(clientModel); this.setGameC(gameController); - this.setlSVController(loungeSceneViewController); + gameC.setClient(cModel); gameC.setGameStateModel(GameController.getGameStateModel()); - URL chatResource = ChatApp.class.getResource( - "chat/ChatView.fxml"); - URL gameResource = ChatApp.class.getResource( - "game/GameDayAll.fxml"); + try { + URL chatResource = ChatApp.class.getResource("chat/ChatView.fxml"); + URL gameResource = ChatApp.class.getResource("game/GameDayAll.fxml"); + this.chat = FXMLLoader.load(Objects.requireNonNull(chatResource)); + this.game = FXMLLoader.load(Objects.requireNonNull(gameResource)); + } catch (Exception e) { + LOGGER.warn(e.getMessage()); + } URL loungeResource = ChatApp.class.getResource( "lounge/LoungeSceneView.fxml"); try { Parent lounge = FXMLLoader.load( Objects.requireNonNull(loungeResource)); - Node chat = FXMLLoader.load(Objects.requireNonNull(chatResource)); - Node game = FXMLLoader.load(Objects.requireNonNull(gameResource)); + this.setlSVController(loungeSceneViewController); + lSVController.setChatApp(this); // TODO bin chatController.getChatPaneRoot() border to root border for rezising Scene scene = new Scene(lounge); scene.setRoot(lounge); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java index ac083a3..8d7728c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java @@ -1,5 +1,6 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge; +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.ChatApp; import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.events.ChangeNameButtonPressedEventHandler; @@ -9,8 +10,10 @@ import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.ResourceBundle; import javafx.application.Application; +import javafx.application.Platform; import javafx.beans.binding.StringBinding; import javafx.beans.property.SimpleListProperty; import javafx.beans.property.SimpleMapProperty; @@ -23,7 +26,9 @@ import javafx.collections.ObservableMap; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; +import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ListCell; @@ -35,14 +40,22 @@ import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.text.Text; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class LoungeSceneViewController implements Initializable { + public static final Logger LOGGER = LogManager.getLogger(LoungeSceneViewController.class); + public static final BudaLogConfig l = new BudaLogConfig(LOGGER); @FXML - public Button leaveLobbyButton; + private Button leaveLobbyButton; @FXML - public Button newGameButton; + private Button startGame; + @FXML + private Button newGameButton; + @FXML + private AnchorPane gameAnchorPane; @FXML private ListView LobbyListView; @FXML @@ -61,7 +74,8 @@ public class LoungeSceneViewController implements Initializable { private ToolBar NTtBToolBar; public static ClientModel client; - public static ChatApp chatApp; + private static ChatApp chatApp; + private ChatApp cApp; private ObservableMap> lobbyToMemberssMap; private HashMap clientToLobbyMap; @@ -71,6 +85,13 @@ public class LoungeSceneViewController implements Initializable { lobbyToMemberssMap = FXCollections.observableHashMap(); } + public void setChatApp(ChatApp chatApp) { + LoungeSceneViewController.chatApp = chatApp; + } + + public void setcApp(ChatApp cApp) { + this.cApp = cApp; + } /** * Called to initialize a controller after its root element has been completely processed. @@ -82,6 +103,7 @@ public class LoungeSceneViewController implements Initializable { @Override public void initialize(URL location, ResourceBundle resources) { ChatApp.setLoungeSceneViewController(this); + setcApp(chatApp); ChangeNameButton.setOnAction(event -> changeName()); LeaveServerButton.setOnAction(event -> leaveServer()); newGameButton.setOnAction(event -> newGame()); @@ -100,6 +122,19 @@ public class LoungeSceneViewController implements Initializable { }); } + public void addGameView(){ + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + gameAnchorPane.getChildren().add(chatApp.game); + } catch (Exception e) { + LOGGER.debug("Not yet initialized"); + } + } + }); + } + public void updateClientListView(ObservableList names) { ObservableList clientsLeft = ClientListView.getItems(); clientsLeft.removeAll(names); @@ -162,12 +197,13 @@ public class LoungeSceneViewController implements Initializable { LobbyListView.getItems().add(lobby); } - private void joinGame(String lobbyID) { + public void joinGame(String lobbyID) { client.getClient().sendMsgToServer(Protocol.joinLobby + "$" + lobbyID); } - private void startGame() { + public void startGame() { client.getClient().sendMsgToServer(Protocol.startANewGame); + addGameView(); } public void leaveLobby() {client.getClient().sendMsgToServer(Protocol.leaveLobby);} diff --git a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml index eff7e85..24670cd 100644 --- a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml +++ b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneView.fxml @@ -22,7 +22,9 @@
-
From f0f4f9142eb7d001122bc1619e8ae8d57d8becde Mon Sep 17 00:00:00 2001 From: Seraina Date: Sun, 1 May 2022 13:11:17 +0200 Subject: [PATCH 2/2] Now the Game appears when a game is started and disapears again when it is over --- OgGhostWinners.txt | 1 + .../unibas/dmi/dbis/cs108/gamelogic/Game.java | 2 +- .../dbis/cs108/multiplayer/client/Client.java | 14 ++++++++------ .../cs108/multiplayer/client/gui/ChatApp.java | 4 ++++ .../gui/lounge/LoungeSceneViewController.java | 19 ++++++++++++++++++- .../multiplayer/helpers/GuiParameters.java | 4 ---- .../server/JServerProtocolParser.java | 4 ++-- 7 files changed, 34 insertions(+), 14 deletions(-) diff --git a/OgGhostWinners.txt b/OgGhostWinners.txt index 50bb8fd..6737b5a 100644 --- a/OgGhostWinners.txt +++ b/OgGhostWinners.txt @@ -1,3 +1,4 @@ B serai serai +serai 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 b5c9a17..14bd71b 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 @@ -170,10 +170,10 @@ public class Game implements Runnable { if (gameOverCheck.equals(ClientGameInfoHandler.gameOverGhostsWin) && getOgGhost().getIsPlayer()) { OgGhostHighScore.addOgGhostWinner(getOgGhost().getName()); } - lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.viewChangeToLobby + "$"); lobby.getAdmin().broadcastAnnouncementToLobby(gameOverCheck); isOngoing = false; Timer.ghostAfterVoteTimer(); + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.viewChangeToLobby + "$"); isOngoing = true; lobby.removeGameFromRunningGames(this); lobby.addGameToFinishedGames(this); 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 6aa94b0..5760136 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 @@ -383,15 +383,17 @@ public class Client { case GuiParameters.getMembersInLobby: updateLobbyMembers(data); break; - //case GuiParameters.viewChangeToGame: (commented out due to compiling error) + case GuiParameters.viewChangeToGame: + chatApp.getLoungeSceneViewController().addGameView(); //TODO - //break; (commented out due to compiling error) - //case GuiParameters.viewChangeToStart: (commented out due to compiling error) + break; + /*case GuiParameters.viewChangeToStart: //TODO - //break; (commented out due to compiling error) - //case GuiParameters.viewChangeToLobby: (commented out due to compiling error) + break;*/ + case GuiParameters.viewChangeToLobby: + chatApp.getLoungeSceneViewController().removeGameView(); //TODO - //break; (commented out due to compiling error) + break; case GuiParameters.addNewMemberToLobby: addPlayerToLobby(data); break; 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 aa85546..9413cc1 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 @@ -99,6 +99,10 @@ public class ChatApp extends Application { return chatController; } + public LoungeSceneViewController getLoungeSceneViewController() { + return loungeSceneViewController; + } + public LoungeSceneViewController getlSVController() { return lSVController; } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java index 8d7728c..f538efe 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/lounge/LoungeSceneViewController.java @@ -127,6 +127,8 @@ public class LoungeSceneViewController implements Initializable { @Override public void run() { try { + newGameButton.setVisible(false); + startGame.setVisible(false); gameAnchorPane.getChildren().add(chatApp.game); } catch (Exception e) { LOGGER.debug("Not yet initialized"); @@ -135,6 +137,21 @@ public class LoungeSceneViewController implements Initializable { }); } + public void removeGameView(){ + Platform.runLater(new Runnable() { + @Override + public void run() { + try { + newGameButton.setVisible(true); + startGame.setVisible(true); + gameAnchorPane.getChildren().clear(); + } catch (Exception e) { + LOGGER.debug("Not yet initialized"); + } + } + }); + } + public void updateClientListView(ObservableList names) { ObservableList clientsLeft = ClientListView.getItems(); clientsLeft.removeAll(names); @@ -203,7 +220,7 @@ public class LoungeSceneViewController implements Initializable { public void startGame() { client.getClient().sendMsgToServer(Protocol.startANewGame); - addGameView(); + //addGameView(); } public void leaveLobby() {client.getClient().sendMsgToServer(Protocol.leaveLobby);} 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 3186285..449b767 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 @@ -48,10 +48,6 @@ public class GuiParameters { */ public static final String getMembersInLobby = "LMEMBS"; - /** - * Tells Gui, that a new Lobby has been created. Form: {@code NLOBBY$:} - */ - public static final String changeToLobby = "LMEMBS"; /** * Informs the GUI, that a vote is over diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java index b5d499e..59121c4 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java @@ -104,7 +104,7 @@ public class JServerProtocolParser { break; case Protocol.leaveLobby: h.leaveLobby(); - //h.sendMsgToClient(Protocol.printToGUI + "$" + GuiParameters.viewChangeToStart + "$"); (commented out due to compiling error) + h.sendMsgToClient(Protocol.printToGUI + "$" + GuiParameters.viewChangeToStart + "$"); break; case Protocol.votedFor: LOGGER.debug("Made it here"); @@ -113,7 +113,7 @@ public class JServerProtocolParser { break; case Protocol.startANewGame: h.startNewGame(); - //h.sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.viewChangeToGame + "$"); (commented out due to compiling error) + h.sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.viewChangeToGame + "$"); break; case Protocol.listGames: h.listGames();