diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java index d939baf..a916f57 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Game.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Game.java @@ -84,7 +84,7 @@ public class Game implements Serializable { /** * The order logic card associated with this game. */ - private OrderLogicCard orderLogicCard; + public OrderLogicCard orderLogicCard; /** * The board associated with this game. diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java index b0e0c4f..0e53038 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/OrderLogicCard.java @@ -109,16 +109,17 @@ public abstract class OrderLogicCard implements Serializable { } /** + * TODO rifare javadoc * Returns the {@code Player}'s position based on it's {@code Username}. * @param username The desired {@code Player}'s username. * @return {@code int} - the {@code Player}'s position. * @see Player */ - protected int getPosition(String username) + public int getPosition(String username) { int pos = 0; - for (Player p : players) { - if (p.getUserName().equals(username)) + for (OrderPlayer p : playerList) { + if (p.player.getUserName().equals(username)) return pos; pos++; } 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 84da107..9f65148 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 @@ -1,13 +1,9 @@ package it.polimi.ingsw.gc14.View.GUI; 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.Cards.TribeCards.Characters.*; -import it.polimi.ingsw.gc14.Model.Game; -import it.polimi.ingsw.gc14.Model.PlayableCard; -import it.polimi.ingsw.gc14.Model.Player; -import it.polimi.ingsw.gc14.Model.Slot; import javafx.animation.ScaleTransition; import javafx.fxml.FXML; import javafx.geometry.Insets; @@ -86,18 +82,56 @@ public class MainFXMLController { } // ==== HELPER ==== - private ImageView createSlot(Slot slot) { - ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-"+slot.getSlotId()+".png"))); + private StackPane createOrder(String num, boolean withZoom, boolean withShadow) { + ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Orders/order-" + num + ".png"))); img.setFitHeight(240); img.setPreserveRatio(true); - Rectangle clip = new Rectangle(); clip.setWidth(img.getBoundsInLocal().getWidth()); clip.setHeight(240); clip.setArcWidth(20); clip.setArcHeight(20); img.setClip(clip); - return img; + StackPane wrapper = new StackPane(img); + if (withShadow) { + addShadow(wrapper); + } + if (withZoom) { + addHoverZoom(wrapper); + } + return wrapper; + } + + private StackPane createSlot(Slot slot, boolean withZoom, boolean withShadow) { + ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Fronts/card-" + slot.getSlotId() + ".png"))); + img.setFitHeight(240); + img.setPreserveRatio(true); + Rectangle clip = new Rectangle(); + clip.setWidth(img.getBoundsInLocal().getWidth()); + clip.setHeight(240); + clip.setArcWidth(20); + clip.setArcHeight(20); + img.setClip(clip); + StackPane wrapper = new StackPane(img); + + Player player = model.getSlotMap().get(slot); + if (player != null) { + int index = model.getPlayers().indexOf(player); + ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png"))); + totem.setFitHeight(70); + totem.setPreserveRatio(true); + StackPane.setAlignment(totem, Pos.TOP_LEFT); + StackPane.setMargin(totem, new Insets(8, 0, 0, 57)); + wrapper.getChildren().add(totem); + } + + if (withShadow) { + addShadow(wrapper); + } + if (withZoom) { + addHoverZoom(wrapper); + } + return wrapper; } private StackPane createCard(PlayableCard card, boolean withZoom, boolean withShadow) { String id = card.getIdIMG(); @@ -201,16 +235,42 @@ public class MainFXMLController { i++; } } + private void renderOrder() { + StackPane card = createOrder(Integer.toString(model.getNPlayers()), true, true); + + VBox overlay = new VBox(-20); + overlay.setPickOnBounds(false); + StackPane.setAlignment(overlay, Pos.TOP_LEFT); + StackPane.setMargin(overlay, new Insets(9, 0, 0, 57)); + + int i = 0; + for (Player player : model.getPlayers()) { + final int index = i; + + ImageView totem = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + index + ".png"))); + totem.setFitHeight(70); + totem.setPreserveRatio(true); + if (!(model.orderLogicCard.getPosition(player.getUserName()) != -1 && !model.getSlotMap().containsValue(player))) { + totem.setOpacity(0.0); + } + overlay.getChildren().add(totem); + i++; + } + card.getChildren().add(overlay); + board.getChildren().add(card); + } private void renderBoard() { board.setSpacing(14); board.setAlignment(Pos.CENTER); board.getChildren().clear(); + renderOrder(); + int i = 0; for (Map.Entry entry : model.getSlotMap().entrySet()) { Slot slot = entry.getKey(); final int index = i; - ImageView img = createSlot(slot); + StackPane img = createSlot(slot, true, true); img.setOnMouseClicked(e -> controller.slotChoice(username, index)); board.getChildren().add(img); i++; @@ -289,18 +349,16 @@ 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.getStyleClass().add("player-card"); - Label usernameLabel; - if(player.getUserName().equals(username)) { - usernameLabel = new Label(player.getUserName()+" (you)"); + Label usernameLabel = new Label(player.getUserName()); - } else { - usernameLabel = new Label(player.getUserName()); - } usernameLabel.getStyleClass().add("label-medium"); Label foodLabel = new Label("Food: " + player.getFoodValue()); foodLabel.getStyleClass().add("label-small"); @@ -314,6 +372,34 @@ public class MainFXMLController { 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"))); + totem.setFitHeight(10); + 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); + + playersHand.getChildren().add(card); } private void renderIcons(HBox icons, Player player) { String[][] iconTypes = { diff --git a/src/main/resources/GUIImages/Fronts/card-A.png b/src/main/resources/GUIImages/Fronts/card-A.png index 805ba49..31bd2cf 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-A.png and b/src/main/resources/GUIImages/Fronts/card-A.png differ diff --git a/src/main/resources/GUIImages/Fronts/card-B.png b/src/main/resources/GUIImages/Fronts/card-B.png index 43ce33b..3e28b4d 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-B.png and b/src/main/resources/GUIImages/Fronts/card-B.png differ diff --git a/src/main/resources/GUIImages/Fronts/card-C.png b/src/main/resources/GUIImages/Fronts/card-C.png index a1ff0f8..7a99df1 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-C.png and b/src/main/resources/GUIImages/Fronts/card-C.png differ diff --git a/src/main/resources/GUIImages/Fronts/card-D.png b/src/main/resources/GUIImages/Fronts/card-D.png index c2c06cd..b87b2bc 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-D.png and b/src/main/resources/GUIImages/Fronts/card-D.png differ diff --git a/src/main/resources/GUIImages/Fronts/card-E.png b/src/main/resources/GUIImages/Fronts/card-E.png index d11087f..1a44b40 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-E.png and b/src/main/resources/GUIImages/Fronts/card-E.png differ diff --git a/src/main/resources/GUIImages/Fronts/card-F.png b/src/main/resources/GUIImages/Fronts/card-F.png index d387692..e413b45 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-F.png and b/src/main/resources/GUIImages/Fronts/card-F.png differ diff --git a/src/main/resources/GUIImages/Fronts/card-G.png b/src/main/resources/GUIImages/Fronts/card-G.png index 88d1515..71dba80 100644 Binary files a/src/main/resources/GUIImages/Fronts/card-G.png and b/src/main/resources/GUIImages/Fronts/card-G.png differ diff --git a/src/main/resources/GUIImages/Icons/Artist.png b/src/main/resources/GUIImages/Icons/Artist.png new file mode 100644 index 0000000..da912cd Binary files /dev/null and b/src/main/resources/GUIImages/Icons/Artist.png differ diff --git a/src/main/resources/GUIImages/Icons/Builder.png b/src/main/resources/GUIImages/Icons/Builder.png new file mode 100644 index 0000000..f1c4456 Binary files /dev/null and b/src/main/resources/GUIImages/Icons/Builder.png differ diff --git a/src/main/resources/GUIImages/Icons/Gatherer.png b/src/main/resources/GUIImages/Icons/Gatherer.png new file mode 100644 index 0000000..1467953 Binary files /dev/null and b/src/main/resources/GUIImages/Icons/Gatherer.png differ diff --git a/src/main/resources/GUIImages/Icons/Hunter.png b/src/main/resources/GUIImages/Icons/Hunter.png new file mode 100644 index 0000000..303b034 Binary files /dev/null and b/src/main/resources/GUIImages/Icons/Hunter.png differ diff --git a/src/main/resources/GUIImages/Icons/Inventor.png b/src/main/resources/GUIImages/Icons/Inventor.png new file mode 100644 index 0000000..2847a49 Binary files /dev/null and b/src/main/resources/GUIImages/Icons/Inventor.png differ diff --git a/src/main/resources/GUIImages/Icons/Shaman.png b/src/main/resources/GUIImages/Icons/Shaman.png new file mode 100644 index 0000000..1997981 Binary files /dev/null and b/src/main/resources/GUIImages/Icons/Shaman.png differ diff --git a/src/main/resources/GUIImages/Orders/order-2.png b/src/main/resources/GUIImages/Orders/order-2.png new file mode 100644 index 0000000..d5fb664 Binary files /dev/null and b/src/main/resources/GUIImages/Orders/order-2.png differ diff --git a/src/main/resources/GUIImages/Orders/order-3.png b/src/main/resources/GUIImages/Orders/order-3.png new file mode 100644 index 0000000..07ddcdc Binary files /dev/null and b/src/main/resources/GUIImages/Orders/order-3.png differ diff --git a/src/main/resources/GUIImages/Orders/order-4.png b/src/main/resources/GUIImages/Orders/order-4.png new file mode 100644 index 0000000..ad38d99 Binary files /dev/null and b/src/main/resources/GUIImages/Orders/order-4.png differ diff --git a/src/main/resources/GUIImages/Orders/order-5.png b/src/main/resources/GUIImages/Orders/order-5.png new file mode 100644 index 0000000..5bc424d Binary files /dev/null and b/src/main/resources/GUIImages/Orders/order-5.png differ diff --git a/src/main/resources/GUIImages/Totems/totem_0.png b/src/main/resources/GUIImages/Totems/totem_0.png new file mode 100644 index 0000000..df06839 Binary files /dev/null and b/src/main/resources/GUIImages/Totems/totem_0.png differ diff --git a/src/main/resources/GUIImages/Totems/totem_1.png b/src/main/resources/GUIImages/Totems/totem_1.png new file mode 100644 index 0000000..dc6500a Binary files /dev/null and b/src/main/resources/GUIImages/Totems/totem_1.png differ diff --git a/src/main/resources/GUIImages/Totems/totem_2.png b/src/main/resources/GUIImages/Totems/totem_2.png new file mode 100644 index 0000000..4002357 Binary files /dev/null and b/src/main/resources/GUIImages/Totems/totem_2.png differ diff --git a/src/main/resources/GUIImages/Totems/totem_3.png b/src/main/resources/GUIImages/Totems/totem_3.png new file mode 100644 index 0000000..76fef78 Binary files /dev/null and b/src/main/resources/GUIImages/Totems/totem_3.png differ diff --git a/src/main/resources/GUIImages/Totems/totem_4.png b/src/main/resources/GUIImages/Totems/totem_4.png new file mode 100644 index 0000000..87bd796 Binary files /dev/null and b/src/main/resources/GUIImages/Totems/totem_4.png differ