Initial code refactoring

This commit is contained in:
2026-05-10 18:52:33 +02:00
parent 558f5b8d9c
commit 0f7095fc4e
4 changed files with 239 additions and 160 deletions
@@ -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);
@@ -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<Slot, Player> 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<Slot, Player> 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<? extends PlayableCard> 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);
+23 -15
View File
@@ -5,54 +5,62 @@
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<HBox fx:id="mainHBox" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefHeight="1080.0" prefWidth="1920.0" xmlns="http://javafx.com/javafx/26" xmlns:fx="http://javafx.com/fxml/1" fx:controller="it.polimi.ingsw.gc14.View.GUI.MainFXMLController">
<HBox fx:id="mainHBox" maxHeight="1080.0" maxWidth="1920.0" minHeight="-Infinity" minWidth="-Infinity" prefHeight="1080.0" prefWidth="1920.0" xmlns="http://javafx.com/javafx/26" xmlns:fx="http://javafx.com/fxml/1" fx:controller="it.polimi.ingsw.gc14.View.GUI.MainFXMLController" stylesheets="@styles.css">
<children>
<VBox prefHeight="1080.0" prefWidth="1486.0">
<VBox prefHeight="1080.0" prefWidth="1486.0" fillWidth="false" alignment="CENTER">
<HBox.margin>
<Insets top="5" right="5" bottom="5" left="5" />
</HBox.margin>
<children>
<HBox fx:id="upperList" prefHeight="250.0" prefWidth="200.0" style="-fx-background-color: rgba(255,255,255,0.35); -fx-background-radius: 15;">
<HBox fx:id="upperList" prefHeight="200" styleClass="card-list">
<VBox.margin>
<Insets top="5" right="5" bottom="5" left="5" />
</VBox.margin>
</HBox>
<HBox fx:id="board" prefHeight="330.0" prefWidth="200.0" style="-fx-background-color: rgba(255,255,255,0.35); -fx-background-radius: 15;">
<HBox fx:id="board" prefHeight="240" styleClass="card-list">
<VBox.margin>
<Insets top="5" right="5" bottom="5" left="5" />
</VBox.margin>
</HBox>
<HBox fx:id="lowerList" prefHeight="250.0" prefWidth="200.0" style="-fx-background-color: rgba(255,255,255,0.35); -fx-background-radius: 15;">
<HBox fx:id="lowerList" prefHeight="200" styleClass="card-list">
<VBox.margin>
<Insets top="5" right="5" bottom="5" left="5" />
</VBox.margin>
</HBox>
<HBox fx:id="myHand" prefHeight="250.0" prefWidth="200.0" style="-fx-background-color: rgba(255,255,255,0.35); -fx-background-radius: 15;">
<HBox fx:id="myHand" prefHeight="200" styleClass="card-list">
<VBox.margin>
<Insets top="5" right="5" bottom="5" left="5" />
</VBox.margin>
</HBox> </children>
</HBox>
</children>
</VBox>
<VBox fx:id="playersHand" prefHeight="1080.0" prefWidth="531.0" style="-fx-background-color: rgba(255,255,255,0.35); -fx-background-radius: 15;">
<VBox fx:id="sidePanel" prefHeight="1080.0" prefWidth="531.0" styleClass="side-panel">
<HBox.margin>
<Insets bottom="10" left="10" right="10" top="10" />
</HBox.margin>
<children>
<HBox fx:id="INFO" prefHeight="107.0" prefWidth="483.0">
<HBox fx:id="info" prefHeight="107.0" prefWidth="483.0">
<children>
<VBox alignment="CENTER" prefHeight="107.0" prefWidth="161.0" spacing="2">
<children>
<Label style="-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 11px; -fx-text-fill: gray;" text="ERA" />
<Label fx:id="era" style="-fx-font-family: 'Inknut Antiqua'; -fx-font-size: 18px; -fx-font-weight: bold;" text="VALORE" />
<Label styleClass="label-small" text="ERA" />
<Label fx:id="era" styleClass="label-medium" text="VALORE" />
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="107.0" prefWidth="161.0" spacing="2">
<children>
<Label style="-fx-font-size: 11px; -fx-text-fill: gray;" text="ROUND" />
<Label fx:id="round" style="-fx-font-size: 18px; -fx-font-weight: bold;" text="VALORE" />
<Label styleClass="label-small" text="ROUND" />
<Label fx:id="round" styleClass="label-medium" text="VALORE" />
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="107.0" prefWidth="161.0" spacing="2">
<children>
<Label style="-fx-font-size: 11px; -fx-text-fill: gray;" text="PLAYER" />
<Label fx:id="player" style="-fx-font-size: 18px; -fx-font-weight: bold;" text="VALORE" />
<Label styleClass="label-small" text="PLAYER" />
<Label fx:id="player" styleClass="label-medium" text="VALORE" />
</children>
</VBox>
</children>
+35 -4
View File
@@ -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;
}