From 4ec97293c27f0aeaf2d8868207bf7e00f5974ffe Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Mon, 18 May 2026 22:27:37 +0200 Subject: [PATCH] Fixed: Order Card GUI --- .../gc14/View/GUI/MainFXMLController.java | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) 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 2e8167a..3998fbb 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 @@ -464,26 +464,69 @@ public class MainFXMLController { } private void renderOrder() { - StackPane card = createOrder(Integer.toString(controller.miniModel.players.size())); + int numPlayers = controller.miniModel.players.size(); + StackPane card = createOrder(Integer.toString(numPlayers)); - VBox overlay = new VBox(-20); + Map slotPositions = Map.of( + 2, new double[]{0.229 ,0.413}, + 3, new double[]{0.183,0.367, 0.548}, + 4, new double[]{0.142,0.316, 0.503, 0.690}, + 5, new double[]{0.066, 0.251, 0.433, 0.617,0.802} + ); + + double[] positions = slotPositions.get(numPlayers); + if (positions == null) return; + + + Pane overlay = new Pane(); overlay.setPickOnBounds(false); - StackPane.setAlignment(overlay, Pos.TOP_LEFT); - StackPane.setMargin(overlay, new Insets(9, 0, 0, 46)); + overlay.setMouseTransparent(true); - for (OrderPlayer player : controller.miniModel.orderLogicCard.playerList) { - ImageView totem = new ImageView(loadImage("/GUIImages/Totems/totem_" + player.player.totem.toString().toLowerCase(Locale.ROOT) + ".png")); - totem.setFitHeight(70); - totem.setPreserveRatio(true); - if (controller.miniModel.slotPlayerMap.containsValue(player.player)) { - totem.setOpacity(0.5); + for (int i = 0; i < controller.miniModel.orderLogicCard.playerList.size(); i++) { + OrderPlayer op = controller.miniModel.orderLogicCard.playerList.get(i); + + // colore dal totem del giocatore + Color color = totemColor(op.player.totem); + + Rectangle rect = new Rectangle(48, 26, color); + rect.setArcWidth(4); + rect.setArcHeight(4); + if (controller.miniModel.slotPlayerMap.containsValue(op.player)) { + rect.setOpacity(0.5); } - overlay.getChildren().add(totem); + + final double yRatio = positions[i]; + overlay.prefHeightProperty().bind(card.heightProperty()); + overlay.prefWidthProperty().bind(card.widthProperty()); + + // posizione X fissa, Y proporzionale + rect.setX(41); + card.heightProperty().addListener((obs, ov, nv) -> { + rect.setY(nv.doubleValue() * yRatio); + }); + if (card.getHeight() > 0) { + rect.setY(card.getHeight() * yRatio); + } + + overlay.getChildren().add(rect); } + card.getChildren().add(overlay); board.getChildren().add(card); } + private Color totemColor(Totems totem) { + return switch (totem) { + case ORANGE -> Color.rgb(223, 76, 17); + case BLUE -> Color.rgb(42, 155, 179); + case PURPLE -> Color.rgb(65, 20, 42); + case YELLOW -> Color.rgb(248, 201, 57); + case WHITE -> Color.rgb(232, 232, 231); + // aggiungi i tuoi valori reali + default -> Color.GRAY; + }; + } + private void renderSlotMap() { int i = 0; for (Map.Entry entry : controller.miniModel.slotPlayerMap.entrySet()) {