Players card, draw deck
@@ -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.BuildingCard;
|
||||||
import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
|
import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
|
||||||
import javafx.animation.ScaleTransition;
|
import javafx.animation.ScaleTransition;
|
||||||
|
import javafx.event.Event;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
@@ -20,6 +21,7 @@ import javafx.scene.paint.Color;
|
|||||||
import javafx.scene.shape.*;
|
import javafx.scene.shape.*;
|
||||||
import javafx.scene.text.Font;
|
import javafx.scene.text.Font;
|
||||||
import javafx.stage.Popup;
|
import javafx.stage.Popup;
|
||||||
|
import javafx.stage.Window;
|
||||||
import javafx.util.Duration;
|
import javafx.util.Duration;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -236,7 +238,7 @@ public class MainFXMLController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void renderOrder() {
|
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);
|
VBox overlay = new VBox(-20);
|
||||||
overlay.setPickOnBounds(false);
|
overlay.setPickOnBounds(false);
|
||||||
@@ -264,6 +266,26 @@ public class MainFXMLController {
|
|||||||
board.setAlignment(Pos.CENTER);
|
board.setAlignment(Pos.CENTER);
|
||||||
board.getChildren().clear();
|
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();
|
renderOrder();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -349,59 +371,65 @@ public class MainFXMLController {
|
|||||||
}
|
}
|
||||||
private void renderPlayers(VBox playersHand) {
|
private void renderPlayers(VBox playersHand) {
|
||||||
for (Player player : model.getPlayers()) {
|
for (Player player : model.getPlayers()) {
|
||||||
if(player.getUserName().equals(username)) {
|
// Card container
|
||||||
continue;
|
VBox card = new VBox(3);
|
||||||
}
|
VBox.setMargin(card, new Insets(5));
|
||||||
VBox card = new VBox();
|
|
||||||
VBox.setMargin(card, new Insets(5, 5, 5, 5));
|
|
||||||
card.setAlignment(Pos.CENTER);
|
|
||||||
card.getStyleClass().add("player-card");
|
card.getStyleClass().add("player-card");
|
||||||
|
card.setPadding(new Insets(8));
|
||||||
|
addHoverZoom(card);
|
||||||
|
addShadow(card);
|
||||||
|
|
||||||
Label usernameLabel = new Label(player.getUserName());
|
// Riga 1: icona totem + nome
|
||||||
|
HBox headerRow = new HBox(8);
|
||||||
usernameLabel.getStyleClass().add("label-medium");
|
headerRow.setAlignment(Pos.CENTER);
|
||||||
Label foodLabel = new Label("Food: " + player.getFoodValue());
|
int index = model.getPlayers().indexOf(player);
|
||||||
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)
|
|
||||||
);
|
|
||||||
ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png")));
|
ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png")));
|
||||||
totem.setFitHeight(10);
|
totem.setFitHeight(20);
|
||||||
totem.setPreserveRatio(true);
|
totem.setPreserveRatio(true);
|
||||||
Label foodLabel = new Label("Food: " + model.getPlayerByUsername(username).getFoodValue());
|
Label usernameLabel = new Label(player.getUserName());
|
||||||
foodLabel.getStyleClass().add("label-small");
|
usernameLabel.getStyleClass().add("label-medium");
|
||||||
Label prestigeLabel = new Label("Prestige: " + model.getPlayerByUsername(username).getPrestigeValue());
|
if (player.getUserName().equals(username)) {
|
||||||
prestigeLabel.getStyleClass().add("label-small");
|
usernameLabel.setStyle("-fx-text-fill: #9d0208");
|
||||||
card.getChildren().addAll(usernameLabel, totem, foodLabel, prestigeLabel);
|
}
|
||||||
|
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);
|
playersHand.getChildren().add(card);
|
||||||
}
|
}
|
||||||
private void renderIcons(HBox icons, Player player) {
|
|
||||||
|
}
|
||||||
|
private void renderIcons(HBox iconsRow1, HBox iconsRow2, Player player) {
|
||||||
String[][] iconTypes = {
|
String[][] iconTypes = {
|
||||||
{"Artist", "artists"},
|
{"Artist", "artists"},
|
||||||
{"Gatherer", "gatherers"},
|
{"Gatherer", "gatherers"},
|
||||||
@@ -411,9 +439,9 @@ public class MainFXMLController {
|
|||||||
{"Hunter", "hunters"}
|
{"Hunter", "hunters"}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (String[] type : iconTypes) {
|
for (int i = 0; i < iconTypes.length; i++) {
|
||||||
String iconName = type[0];
|
String iconName = iconTypes[i][0];
|
||||||
String fieldName = type[1];
|
String fieldName = iconTypes[i][1];
|
||||||
|
|
||||||
ImageView icon = new ImageView();
|
ImageView icon = new ImageView();
|
||||||
icon.setFitWidth(28);
|
icon.setFitWidth(28);
|
||||||
@@ -424,15 +452,16 @@ public class MainFXMLController {
|
|||||||
ArrayList<PlayableCard> cards = getPlayerCards(player.getUserName(), fieldName);
|
ArrayList<PlayableCard> cards = getPlayerCards(player.getUserName(), fieldName);
|
||||||
if (cards.isEmpty()) {
|
if (cards.isEmpty()) {
|
||||||
ColorAdjust grayscale = new ColorAdjust();
|
ColorAdjust grayscale = new ColorAdjust();
|
||||||
grayscale.setSaturation(-1.0);
|
//grayscale.setSaturation(-1.0);
|
||||||
icon.setEffect(grayscale);
|
icon.setEffect(grayscale);
|
||||||
icon.setOpacity(0.5);
|
icon.setOpacity(0.3);
|
||||||
} else {
|
} else {
|
||||||
icon.setOnMouseClicked(e -> openPopup(cards));
|
icon.setOnMouseClicked(e -> openPopup(cards));
|
||||||
addHoverZoom(icon);
|
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) {
|
private ArrayList<PlayableCard> getPlayerCards(String username, String type) {
|
||||||
@@ -474,7 +503,7 @@ public class MainFXMLController {
|
|||||||
popup.setAutoHide(true);
|
popup.setAutoHide(true);
|
||||||
|
|
||||||
// Aspetta che la scena del popup esista, poi la rendi trasparente
|
// 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) {
|
if (popup.getScene() != null) {
|
||||||
popup.getScene().setFill(Color.TRANSPARENT);
|
popup.getScene().setFill(Color.TRANSPARENT);
|
||||||
}
|
}
|
||||||
@@ -486,7 +515,7 @@ public class MainFXMLController {
|
|||||||
StackPane img = createCard(card, false, false);
|
StackPane img = createCard(card, false, false);
|
||||||
popupCards.getChildren().add(img);
|
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);
|
popup.show(window, (window.getWidth() - popup.getWidth()) / 2, (window.getHeight() - popup.getHeight()) / 2);
|
||||||
|
|
||||||
// La scena esiste solo dopo show()
|
// La scena esiste solo dopo show()
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 832 KiB After Width: | Height: | Size: 832 KiB |
|
Before Width: | Height: | Size: 833 KiB After Width: | Height: | Size: 832 KiB |
|
Before Width: | Height: | Size: 834 KiB After Width: | Height: | Size: 833 KiB |
|
Before Width: | Height: | Size: 846 KiB After Width: | Height: | Size: 845 KiB |
|
Before Width: | Height: | Size: 905 KiB After Width: | Height: | Size: 900 KiB |
|
Before Width: | Height: | Size: 905 KiB After Width: | Height: | Size: 902 KiB |
|
Before Width: | Height: | Size: 884 KiB After Width: | Height: | Size: 881 KiB |
@@ -38,7 +38,7 @@
|
|||||||
</VBox>
|
</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>
|
<HBox.margin>
|
||||||
<Insets bottom="10" left="10" right="10" top="10" />
|
<Insets bottom="10" left="10" right="10" top="10" />
|
||||||
</HBox.margin>
|
</HBox.margin>
|
||||||
@@ -65,6 +65,7 @@
|
|||||||
</VBox>
|
</VBox>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
</children></VBox>
|
</children>
|
||||||
|
</VBox>
|
||||||
</children>
|
</children>
|
||||||
</HBox>
|
</HBox>
|
||||||
|
|||||||
@@ -31,11 +31,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.player-card {
|
.player-card {
|
||||||
-fx-border-color: black;
|
-fx-border-color: #6a040f;
|
||||||
-fx-border-width: 2;
|
-fx-border-width: 2;
|
||||||
-fx-border-radius: 15;
|
-fx-border-radius: 15;
|
||||||
-fx-background-radius: 15;
|
-fx-background-radius: 15;
|
||||||
-fx-background-color: #b42224;
|
-fx-background-color: #f48c06;
|
||||||
}
|
}
|
||||||
|
|
||||||
.frame {
|
.frame {
|
||||||
|
|||||||