From 8f8491b1ad2c26c10a56dce7b984d5e324268a5c Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Sun, 17 May 2026 22:12:38 +0200 Subject: [PATCH] Add: Added SKipTurn Button and Details Button. Fixed: TCP now display leaderboard --- .../gc14/Network/TCP/Client/TCPClient.java | 8 +--- .../View/GUI/LeaderboardFXMLController.java | 46 ++++++++++--------- .../gc14/View/GUI/MainFXMLController.java | 30 ++++++++++++ src/main/resources/GUIScene/styles.css | 14 ++++++ 4 files changed, 70 insertions(+), 28 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java index 8ce4d76..efd91db 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java +++ b/src/main/java/it/polimi/ingsw/gc14/Network/TCP/Client/TCPClient.java @@ -161,18 +161,14 @@ public class TCPClient implements IClient { if (event.getIsError()) { controller.view.showError(event.toString()); } else { - synchronized (controller) { - event.apply(controller.miniModel); - } - controller.view.render(); - + controller.view.applyAndRender(event); } } else if (read instanceof MiniModel model) { synchronized (controller) { controller.setModel(model); + controller.view.render(); } - controller.view.render(); } } catch (ClassNotFoundException e) { diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java index 564759d..36fed83 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LeaderboardFXMLController.java @@ -66,32 +66,34 @@ public class LeaderboardFXMLController { public void render() { rankingList.getChildren().clear(); + if(controller.miniModel.standingPlayers!=null) + { + List sorted = controller.miniModel.standingPlayers; - List sorted = controller.miniModel.standingPlayers; + boolean iWon = sorted.get(0).getUserName().equals(controller.myUsername); - boolean iWon = sorted.get(0).getUserName().equals(controller.myUsername); + // Label grande Winner / Game Over + Label outcomeLabel = new Label(iWon ? "\uD83C\uDFC6 WINNER! \uD83C\uDFC6" : "GAME OVER"); + outcomeLabel.setStyle( + "-fx-font-size: 64px;" + + "-fx-font-weight: bold;" + + "-fx-text-fill: " + (iWon ? "#FFD700;" : "#FF4444;") + ); + DropShadow glow = new DropShadow(); + glow.setColor(iWon ? Color.rgb(255, 200, 0, 0.95) : Color.rgb(220, 0, 0, 0.95)); + glow.setRadius(35); + glow.setSpread(0.35); + outcomeLabel.setEffect(glow); + rankingList.getChildren().add(outcomeLabel); - // Label grande Winner / Game Over - Label outcomeLabel = new Label(iWon ? "\uD83C\uDFC6 WINNER! \uD83C\uDFC6" : "GAME OVER"); - outcomeLabel.setStyle( - "-fx-font-size: 64px;" + - "-fx-font-weight: bold;" + - "-fx-text-fill: " + (iWon ? "#FFD700;" : "#FF4444;") - ); - DropShadow glow = new DropShadow(); - glow.setColor(iWon ? Color.rgb(255, 200, 0, 0.95) : Color.rgb(220, 0, 0, 0.95)); - glow.setRadius(35); - glow.setSpread(0.35); - outcomeLabel.setEffect(glow); - rankingList.getChildren().add(outcomeLabel); + // Separatore + Region sep = new Region(); + sep.setPrefHeight(16); + rankingList.getChildren().add(sep); - // Separatore - Region sep = new Region(); - sep.setPrefHeight(16); - rankingList.getChildren().add(sep); - - for (int i = 0; i < sorted.size(); i++) { - rankingList.getChildren().add(createPlayerRow(i + 1, sorted.get(i))); + for (int i = 0; i < sorted.size(); i++) { + rankingList.getChildren().add(createPlayerRow(i + 1, sorted.get(i))); + } } } diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/MainFXMLController.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/MainFXMLController.java index 45899f9..c2559d1 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/MainFXMLController.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/MainFXMLController.java @@ -498,6 +498,25 @@ public class MainFXMLController { VBox.setMargin(info, new Insets(5, 5, 5, 5)); sidePanel.getChildren().add(info); + // ===== NUOVO: bottoni Skip Turn e Dettagli ===== + HBox buttonRow = new HBox(8); + buttonRow.setAlignment(Pos.CENTER); + VBox.setMargin(buttonRow, new Insets(0, 5, 5, 5)); + + javafx.scene.control.Button skipBtn = new javafx.scene.control.Button("Skip Turn"); + skipBtn.getStyleClass().add("action-button"); + skipBtn.setOnAction(e -> controller.skipTurn(controller.myUsername)); + addHoverZoom(skipBtn); + + javafx.scene.control.Button detailsBtn = new javafx.scene.control.Button("Ending Details"); + detailsBtn.getStyleClass().add("action-button"); + detailsBtn.setOnAction(e -> openDetailsPopup()); + addHoverZoom(detailsBtn); + + buttonRow.getChildren().addAll(skipBtn, detailsBtn); + sidePanel.getChildren().add(buttonRow); + // ================================================ + for (Player player : controller.miniModel.players.values()) { renderPlayer(player); } @@ -574,4 +593,15 @@ public class MainFXMLController { } showPopup(); } + private void openDetailsPopup() { + popupCards.getChildren().clear(); + ImageView img = new ImageView(loadImage("/GUIImages/Backs/back-118.png")); + img.setFitHeight(290); + img.setPreserveRatio(true); + addClip(img); + StackPane wrapper = new StackPane(img); + addShadow(wrapper); + popupCards.getChildren().add(wrapper); + showPopup(); + } } \ No newline at end of file diff --git a/src/main/resources/GUIScene/styles.css b/src/main/resources/GUIScene/styles.css index 77d2670..6a47c47 100644 --- a/src/main/resources/GUIScene/styles.css +++ b/src/main/resources/GUIScene/styles.css @@ -47,4 +47,18 @@ -fx-background-insets: 0, 5, 10, 15; -fx-background-radius: 15, 12, 8, 4; -fx-padding: 15 15 15 15; +} +.action-button { + -fx-background-color: #9d0208; + -fx-text-fill: white; + -fx-font-family: "Inknut Antiqua"; + -fx-font-size: 11px; + -fx-background-radius: 8; + -fx-border-radius: 8; + -fx-padding: 4 10 4 10; + -fx-cursor: hand; +} + +.action-button:hover { + -fx-background-color: #b42224; } \ No newline at end of file