Merge pull request #109 from rubenpirreram/GUI-2.0
Updated: (Now building popup)
This commit is contained in:
@@ -4,7 +4,6 @@ import it.polimi.ingsw.gc14.Controller.ClientController;
|
|||||||
import it.polimi.ingsw.gc14.Model.*;
|
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 it.polimi.ingsw.gc14.Model.GamePackage.GameStages;
|
|
||||||
import it.polimi.ingsw.gc14.Model.Orders.OrderPlayer;
|
import it.polimi.ingsw.gc14.Model.Orders.OrderPlayer;
|
||||||
import it.polimi.ingsw.gc14.Network.EventType;
|
import it.polimi.ingsw.gc14.Network.EventType;
|
||||||
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
||||||
@@ -33,15 +32,12 @@ import java.util.*;
|
|||||||
public class MainFXMLController {
|
public class MainFXMLController {
|
||||||
|
|
||||||
@FXML private HBox mainHBox;
|
@FXML private HBox mainHBox;
|
||||||
|
|
||||||
@FXML private HBox board;
|
@FXML private HBox board;
|
||||||
@FXML private HBox upperList;
|
@FXML private HBox upperList;
|
||||||
@FXML private HBox lowerList;
|
@FXML private HBox lowerList;
|
||||||
@FXML private HBox myHand;
|
@FXML private HBox myHand;
|
||||||
|
|
||||||
@FXML private VBox sidePanel;
|
@FXML private VBox sidePanel;
|
||||||
@FXML private HBox info;
|
@FXML private HBox info;
|
||||||
|
|
||||||
@FXML private Label era;
|
@FXML private Label era;
|
||||||
@FXML private Label round;
|
@FXML private Label round;
|
||||||
@FXML private Label player;
|
@FXML private Label player;
|
||||||
@@ -71,10 +67,16 @@ public class MainFXMLController {
|
|||||||
mainHBox.sceneProperty().addListener((obs, oldScene, newScene) -> {
|
mainHBox.sceneProperty().addListener((obs, oldScene, newScene) -> {
|
||||||
if (newScene != null) {
|
if (newScene != null) {
|
||||||
newScene.getRoot().applyCss();
|
newScene.getRoot().applyCss();
|
||||||
|
// chiudi popup cliccando fuori da esso
|
||||||
|
newScene.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
|
||||||
|
if (popup.isShowing()) {
|
||||||
|
popup.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
initPopup();
|
initPopup();
|
||||||
renderBackground(); // solo una volta
|
renderBackground();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -215,7 +217,7 @@ public class MainFXMLController {
|
|||||||
icon.setEffect(grayscale);
|
icon.setEffect(grayscale);
|
||||||
icon.setOpacity(0.3);
|
icon.setOpacity(0.3);
|
||||||
} else {
|
} else {
|
||||||
icon.setOnMouseClicked(e -> openPopup(cards));
|
icon.setOnMouseClicked(e -> openPopup(new ArrayList<>(cards)));
|
||||||
addHoverZoom(icon);
|
addHoverZoom(icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,14 +254,7 @@ public class MainFXMLController {
|
|||||||
upperList.getChildren().add(img);
|
upperList.getChildren().add(img);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
i = 0;
|
drawUpperBuilding();
|
||||||
for (BuildingCard card : controller.miniModel.board.upperListBuilding) {
|
|
||||||
final int index = i;
|
|
||||||
StackPane img = createCard(card, true, true);
|
|
||||||
img.setOnMouseClicked(e -> controller.drawUpperBuildingCard(controller.myUsername, index));
|
|
||||||
upperList.getChildren().add(img);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderLower() {
|
private void renderLower() {
|
||||||
@@ -275,62 +270,36 @@ public class MainFXMLController {
|
|||||||
lowerList.getChildren().add(img);
|
lowerList.getChildren().add(img);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
i = 0;
|
drawLowerBuilding();
|
||||||
for (BuildingCard card : controller.miniModel.board.lowerListBuilding) {
|
}
|
||||||
final int index = i;
|
|
||||||
StackPane img = createCard(card, true, true);
|
private void drawUpperBuilding() {
|
||||||
img.setOnMouseClicked(e -> controller.drawLowerBuildingCard(controller.myUsername, index));
|
ArrayList<BuildingCard> cardList = new ArrayList<>(controller.miniModel.board.upperListBuilding);
|
||||||
|
if (!cardList.isEmpty()) {
|
||||||
|
StackPane img = createCard(cardList.getLast(), true, true);
|
||||||
|
Label label = new Label(String.valueOf(cardList.size()));
|
||||||
|
label.setTranslateY(-55);
|
||||||
|
label.setTranslateX(10);
|
||||||
|
label.getStyleClass().add("label-large");
|
||||||
|
StackPane.setAlignment(label, Pos.TOP_RIGHT);
|
||||||
|
img.getChildren().add(label);
|
||||||
|
img.setOnMouseClicked(e -> openPopupUpperBuilding(cardList));
|
||||||
|
upperList.getChildren().add(img);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawLowerBuilding() {
|
||||||
|
ArrayList<BuildingCard> cardList = new ArrayList<>(controller.miniModel.board.lowerListBuilding);
|
||||||
|
if (!cardList.isEmpty()) {
|
||||||
|
StackPane img = createCard(cardList.getLast(), true, true);
|
||||||
|
Label label = new Label(String.valueOf(cardList.size()));
|
||||||
|
label.setTranslateY(-55);
|
||||||
|
label.setTranslateX(10);
|
||||||
|
label.getStyleClass().add("label-large");
|
||||||
|
StackPane.setAlignment(label, Pos.TOP_RIGHT);
|
||||||
|
img.getChildren().add(label);
|
||||||
|
img.setOnMouseClicked(e -> openPopupLowerBuilding(cardList));
|
||||||
lowerList.getChildren().add(img);
|
lowerList.getChildren().add(img);
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderDeck() {
|
|
||||||
String path = switch (controller.miniModel.currentState.getEra()) {
|
|
||||||
case 1 -> "/GUIImages/Backs/back-001.png";
|
|
||||||
case 2 -> "/GUIImages/Backs/back-030.png";
|
|
||||||
case 3 -> "/GUIImages/Backs/back-058.png";
|
|
||||||
default -> "/GUIImages/Backs/back-001.png";
|
|
||||||
};
|
|
||||||
ImageView back = new ImageView(loadImage(path));
|
|
||||||
back.setFitHeight(240);
|
|
||||||
back.setPreserveRatio(true);
|
|
||||||
addClip(back);
|
|
||||||
addShadow(back);
|
|
||||||
addHoverZoom(back);
|
|
||||||
board.getChildren().add(back);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderOrder() {
|
|
||||||
StackPane card = createOrder(Integer.toString(controller.miniModel.players.size()));
|
|
||||||
|
|
||||||
VBox overlay = new VBox(-20);
|
|
||||||
overlay.setPickOnBounds(false);
|
|
||||||
StackPane.setAlignment(overlay, Pos.TOP_LEFT);
|
|
||||||
StackPane.setMargin(overlay, new Insets(9, 0, 0, 57));
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
overlay.getChildren().add(totem);
|
|
||||||
}
|
|
||||||
card.getChildren().add(overlay);
|
|
||||||
board.getChildren().add(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void renderSlotMap() {
|
|
||||||
int i = 0;
|
|
||||||
for (Map.Entry<Slot, Player> entry : controller.miniModel.slotPlayerMap.entrySet()) {
|
|
||||||
Slot slot = entry.getKey();
|
|
||||||
final int index = i;
|
|
||||||
StackPane img = createSlot(slot, true, true);
|
|
||||||
img.setOnMouseClicked(e -> controller.slotChoice(controller.myUsername, index));
|
|
||||||
board.getChildren().add(img);
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,7 +312,7 @@ public class MainFXMLController {
|
|||||||
label.getStyleClass().add("label-large");
|
label.getStyleClass().add("label-large");
|
||||||
StackPane.setAlignment(label, Pos.TOP_RIGHT);
|
StackPane.setAlignment(label, Pos.TOP_RIGHT);
|
||||||
img.getChildren().add(label);
|
img.getChildren().add(label);
|
||||||
img.setOnMouseClicked(e -> openPopup(cardList));
|
img.setOnMouseClicked(e -> openPopup(new ArrayList<>(cardList)));
|
||||||
myHand.getChildren().add(img);
|
myHand.getChildren().add(img);
|
||||||
} else {
|
} else {
|
||||||
Region placeholder = new Region();
|
Region placeholder = new Region();
|
||||||
@@ -435,6 +404,55 @@ public class MainFXMLController {
|
|||||||
renderSlotMap();
|
renderSlotMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void renderDeck() {
|
||||||
|
String path = switch (controller.miniModel.currentState.getEra()) {
|
||||||
|
case 1 -> "/GUIImages/Backs/back-001.png";
|
||||||
|
case 2 -> "/GUIImages/Backs/back-030.png";
|
||||||
|
case 3 -> "/GUIImages/Backs/back-058.png";
|
||||||
|
default -> "/GUIImages/Backs/back-001.png";
|
||||||
|
};
|
||||||
|
ImageView back = new ImageView(loadImage(path));
|
||||||
|
back.setFitHeight(240);
|
||||||
|
back.setPreserveRatio(true);
|
||||||
|
addClip(back);
|
||||||
|
addShadow(back);
|
||||||
|
addHoverZoom(back);
|
||||||
|
board.getChildren().add(back);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renderOrder() {
|
||||||
|
StackPane card = createOrder(Integer.toString(controller.miniModel.players.size()));
|
||||||
|
|
||||||
|
VBox overlay = new VBox(-20);
|
||||||
|
overlay.setPickOnBounds(false);
|
||||||
|
StackPane.setAlignment(overlay, Pos.TOP_LEFT);
|
||||||
|
StackPane.setMargin(overlay, new Insets(9, 0, 0, 57));
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
overlay.getChildren().add(totem);
|
||||||
|
}
|
||||||
|
card.getChildren().add(overlay);
|
||||||
|
board.getChildren().add(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void renderSlotMap() {
|
||||||
|
int i = 0;
|
||||||
|
for (Map.Entry<Slot, Player> entry : controller.miniModel.slotPlayerMap.entrySet()) {
|
||||||
|
Slot slot = entry.getKey();
|
||||||
|
final int index = i;
|
||||||
|
StackPane img = createSlot(slot, true, true);
|
||||||
|
img.setOnMouseClicked(e -> controller.slotChoice(controller.myUsername, index));
|
||||||
|
board.getChildren().add(img);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void renderMyHand() {
|
private void renderMyHand() {
|
||||||
myHand.getChildren().clear();
|
myHand.getChildren().clear();
|
||||||
myHand.setSpacing(14);
|
myHand.setSpacing(14);
|
||||||
@@ -481,7 +499,7 @@ public class MainFXMLController {
|
|||||||
|
|
||||||
popup = new Popup();
|
popup = new Popup();
|
||||||
popup.getContent().add(popupCards);
|
popup.getContent().add(popupCards);
|
||||||
popup.setAutoHide(true);
|
popup.setAutoHide(false); // gestito manualmente per permettere click sulle carte
|
||||||
|
|
||||||
popup.addEventHandler(Event.ANY, e -> {
|
popup.addEventHandler(Event.ANY, e -> {
|
||||||
if (popup.getScene() != null) {
|
if (popup.getScene() != null) {
|
||||||
@@ -490,18 +508,50 @@ public class MainFXMLController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showPopup() {
|
||||||
|
Window window = myHand.getScene().getWindow();
|
||||||
|
popup.show(window, 0, 0);
|
||||||
|
popup.getScene().setFill(Color.TRANSPARENT);
|
||||||
|
popup.setX(window.getX() + (window.getWidth() - popup.getWidth()) / 2);
|
||||||
|
popup.setY(window.getY() + (window.getHeight() - popup.getHeight()) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Popup sola visualizzazione (mano, icone sidepanel)
|
||||||
private void openPopup(ArrayList<? extends PlayableCard> cardList) {
|
private void openPopup(ArrayList<? extends PlayableCard> cardList) {
|
||||||
popupCards.getChildren().clear();
|
popupCards.getChildren().clear();
|
||||||
for (PlayableCard card : cardList) {
|
for (PlayableCard card : cardList) {
|
||||||
popupCards.getChildren().add(createCard(card, false, false));
|
popupCards.getChildren().add(createCard(card, false, false));
|
||||||
}
|
}
|
||||||
|
showPopup();
|
||||||
|
}
|
||||||
|
|
||||||
Window window = myHand.getScene().getWindow();
|
// Popup edifici upper: click sulla carta → pesca e chiude
|
||||||
popup.show(window, 0, 0);
|
private void openPopupUpperBuilding(ArrayList<BuildingCard> cardList) {
|
||||||
popup.getScene().setFill(Color.TRANSPARENT);
|
popupCards.getChildren().clear();
|
||||||
|
for (int i = 0; i < cardList.size(); i++) {
|
||||||
|
final int index = i;
|
||||||
|
StackPane img = createCard(cardList.get(i), true, false);
|
||||||
|
img.setOnMouseClicked(e -> {
|
||||||
|
popup.hide();
|
||||||
|
controller.drawUpperBuildingCard(controller.myUsername, index);
|
||||||
|
});
|
||||||
|
popupCards.getChildren().add(img);
|
||||||
|
}
|
||||||
|
showPopup();
|
||||||
|
}
|
||||||
|
|
||||||
// centra dopo show() quando le dimensioni sono disponibili
|
// Popup edifici lower: click sulla carta → pesca e chiude
|
||||||
popup.setX(window.getX() + (window.getWidth() - popup.getWidth()) / 2);
|
private void openPopupLowerBuilding(ArrayList<BuildingCard> cardList) {
|
||||||
popup.setY(window.getY() + (window.getHeight() - popup.getHeight()) / 2);
|
popupCards.getChildren().clear();
|
||||||
|
for (int i = 0; i < cardList.size(); i++) {
|
||||||
|
final int index = i;
|
||||||
|
StackPane img = createCard(cardList.get(i), true, false);
|
||||||
|
img.setOnMouseClicked(e -> {
|
||||||
|
popup.hide();
|
||||||
|
controller.drawLowerBuildingCard(controller.myUsername, index);
|
||||||
|
});
|
||||||
|
popupCards.getChildren().add(img);
|
||||||
|
}
|
||||||
|
showPopup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user