First working implementation

This commit is contained in:
2026-05-14 12:44:17 +02:00
parent 087c38d190
commit 526ce67a4f
4 changed files with 40 additions and 89 deletions
@@ -84,6 +84,7 @@ public class GUI extends Application implements IView {
}); });
} else { } else {
Platform.runLater(() -> { Platform.runLater(() -> {
controllerMain.render();
primaryStage.setScene(mainScene); primaryStage.setScene(mainScene);
}); });
} }
@@ -47,14 +47,12 @@ public class MainFXMLController {
private Popup popup; private Popup popup;
private HBox popupCards; private HBox popupCards;
private MiniModel model;
private ClientController controller; private ClientController controller;
private String username;
private final Map<String, ImageView> cardCache = new HashMap<>(); private final Map<String, ImageView> cardCache = new HashMap<>();
public void setModel(MiniModel model) {this.model = model;} public void setController(ClientController controller) {
public void setController(ClientController controller) {this.controller = controller;} this.controller = controller;
public void setUsername(String username) {this.username = username;} }
@@ -116,10 +114,10 @@ public class MainFXMLController {
img.setClip(clip); img.setClip(clip);
StackPane wrapper = new StackPane(img); StackPane wrapper = new StackPane(img);
Player player = model.slotPlayerMap.get(slot); Player player = controller.miniModel.slotPlayerMap.get(slot);
if (player != null && model.getPositionByUsername(player.getUserName())!=-1) { if (player != null && controller.miniModel.getPositionByUsername(player.getUserName())!=-1) {
int index = model.getPositionByUsername(player.getUserName()); int index = controller.miniModel.getPositionByUsername(player.getUserName());
ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png"))); ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + "blue" + ".png")));
totem.setFitHeight(70); totem.setFitHeight(70);
totem.setPreserveRatio(true); totem.setPreserveRatio(true);
StackPane.setAlignment(totem, Pos.TOP_LEFT); StackPane.setAlignment(totem, Pos.TOP_LEFT);
@@ -221,24 +219,24 @@ public class MainFXMLController {
upperList.getChildren().clear(); upperList.getChildren().clear();
int i = 0; int i = 0;
for (TribeCard card : model.board.upperListTribe) { for (TribeCard card : controller.miniModel.board.upperListTribe) {
final int index = i; final int index = i;
StackPane img = createCard(card, true, true); StackPane img = createCard(card, true, true);
img.setOnMouseClicked(e -> controller.drawUpperTribeCard(username, index)); img.setOnMouseClicked(e -> controller.drawUpperTribeCard(controller.myUsername, index));
upperList.getChildren().add(img); upperList.getChildren().add(img);
i++; i++;
} }
i = 0; i = 0;
for (BuildingCard card : model.board.upperListBuilding) { for (BuildingCard card : controller.miniModel.board.upperListBuilding) {
final int index = i; final int index = i;
StackPane img = createCard(card, true, true); StackPane img = createCard(card, true, true);
img.setOnMouseClicked(e -> controller.drawUpperBuildingCard(username, index)); img.setOnMouseClicked(e -> controller.drawUpperBuildingCard(controller.myUsername, index));
upperList.getChildren().add(img); upperList.getChildren().add(img);
i++; i++;
} }
} }
private void renderOrder() { private void renderOrder() {
StackPane card = createOrder(Integer.toString(model.players.size()), false, false); StackPane card = createOrder(Integer.toString(controller.miniModel.players.size()), false, false);
VBox overlay = new VBox(-20); VBox overlay = new VBox(-20);
overlay.setPickOnBounds(false); overlay.setPickOnBounds(false);
@@ -246,13 +244,13 @@ public class MainFXMLController {
StackPane.setMargin(overlay, new Insets(9, 0, 0, 57)); StackPane.setMargin(overlay, new Insets(9, 0, 0, 57));
int i = 0; int i = 0;
for (Player player : model.players.values()) { for (Player player : controller.miniModel.players.values()) {
final int index = i; final int index = i;
ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png"))); ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + "blue" + ".png")));
totem.setFitHeight(70); totem.setFitHeight(70);
totem.setPreserveRatio(true); totem.setPreserveRatio(true);
if (!(model.orderLogicCard.getPosition(player.getUserName()) != -1 && !model.slotPlayerMap.containsValue(player))) { if (!(controller.miniModel.orderLogicCard.getPosition(player.getUserName()) != -1 && !controller.miniModel.slotPlayerMap.containsValue(player))) {
totem.setOpacity(0.0); totem.setOpacity(0.0);
} }
overlay.getChildren().add(totem); overlay.getChildren().add(totem);
@@ -267,7 +265,7 @@ public class MainFXMLController {
board.getChildren().clear(); board.getChildren().clear();
String path = ""; String path = "";
switch (model.currentState.getEra()) { switch (controller.miniModel.currentState.getEra()) {
case 1 -> path = "/GUIImages/Backs/back-001.png"; case 1 -> path = "/GUIImages/Backs/back-001.png";
case 2 -> path = "/GUIImages/Backs/back-030.png"; case 2 -> path = "/GUIImages/Backs/back-030.png";
case 3 -> path = "/GUIImages/Backs/back-058.png"; case 3 -> path = "/GUIImages/Backs/back-058.png";
@@ -289,11 +287,11 @@ public class MainFXMLController {
renderOrder(); renderOrder();
int i = 0; int i = 0;
for (Map.Entry<Slot, Player> entry : model.slotPlayerMap.entrySet()) { for (Map.Entry<Slot, Player> entry : controller.miniModel.slotPlayerMap.entrySet()) {
Slot slot = entry.getKey(); Slot slot = entry.getKey();
final int index = i; final int index = i;
StackPane img = createSlot(slot, true, true); StackPane img = createSlot(slot, true, true);
img.setOnMouseClicked(e -> controller.slotChoice(username, index)); img.setOnMouseClicked(e -> controller.slotChoice(controller.myUsername, index));
board.getChildren().add(img); board.getChildren().add(img);
i++; i++;
} }
@@ -304,18 +302,18 @@ public class MainFXMLController {
lowerList.getChildren().clear(); lowerList.getChildren().clear();
int i = 0; int i = 0;
for (TribeCard card : model.board.lowerListTribe) { for (TribeCard card : controller.miniModel.board.lowerListTribe) {
final int index = i; final int index = i;
StackPane img = createCard(card, true, true); StackPane img = createCard(card, true, true);
img.setOnMouseClicked(e -> controller.drawLowerTribeCard(username, index)); img.setOnMouseClicked(e -> controller.drawLowerTribeCard(controller.myUsername, index));
lowerList.getChildren().add(img); lowerList.getChildren().add(img);
i++; i++;
} }
i = 0; i = 0;
for (BuildingCard card : model.board.lowerListBuilding) { for (BuildingCard card : controller.miniModel.board.lowerListBuilding) {
final int index = i; final int index = i;
StackPane img = createCard(card, true, true); StackPane img = createCard(card, true, true);
img.setOnMouseClicked(e -> controller.drawLowerBuildingCard(username, index)); img.setOnMouseClicked(e -> controller.drawLowerBuildingCard(controller.myUsername, index));
lowerList.getChildren().add(img); lowerList.getChildren().add(img);
i++; i++;
} }
@@ -327,13 +325,13 @@ public class MainFXMLController {
myHand.setSpacing(14); myHand.setSpacing(14);
myHand.setAlignment(Pos.CENTER); myHand.setAlignment(Pos.CENTER);
drawMyHandList(myHand, model.players.get(username).artists); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).artists);
drawMyHandList(myHand, model.players.get(username).gatherers); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).gatherers);
drawMyHandList(myHand, model.players.get(username).inventors); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).inventors);
drawMyHandList(myHand, model.players.get(username).builders); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).builders);
drawMyHandList(myHand, model.players.get(username).shamans); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).shamans);
drawMyHandList(myHand, model.players.get(username).hunters); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).hunters);
drawMyHandList(myHand, model.players.get(username).buildingCards); drawMyHandList(myHand, controller.miniModel.players.get(controller.myUsername).buildingCards);
} }
private void drawMyHandList(HBox myHand, ArrayList<? extends PlayableCard> cardList) { private void drawMyHandList(HBox myHand, ArrayList<? extends PlayableCard> cardList) {
if (!cardList.isEmpty()) { if (!cardList.isEmpty()) {
@@ -361,16 +359,16 @@ public class MainFXMLController {
sidePanel.getChildren().clear(); sidePanel.getChildren().clear();
sidePanel.setSpacing(6); sidePanel.setSpacing(6);
era.setText(Integer.toString(model.currentState.getEra())); era.setText(Integer.toString(controller.miniModel.currentState.getEra()));
round.setText(Integer.toString(model.currentState.getRound())); round.setText(Integer.toString(controller.miniModel.currentState.getRound()));
player.setText(model.currentState.getCurrentPlayer().getUserName()); player.setText(controller.miniModel.currentState.getCurrentPlayer().getUserName());
VBox.setMargin(info, new Insets(5, 5, 5, 5)); VBox.setMargin(info, new Insets(5, 5, 5, 5));
sidePanel.getChildren().add(info); sidePanel.getChildren().add(info);
renderPlayers(sidePanel); renderPlayers(sidePanel);
} }
private void renderPlayers(VBox playersHand) { private void renderPlayers(VBox playersHand) {
for (Player player : model.players.values()) { for (Player player : controller.miniModel.players.values()) {
// Card container // Card container
VBox card = new VBox(3); VBox card = new VBox(3);
VBox.setMargin(card, new Insets(5)); VBox.setMargin(card, new Insets(5));
@@ -382,13 +380,13 @@ public class MainFXMLController {
// Riga 1: icona totem + nome // Riga 1: icona totem + nome
HBox headerRow = new HBox(8); HBox headerRow = new HBox(8);
headerRow.setAlignment(Pos.CENTER); headerRow.setAlignment(Pos.CENTER);
int index = new ArrayList<>(model.players.values()).indexOf(player); int index = new ArrayList<>(controller.miniModel.players.values()).indexOf(player);
ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png"))); ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + "blue" + ".png")));
totem.setFitHeight(20); totem.setFitHeight(20);
totem.setPreserveRatio(true); totem.setPreserveRatio(true);
Label usernameLabel = new Label(player.getUserName()); Label usernameLabel = new Label(player.getUserName());
usernameLabel.getStyleClass().add("label-medium"); usernameLabel.getStyleClass().add("label-medium");
if (player.getUserName().equals(username)) { if (player.getUserName().equals(controller.myUsername)) {
usernameLabel.setStyle("-fx-text-fill: #9d0208"); usernameLabel.setStyle("-fx-text-fill: #9d0208");
} }
headerRow.getChildren().addAll(totem, usernameLabel); headerRow.getChildren().addAll(totem, usernameLabel);
@@ -465,7 +463,7 @@ public class MainFXMLController {
} }
} }
private ArrayList<PlayableCard> getPlayerCards(String username, String type) { private ArrayList<PlayableCard> getPlayerCards(String username, String type) {
Player p = model.players.get(username); Player p = controller.miniModel.players.get(username);
return switch (type) { return switch (type) {
case "artists" -> new ArrayList<>(p.artists); case "artists" -> new ArrayList<>(p.artists);
case "gatherers" -> new ArrayList<>(p.gatherers); case "gatherers" -> new ArrayList<>(p.gatherers);
@@ -1,49 +0,0 @@
package it.polimi.ingsw.gc14.View.GUI;
import it.polimi.ingsw.gc14.Controller.ClientController;
import it.polimi.ingsw.gc14.Model.Game;
import it.polimi.ingsw.gc14.Model.MiniModel;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import java.io.IOException;
public class MainView {
private final Scene scene;
private final MainFXMLController fxmlController;
private MiniModel model;
private ClientController controller;
private String username;
public MainView() {
try {
FXMLLoader loader = new FXMLLoader(
getClass().getResource("/GUIScene/main.fxml")
);
scene = new Scene(loader.load(), 1920, 1080);
fxmlController = loader.getController();
} catch (IOException e) {
throw new RuntimeException("Impossibile caricare login.fxml", e);
}
}
public Scene getScene() { return scene; }
public void setModel(MiniModel model, ClientController controller, String username) {
this.model = model;
fxmlController.setModel(model);
this.controller = controller;
fxmlController.setController(controller);
this.username = username;
fxmlController.setUsername(username);
}
public void render() {
fxmlController.render();
}
}
@@ -25,11 +25,12 @@ public class TotemFXMLController {
} }
public void render() { public void render() {
mainHBox.getChildren().clear();
for (Totems totem : controller.miniModel.availableTotems) { for (Totems totem : controller.miniModel.availableTotems) {
ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_"+ String.valueOf(totem).toLowerCase(Locale.ROOT) +".png"))); ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_"+ String.valueOf(totem).toLowerCase(Locale.ROOT) +".png")));
img.setFitHeight(240); img.setFitHeight(240);
img.setPreserveRatio(true); img.setPreserveRatio(true);
img.setOnMouseClicked(e -> controller.totemChoice(controller.myUsername)); img.setOnMouseClicked(e -> controller.totemChoice(controller.myUsername, controller.miniModel.availableTotems.indexOf(totem)));
mainHBox.getChildren().add(img); mainHBox.getChildren().add(img);
} }
} }