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.Cards.BuildingCard;
|
||||
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.Network.EventType;
|
||||
import it.polimi.ingsw.gc14.Network.NetworkEvent;
|
||||
@@ -33,15 +32,12 @@ import java.util.*;
|
||||
public class MainFXMLController {
|
||||
|
||||
@FXML private HBox mainHBox;
|
||||
|
||||
@FXML private HBox board;
|
||||
@FXML private HBox upperList;
|
||||
@FXML private HBox lowerList;
|
||||
@FXML private HBox myHand;
|
||||
|
||||
@FXML private VBox sidePanel;
|
||||
@FXML private HBox info;
|
||||
|
||||
@FXML private Label era;
|
||||
@FXML private Label round;
|
||||
@FXML private Label player;
|
||||
@@ -71,10 +67,16 @@ public class MainFXMLController {
|
||||
mainHBox.sceneProperty().addListener((obs, oldScene, newScene) -> {
|
||||
if (newScene != null) {
|
||||
newScene.getRoot().applyCss();
|
||||
// chiudi popup cliccando fuori da esso
|
||||
newScene.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
|
||||
if (popup.isShowing()) {
|
||||
popup.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
initPopup();
|
||||
renderBackground(); // solo una volta
|
||||
renderBackground();
|
||||
}
|
||||
|
||||
|
||||
@@ -215,7 +217,7 @@ public class MainFXMLController {
|
||||
icon.setEffect(grayscale);
|
||||
icon.setOpacity(0.3);
|
||||
} else {
|
||||
icon.setOnMouseClicked(e -> openPopup(cards));
|
||||
icon.setOnMouseClicked(e -> openPopup(new ArrayList<>(cards)));
|
||||
addHoverZoom(icon);
|
||||
}
|
||||
|
||||
@@ -252,14 +254,7 @@ public class MainFXMLController {
|
||||
upperList.getChildren().add(img);
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
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++;
|
||||
}
|
||||
drawUpperBuilding();
|
||||
}
|
||||
|
||||
private void renderLower() {
|
||||
@@ -275,62 +270,36 @@ public class MainFXMLController {
|
||||
lowerList.getChildren().add(img);
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
for (BuildingCard card : controller.miniModel.board.lowerListBuilding) {
|
||||
final int index = i;
|
||||
StackPane img = createCard(card, true, true);
|
||||
img.setOnMouseClicked(e -> controller.drawLowerBuildingCard(controller.myUsername, index));
|
||||
drawLowerBuilding();
|
||||
}
|
||||
|
||||
private void drawUpperBuilding() {
|
||||
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);
|
||||
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");
|
||||
StackPane.setAlignment(label, Pos.TOP_RIGHT);
|
||||
img.getChildren().add(label);
|
||||
img.setOnMouseClicked(e -> openPopup(cardList));
|
||||
img.setOnMouseClicked(e -> openPopup(new ArrayList<>(cardList)));
|
||||
myHand.getChildren().add(img);
|
||||
} else {
|
||||
Region placeholder = new Region();
|
||||
@@ -435,6 +404,55 @@ public class MainFXMLController {
|
||||
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() {
|
||||
myHand.getChildren().clear();
|
||||
myHand.setSpacing(14);
|
||||
@@ -481,7 +499,7 @@ public class MainFXMLController {
|
||||
|
||||
popup = new Popup();
|
||||
popup.getContent().add(popupCards);
|
||||
popup.setAutoHide(true);
|
||||
popup.setAutoHide(false); // gestito manualmente per permettere click sulle carte
|
||||
|
||||
popup.addEventHandler(Event.ANY, e -> {
|
||||
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) {
|
||||
popupCards.getChildren().clear();
|
||||
for (PlayableCard card : cardList) {
|
||||
popupCards.getChildren().add(createCard(card, false, false));
|
||||
}
|
||||
showPopup();
|
||||
}
|
||||
|
||||
Window window = myHand.getScene().getWindow();
|
||||
popup.show(window, 0, 0);
|
||||
popup.getScene().setFill(Color.TRANSPARENT);
|
||||
// Popup edifici upper: click sulla carta → pesca e chiude
|
||||
private void openPopupUpperBuilding(ArrayList<BuildingCard> cardList) {
|
||||
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.setX(window.getX() + (window.getWidth() - popup.getWidth()) / 2);
|
||||
popup.setY(window.getY() + (window.getHeight() - popup.getHeight()) / 2);
|
||||
// Popup edifici lower: click sulla carta → pesca e chiude
|
||||
private void openPopupLowerBuilding(ArrayList<BuildingCard> cardList) {
|
||||
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