diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java index 46c728d3..275d66da 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/board/BoardHandler.java @@ -722,8 +722,8 @@ public void clearSelectable(){ p.unHighlight(); p.setSelectable(false); p.setHoverable(false); - selectedPieceNodeMap.get(p).unSelect(); - selectedPieceNodeMap.get(p).unHighlight(); + if(selectedPieceNodeMap.get(p) != null) selectedPieceNodeMap.get(p).unSelect(); + if(selectedPieceNodeMap.get(p) != null) selectedPieceNodeMap.get(p).unHighlight(); } for(PieceControl p : selectableOwnPieces) { p.unSelect(); diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java index 88b2351d..eda19ab4 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/gui/CardLayerHandler.java @@ -29,6 +29,7 @@ public class CardLayerHandler { private DiceControl diceControl; private final Map bonusCardControlMap = new HashMap<>(); + private final List cardOrder = new ArrayList<>(); private final Map bonusCardIntegerMap = new HashMap<>(); private final Set selectableCards = new HashSet<>(); @@ -80,14 +81,13 @@ public void addCard(BonusCard card) { if (card == BonusCard.HIDDEN) throw new RuntimeException("Can't add hidden card to GUI"); if (!bonusCardControlMap.containsKey(card)) { - CardControl control = createCard(bonusToAsset(card), nextPos()); - bonusCardControlMap.put(card, control); - cardLayer.addSpatial(control.getRoot()); + cardOrder.add(card); } int newNum = bonusCardIntegerMap.getOrDefault(card, 0) + 1; bonusCardIntegerMap.put(card, newNum); - bonusCardControlMap.get(card).setNumCard(newNum); + + updateCard(); } public void removeCard(BonusCard card){ @@ -95,12 +95,11 @@ public void removeCard(BonusCard card){ bonusCardIntegerMap.put(card, bonusCardIntegerMap.get(card) - 1); if(bonusCardIntegerMap.get(card) <= 0){ - cardLayer.deleteSpatial(bonusCardControlMap.get(card).getRoot()); bonusCardIntegerMap.remove(card); - bonusCardControlMap.remove(card); + cardOrder.remove(card); } - - } + updateCard(); + } else throw new RuntimeException("card is not in bonusCardControlMap"); } public void clearSelectableCards() { @@ -114,6 +113,22 @@ public void clearSelectableCards() { cardSelect = null; } + private void updateCard(){ + for(BonusCard card : bonusCardControlMap.keySet()){ + CardControl control = bonusCardControlMap.get(card); + cardLayer.deleteSpatial(control.getRoot()); + } + bonusCardControlMap.clear(); + + for(int i = 0; i < cardOrder.size(); i++){ + BonusCard card = cardOrder.get(i); + CardControl control = createCard(bonusToAsset(card), nextPos(i)); + control.setNumCard(bonusCardIntegerMap.get(card)); + cardLayer.addSpatial(control.getRoot()); + bonusCardControlMap.put(card, control); + } + } + public void setSelectableCards(List select) { for (BonusCard card : select) { selectableCards.add(bonusCardControlMap.get(card)); @@ -171,8 +186,8 @@ private Asset bonusToAsset(BonusCard card) { }; } - private Vector3f nextPos() { - return START.add(MARGIN.mult(bonusCardControlMap.size())); + private Vector3f nextPos(int i) { + return START.add(MARGIN.mult(i)); } private Camera createOverlayCam() { diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/PlayPowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/PlayPowerCardState.java index 38c7b2e4..cfd1fb00 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/PlayPowerCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/PlayPowerCardState.java @@ -28,7 +28,7 @@ public void enter() { extraAnimationCounter++; } - logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor() , playCardMessage.getCard().getCard())); + logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor(), playCardMessage.getCard().getCard())); logic.getGame().getActivePlayer().removeHandCard(playCardMessage.getCard()); handlePowerCard(playCardMessage); }