From 0f7095fc4ee325b48adac61733ea9170b55cd38a Mon Sep 17 00:00:00 2001 From: AleandroPagani Date: Sun, 10 May 2026 18:52:33 +0200 Subject: [PATCH] Initial code refactoring --- .../polimi/ingsw/gc14/ClientLauncherGUI.java | 3 + .../gc14/View/GUI/MainFXMLController.java | 319 ++++++++++-------- src/main/resources/GUIScene/main.fxml | 38 ++- src/main/resources/GUIScene/styles.css | 39 ++- 4 files changed, 239 insertions(+), 160 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java b/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java index dfec71d..9c59ef6 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java +++ b/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java @@ -7,12 +7,15 @@ import it.polimi.ingsw.gc14.View.GUI.GUI; import it.polimi.ingsw.gc14.View.GUI.LoginView; import javafx.application.Application; import javafx.application.Platform; +import javafx.scene.text.Font; import javafx.stage.Stage; public class ClientLauncherGUI extends Application { @Override public void start(Stage stage) { + Font.loadFont(getClass().getResourceAsStream("/Fonts/InknutAntiqua-Regular.ttf"), 14); + LoginView loginView = new LoginView(); GUI view = new GUI(stage); 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 ed3c56d..0902f6d 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 @@ -8,10 +8,7 @@ import it.polimi.ingsw.gc14.Model.Game; import it.polimi.ingsw.gc14.Model.PlayableCard; import it.polimi.ingsw.gc14.Model.Player; import it.polimi.ingsw.gc14.Model.Slot; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; -import javafx.geometry.Bounds; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; @@ -19,7 +16,6 @@ import javafx.scene.control.Label; import javafx.scene.image.*; import javafx.scene.layout.*; import javafx.scene.shape.*; -import javafx.scene.text.Font; import javafx.stage.Popup; import java.util.ArrayList; @@ -33,9 +29,9 @@ public class MainFXMLController { @FXML private HBox upperList; @FXML private HBox lowerList; @FXML private HBox myHand; - @FXML private VBox playersHand; + @FXML private VBox sidePanel; @FXML private Button reload; - @FXML private HBox INFO; + @FXML private HBox info; @FXML private Label era; @FXML private Label round; @FXML private Label player; @@ -49,123 +45,24 @@ public class MainFXMLController { @FXML public void initialize() { + + mainHBox.sceneProperty().addListener((obs, oldScene, newScene) -> { + if (newScene != null) { + newScene.getRoot().applyCss(); + } + }); initPopup(); } - public void setModel(Game model) { - this.model = model; - } + public void setModel(Game model) {this.model = model;} public void setController(ClientController controller) {this.controller = controller;} public void setUsername(String username) {this.username = username;} public void render() { - Font.loadFont(getClass().getResourceAsStream("/Fonts/InknutAntiqua-Regular.ttf"), 16); - - - BackgroundSize size = new BackgroundSize( - BackgroundSize.AUTO, // width - BackgroundSize.AUTO, // height - false, // widthAsPercentage - false, // heightAsPercentage - true, // contain - true // cover ← questo è quello che ti serve - ); - - mainHBox.setBackground(new Background(new BackgroundImage( - new Image(getClass().getResourceAsStream("/GUIImages/Background.png")), - BackgroundRepeat.NO_REPEAT, - BackgroundRepeat.NO_REPEAT, - BackgroundPosition.CENTER, - size - ))); // Upper list - upperList.setSpacing(6); - upperList.setAlignment(Pos.CENTER); - upperList.getChildren().clear(); - - int i = 0; - for (TribeCard card : model.getUpperListTribeCards()) { - final int index = i; - - ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); - img.fitHeightProperty().bind(upperList.heightProperty().subtract(10)); - img.setPreserveRatio(true); - - img.setOnMouseClicked(e -> controller.drawUpperTribeCard(username, index)); - - upperList.getChildren().add(img); - i++; - } - - i = 0; - for (BuildingCard card : model.getUpperListBuilding()) { - final int index = i; - - ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); - img.fitHeightProperty().bind(upperList.heightProperty().subtract(10)); - img.setPreserveRatio(true); - - img.setOnMouseClicked(e -> controller.drawUpperBuildingCard(username, index)); - - upperList.getChildren().add(img); - i++; - } - - - // Board - board.setSpacing(6); - board.setAlignment(Pos.CENTER); - board.getChildren().clear(); - - i = 0; - for (Map.Entry entry : model.getSlotMap().entrySet()) { - Slot slot = entry.getKey(); - final int index = i; - - ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-"+slot.getSlotId()+".png"))); - - img.fitHeightProperty().bind(board.heightProperty().subtract(10)); - img.setPreserveRatio(true); - - img.setOnMouseClicked(e -> controller.slotChoice(username, index)); - - board.getChildren().add(img); - i++; - } - - - - // Lower list - lowerList.setSpacing(6); - lowerList.setAlignment(Pos.CENTER); - lowerList.getChildren().clear(); - - i = 0; - for (TribeCard card : model.getLowerListTribeCards()) { - final int index = i; - - ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); - img.fitHeightProperty().bind(lowerList.heightProperty().subtract(10)); - img.setPreserveRatio(true); - - img.setOnMouseClicked(e -> controller.drawLowerTribeCard(username, index)); - - lowerList.getChildren().add(img); - i++; - } - - i = 0; - for (BuildingCard card : model.getLowerListBuilding()) { - final int index = i; - - ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); - img.fitHeightProperty().bind(lowerList.heightProperty().subtract(10)); - img.setPreserveRatio(true); - - img.setOnMouseClicked(e -> controller.drawLowerBuildingCard(username, index)); - - lowerList.getChildren().add(img); - i++; - } + renderBackground(); + renderUpper(); + renderBoard(); + renderLower(); // My hand @@ -183,31 +80,172 @@ public class MainFXMLController { // Other players and info - playersHand.getChildren().clear(); + sidePanel.getChildren().clear(); era.setText(Integer.toString(model.getCurrentState().getEra())); round.setText(Integer.toString(model.getCurrentState().getRound())); player.setText(model.getCurrentState().getCurrentPlayer().getUserName()); - era.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 20px; -fx-font-weight: bold; -fx-text-fill: black;"); - round.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 20px; -fx-font-weight: bold; -fx-text-fill: black;"); - player.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 20px; -fx-font-weight: bold; -fx-text-fill: black;"); - //INFO.getChildren().; - //INFO.getChildren().add(round); - //INFO.getChildren().add(player); - playersHand.getChildren().add(INFO); - renderPlayers(playersHand); + + sidePanel.setSpacing(6); + sidePanel.getChildren().add(info); + renderPlayers(sidePanel); } + + + + + + + + + + + private void renderBackground() { + BackgroundSize size = new BackgroundSize( + BackgroundSize.AUTO, BackgroundSize.AUTO, + false, false, true, true + ); + mainHBox.setBackground(new Background(new BackgroundImage( + new Image(getClass().getResourceAsStream("/GUIImages/Background.png")), + BackgroundRepeat.NO_REPEAT, + BackgroundRepeat.NO_REPEAT, + BackgroundPosition.CENTER, + size + ))); + } + + + private ImageView createCard(PlayableCard card) { + ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); + img.setFitHeight(200); + img.setPreserveRatio(true); + + Rectangle clip = new Rectangle(); + clip.setWidth(img.getBoundsInLocal().getWidth()); + clip.setHeight(200); + clip.setArcWidth(20); + clip.setArcHeight(20); + img.setClip(clip); + return img; + } + + + private ImageView createSlot(Slot slot) { + ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-"+slot.getSlotId()+".png"))); + img.setFitHeight(240); + img.setPreserveRatio(true); + + Rectangle clip = new Rectangle(); + clip.setWidth(img.getBoundsInLocal().getWidth()); + clip.setHeight(240); + clip.setArcWidth(20); + clip.setArcHeight(20); + img.setClip(clip); + return img; + } + + + private void renderUpper() { + upperList.setSpacing(6); + upperList.setAlignment(Pos.CENTER); + upperList.getChildren().clear(); + + int i = 0; + for (TribeCard card : model.getUpperListTribeCards()) { + final int index = i; + ImageView img = createCard(card); + img.setOnMouseClicked(e -> controller.drawUpperTribeCard(username, index)); + upperList.getChildren().add(img); + i++; + } + i = 0; + for (BuildingCard card : model.getUpperListBuilding()) { + final int index = i; + ImageView img = createCard(card); + img.setOnMouseClicked(e -> controller.drawUpperBuildingCard(username, index)); + upperList.getChildren().add(img); + i++; + } + } + + + private void renderBoard() { + board.setSpacing(6); + board.setAlignment(Pos.CENTER); + board.getChildren().clear(); + + int i = 0; + for (Map.Entry entry : model.getSlotMap().entrySet()) { + Slot slot = entry.getKey(); + final int index = i; + ImageView img = createSlot(slot); + img.setOnMouseClicked(e -> controller.slotChoice(username, index)); + board.getChildren().add(img); + i++; + } + } + + + private void renderLower() { + lowerList.setSpacing(6); + lowerList.setAlignment(Pos.CENTER); + lowerList.getChildren().clear(); + + int i = 0; + for (TribeCard card : model.getLowerListTribeCards()) { + final int index = i; + ImageView img = createCard(card); + img.setOnMouseClicked(e -> controller.drawLowerTribeCard(username, index)); + lowerList.getChildren().add(img); + i++; + } + i = 0; + for (BuildingCard card : model.getLowerListBuilding()) { + final int index = i; + ImageView img = createCard(card); + img.setOnMouseClicked(e -> controller.drawLowerBuildingCard(username, index)); + lowerList.getChildren().add(img); + i++; + } + } + + + + + + + + + + + + + + + + + + + + void drawMyHandCard(HBox myHand, ArrayList cardList) { if (!cardList.isEmpty()) { ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + cardList.getLast().getIdIMG() + ".png"))); - img.fitHeightProperty().bind(myHand.heightProperty().subtract(10)); + img.setFitHeight(200); img.setPreserveRatio(true); + Rectangle clip = new Rectangle(); + clip.setWidth(img.getBoundsInLocal().getWidth()); + clip.setHeight(200); + clip.setArcWidth(20); + clip.setArcHeight(20); + img.setClip(clip); + Label label = new Label(String.valueOf(cardList.size())); label.setTranslateY(-55); label.setTranslateX(10); - label.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 50px; -fx-font-weight: bold; -fx-text-fill: black;"); + label.getStyleClass().add("label-large"); StackPane.setAlignment(label, Pos.TOP_RIGHT); StackPane stack = new StackPane(img, label); @@ -240,8 +278,7 @@ public class MainFXMLController { popupCards.getChildren().clear(); for (PlayableCard card : cardList) { - ImageView img = new ImageView(new Image(getClass().getResourceAsStream( - "/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); + ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + card.getIdIMG() + ".png"))); img.setFitHeight(200); img.setPreserveRatio(true); popupCards.getChildren().add(img); @@ -261,32 +298,32 @@ public class MainFXMLController { private void renderPlayers(VBox playersHand) { for (Player player : model.getPlayers()) { - VBox card = new VBox(5); + VBox card = new VBox(); + VBox.setMargin(card, new Insets(5, 5, 5, 5)); card.setAlignment(javafx.geometry.Pos.CENTER); - card.setPrefWidth(150); - card.setPrefHeight(100); card.setStyle( "-fx-border-color: black;" + "-fx-border-width: 2;" + - "-fx-border-radius: 8;" + - "-fx-background-radius: 8;" + - "-fx-background-color: white;" + - "-fx-padding: 10;" + "-fx-border-radius: 15;" + + "-fx-background-radius: 15;" + + "-fx-background-color: white;" ); - Label usernameLabel = new Label(player.getUserName()); + Label usernameLabel; if(player.getUserName().equals(username)) { - usernameLabel.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 16px; -fx-font-weight: bold; -fx-text-fill: #c40501;"); + usernameLabel = new Label(player.getUserName()+" (you)"); + } else { - usernameLabel.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 16px; -fx-font-weight: bold;"); + usernameLabel = new Label(player.getUserName()); } + usernameLabel.getStyleClass().add("label-medium"); Label foodLabel = new Label("Food: " + player.getFoodValue()); - foodLabel.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 12px; -fx-font-weight: bold; "); + foodLabel.getStyleClass().add("label-small"); Label prestigeLabel = new Label("Prestige: " + player.getPrestigeValue()); - prestigeLabel.setStyle("-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 12px; -fx-font-weight: bold; "); + prestigeLabel.getStyleClass().add("label-small"); card.getChildren().addAll(usernameLabel, foodLabel, prestigeLabel); diff --git a/src/main/resources/GUIScene/main.fxml b/src/main/resources/GUIScene/main.fxml index 4d70c44..dd35b44 100644 --- a/src/main/resources/GUIScene/main.fxml +++ b/src/main/resources/GUIScene/main.fxml @@ -5,54 +5,62 @@ - + - + + + + + + - + - + - + - + - + + - + + + - + - - - diff --git a/src/main/resources/GUIScene/styles.css b/src/main/resources/GUIScene/styles.css index 5ba322c..1e876b1 100644 --- a/src/main/resources/GUIScene/styles.css +++ b/src/main/resources/GUIScene/styles.css @@ -1,8 +1,39 @@ -@font-face { - src: url('/Fonts/InknutAntiqua-Regular.ttf'); - font-family: 'Inknut Antiqua'; +.card-list { + -fx-background-color: rgba(255,255,255,0.35); + -fx-background-radius: 15; + -fx-padding: 10; } -.label { +.side-panel { + -fx-background-color: rgba(255,255,255,0.35); + -fx-background-radius: 15; +} + +.label-small { -fx-font-family: 'Inknut Antiqua'; + -fx-font-size: 12px; + -fx-font-weight: bold; + -fx-text-fill: black; +} + +.label-medium { + -fx-font-family: 'Inknut Antiqua'; + -fx-font-size: 18px; + -fx-font-weight: bold; + -fx-text-fill: black; +} + +.label-large { + -fx-font-family: 'Inknut Antiqua'; + -fx-font-size: 50px; + -fx-font-weight: bold; + -fx-text-fill: black; +} + +.player-card { + -fx-border-color: black; + -fx-border-width: 2; + -fx-border-radius: 15; + -fx-background-radius: 15; + -fx-background-color: white; } \ No newline at end of file