Players card, draw deck

This commit is contained in:
2026-05-11 19:39:08 +02:00
parent 874091e9cc
commit 04efe46c43
10 changed files with 87 additions and 57 deletions
@@ -5,6 +5,7 @@ import it.polimi.ingsw.gc14.Model.*;
import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
import javafx.animation.ScaleTransition;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
@@ -20,6 +21,7 @@ import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.scene.text.Font;
import javafx.stage.Popup;
import javafx.stage.Window;
import javafx.util.Duration;
import java.util.ArrayList;
@@ -236,7 +238,7 @@ public class MainFXMLController {
}
}
private void renderOrder() {
StackPane card = createOrder(Integer.toString(model.getNPlayers()), true, true);
StackPane card = createOrder(Integer.toString(model.getNPlayers()), false, false);
VBox overlay = new VBox(-20);
overlay.setPickOnBounds(false);
@@ -264,6 +266,26 @@ public class MainFXMLController {
board.setAlignment(Pos.CENTER);
board.getChildren().clear();
String path = "";
switch (model.getCurrentState().getEra()) {
case 1 -> path = "/GUIImages/Backs/back-001.png";
case 2 -> path = "/GUIImages/Backs/back-030.png";
case 3 -> path = "/GUIImages/Backs/back-058.png";
}
ImageView back = new ImageView(new Image(getClass().getResourceAsStream(path)));
back.setFitHeight(240);
back.setPreserveRatio(true);
Rectangle clip = new Rectangle();
clip.setWidth(back.getBoundsInLocal().getWidth());
clip.setHeight(240);
clip.setArcWidth(20);
clip.setArcHeight(20);
back.setClip(clip);
addShadow(back);
addHoverZoom(back);
board.getChildren().add(back);
renderOrder();
int i = 0;
@@ -349,59 +371,65 @@ public class MainFXMLController {
}
private void renderPlayers(VBox playersHand) {
for (Player player : model.getPlayers()) {
if(player.getUserName().equals(username)) {
continue;
}
VBox card = new VBox();
VBox.setMargin(card, new Insets(5, 5, 5, 5));
card.setAlignment(Pos.CENTER);
// Card container
VBox card = new VBox(3);
VBox.setMargin(card, new Insets(5));
card.getStyleClass().add("player-card");
card.setPadding(new Insets(8));
addHoverZoom(card);
addShadow(card);
Label usernameLabel = new Label(player.getUserName());
usernameLabel.getStyleClass().add("label-medium");
Label foodLabel = new Label("Food: " + player.getFoodValue());
foodLabel.getStyleClass().add("label-small");
Label prestigeLabel = new Label("Prestige: " + player.getPrestigeValue());
prestigeLabel.getStyleClass().add("label-small");
HBox icons = new HBox();
icons.setSpacing(6);
icons.setAlignment(Pos.CENTER);
renderIcons(icons, player);
card.getChildren().addAll(usernameLabel, foodLabel, prestigeLabel, icons);
playersHand.getChildren().add(card);
}
Region spacer = new Region();
VBox.setVgrow(spacer, Priority.ALWAYS);
playersHand.getChildren().add(spacer);
VBox card = new VBox();
VBox.setMargin(card, new Insets(5, 5, 5, 5));
card.setAlignment(Pos.CENTER);
card.getStyleClass().add("frame");
Label usernameLabel = new Label(username);
usernameLabel.getStyleClass().add("label-medium");
int index = model.getPlayers().indexOf(
model.getPlayers().stream()
.filter(p -> p.getUserName().equals(username))
.findFirst()
.orElse(null)
);
// Riga 1: icona totem + nome
HBox headerRow = new HBox(8);
headerRow.setAlignment(Pos.CENTER);
int index = model.getPlayers().indexOf(player);
ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png")));
totem.setFitHeight(10);
totem.setFitHeight(20);
totem.setPreserveRatio(true);
Label foodLabel = new Label("Food: " + model.getPlayerByUsername(username).getFoodValue());
foodLabel.getStyleClass().add("label-small");
Label prestigeLabel = new Label("Prestige: " + model.getPlayerByUsername(username).getPrestigeValue());
prestigeLabel.getStyleClass().add("label-small");
card.getChildren().addAll(usernameLabel, totem, foodLabel, prestigeLabel);
Label usernameLabel = new Label(player.getUserName());
usernameLabel.getStyleClass().add("label-medium");
if (player.getUserName().equals(username)) {
usernameLabel.setStyle("-fx-text-fill: #9d0208");
}
headerRow.getChildren().addAll(totem, usernameLabel);
// Riga 2: cibo + prestigio
HBox statsRow = new HBox(10);
statsRow.setAlignment(Pos.CENTER);
HBox foodBox = new HBox(4);
foodBox.setAlignment(Pos.CENTER);
ImageView foodIcon = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Icons/Food.png")));
foodIcon.setFitHeight(20);
foodIcon.setPreserveRatio(true);
Label foodLabel = new Label(String.valueOf(player.getFoodValue()));
foodLabel.getStyleClass().add("label-small");
foodBox.getChildren().addAll(foodIcon, foodLabel);
HBox prestigeBox = new HBox(1);
prestigeBox.setAlignment(Pos.CENTER);
ImageView PPIcon = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Icons/PrestigePoint.png")));
PPIcon.setFitHeight(35);
PPIcon.setPreserveRatio(true);
Label prestigeLabel = new Label(String.valueOf(player.getPrestigeValue()));
prestigeLabel.getStyleClass().add("label-small");
prestigeBox.getChildren().addAll(PPIcon, prestigeLabel);
statsRow.getChildren().addAll(foodBox, prestigeBox);
// Righe 3-4: icone carte (3 per riga)
HBox iconsRow1 = new HBox(6);
iconsRow1.setAlignment(Pos.CENTER);
HBox iconsRow2 = new HBox(6);
iconsRow2.setAlignment(Pos.CENTER);
renderIcons(iconsRow1, iconsRow2, player); // vedi sotto
card.getChildren().addAll(headerRow, statsRow, iconsRow1, iconsRow2);
playersHand.getChildren().add(card);
}
private void renderIcons(HBox icons, Player player) {
}
private void renderIcons(HBox iconsRow1, HBox iconsRow2, Player player) {
String[][] iconTypes = {
{"Artist", "artists"},
{"Gatherer", "gatherers"},
@@ -411,9 +439,9 @@ public class MainFXMLController {
{"Hunter", "hunters"}
};
for (String[] type : iconTypes) {
String iconName = type[0];
String fieldName = type[1];
for (int i = 0; i < iconTypes.length; i++) {
String iconName = iconTypes[i][0];
String fieldName = iconTypes[i][1];
ImageView icon = new ImageView();
icon.setFitWidth(28);
@@ -424,15 +452,16 @@ public class MainFXMLController {
ArrayList<PlayableCard> cards = getPlayerCards(player.getUserName(), fieldName);
if (cards.isEmpty()) {
ColorAdjust grayscale = new ColorAdjust();
grayscale.setSaturation(-1.0);
//grayscale.setSaturation(-1.0);
icon.setEffect(grayscale);
icon.setOpacity(0.5);
icon.setOpacity(0.3);
} else {
icon.setOnMouseClicked(e -> openPopup(cards));
addHoverZoom(icon);
}
icons.getChildren().add(icon);
if (i < 3) iconsRow1.getChildren().add(icon);
else iconsRow2.getChildren().add(icon);
}
}
private ArrayList<PlayableCard> getPlayerCards(String username, String type) {
@@ -474,7 +503,7 @@ public class MainFXMLController {
popup.setAutoHide(true);
// Aspetta che la scena del popup esista, poi la rendi trasparente
popup.addEventHandler(javafx.event.Event.ANY, e -> {
popup.addEventHandler(Event.ANY, e -> {
if (popup.getScene() != null) {
popup.getScene().setFill(Color.TRANSPARENT);
}
@@ -486,7 +515,7 @@ public class MainFXMLController {
StackPane img = createCard(card, false, false);
popupCards.getChildren().add(img);
}
javafx.stage.Window window = myHand.getScene().getWindow();
Window window = myHand.getScene().getWindow();
popup.show(window, (window.getWidth() - popup.getWidth()) / 2, (window.getHeight() - popup.getHeight()) / 2);
// La scena esiste solo dopo show()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 832 KiB

After

Width:  |  Height:  |  Size: 832 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 KiB

After

Width:  |  Height:  |  Size: 832 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 834 KiB

After

Width:  |  Height:  |  Size: 833 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 846 KiB

After

Width:  |  Height:  |  Size: 845 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 KiB

After

Width:  |  Height:  |  Size: 900 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 905 KiB

After

Width:  |  Height:  |  Size: 902 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 KiB

After

Width:  |  Height:  |  Size: 881 KiB

+3 -2
View File
@@ -38,7 +38,7 @@
</VBox>
<VBox fx:id="sidePanel" prefHeight="1080.0" prefWidth="531.0" styleClass="side-panel">
<VBox fx:id="sidePanel" prefWidth="250.0" styleClass="side-panel">
<HBox.margin>
<Insets bottom="10" left="10" right="10" top="10" />
</HBox.margin>
@@ -65,6 +65,7 @@
</VBox>
</children>
</HBox>
</children></VBox>
</children>
</VBox>
</children>
</HBox>
+2 -2
View File
@@ -31,11 +31,11 @@
}
.player-card {
-fx-border-color: black;
-fx-border-color: #6a040f;
-fx-border-width: 2;
-fx-border-radius: 15;
-fx-background-radius: 15;
-fx-background-color: #b42224;
-fx-background-color: #f48c06;
}
.frame {