diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java index 68f86ca3..d4cb87ef 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/GameStates.java @@ -2,7 +2,9 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientState; +import pp.mdga.game.Board; import pp.mdga.game.BonusCard; +import pp.mdga.game.Node; import pp.mdga.game.Piece; import pp.mdga.game.PieceState; import pp.mdga.game.ShieldState; @@ -12,6 +14,7 @@ import pp.mdga.notification.SwapPieceNotification; import pp.mdga.notification.ThrowPieceNotification; +import java.util.List; import java.util.UUID; public abstract class GameStates extends ClientState { @@ -28,13 +31,7 @@ protected void handlePowerCard(PlayCardMessage msg) { } else if (msg.getCard().getCard().equals(BonusCard.SHIELD)) { handleShield(msg.getPieces().get(0).getUuid()); } else { - Piece ownPiece = logic.getGame().getPieceThroughUUID(msg.getPieces().get(0).getUuid()); - Piece enemyPiece = logic.getGame().getPieceThroughUUID(msg.getPieces().get(1).getUuid()); - LOGGER.log(System.Logger.Level.INFO, "Swapping"); - int ownIndex = logic.getGame().getBoard().getInfieldIndexOfPiece(ownPiece); - logic.addNotification(new SwapPieceNotification(ownPiece.getUuid(), enemyPiece.getUuid())); - logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(enemyPiece)].setOccupant(ownPiece); - logic.getGame().getBoard().getInfield()[ownIndex].setOccupant(enemyPiece); + swapPieces(msg.getPieces().get(0), msg.getPieces().get(1)); } logic.getGame().getDiscardPile().add(msg.getCard()); } @@ -57,4 +54,16 @@ private void handleShield(UUID uuid) { logic.addNotification(new ShieldActiveNotification(uuid)); } } + + private void swapPieces(Piece messageOwn, Piece messageEnemy) { + //swap Pieces in Model + Board board = logic.getGame().getBoard(); + Piece modelOwn = logic.getGame().getPieceThroughUUID(messageOwn.getUuid()); + Piece modelEnemy = logic.getGame().getPieceThroughUUID(messageEnemy.getUuid()); + Node ownNode = board.getInfield()[board.getInfieldIndexOfPiece(modelOwn)]; + Node enemyNode = board.getInfield()[board.getInfieldIndexOfPiece(modelEnemy)]; + + ownNode.setOccupant(modelEnemy); + enemyNode.setOccupant(modelOwn); + } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/SwapCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/SwapCardState.java index cd4ddbfe..e8074773 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/SwapCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/SwapCardState.java @@ -1,6 +1,10 @@ package pp.mdga.server.automaton.game.turn.powercard; +import pp.mdga.game.Board; +import pp.mdga.game.Color; +import pp.mdga.game.Node; import pp.mdga.game.Piece; +import pp.mdga.game.card.SwapCard; import pp.mdga.message.client.SelectedPiecesMessage; import pp.mdga.message.server.IncorrectRequestMessage; import pp.mdga.message.server.PlayCardMessage; @@ -9,6 +13,7 @@ import pp.mdga.server.automaton.game.turn.PowerCardState; import java.util.ArrayList; +import java.util.List; public class SwapCardState extends PowerCardAutomatonState { @@ -51,20 +56,27 @@ public void exit() { @Override public void received(SelectedPiecesMessage msg, int from) { if (msg.getPieces().size() == 2) { - Piece first = msg.getPieces().get(0); - Piece second = msg.getPieces().get(1); - if ((this.powerCardAutomaton.getVisitor().getSwapOwnPieces().contains(first) - && this.powerCardAutomaton.getVisitor().getSwapOtherPieces().contains(second)) - || (this.powerCardAutomaton.getVisitor().getSwapOwnPieces().contains(second) - && this.powerCardAutomaton.getVisitor().getSwapOtherPieces().contains(first))) { - this.powerCardAutomaton.addSelectedPiece(first); - this.powerCardAutomaton.addSelectedPiece(second); + Piece selOwn = msg.getPieces().get(0); + Piece selEnemy = msg.getPieces().get(1); + List ownPieces = this.powerCardAutomaton.getVisitor().getSwapOwnPieces(); + List enemyPieces = this.powerCardAutomaton.getVisitor().getSwapOtherPieces(); - ArrayList temp = new ArrayList<>(); - temp.add(first); - temp.add(second); + //if selOwn and selEnemy is in wrong order + if(ownPieces.contains(selEnemy) && enemyPieces.contains(selOwn)){ + Piece temp = selEnemy; + selEnemy = selOwn; + selOwn = temp; + } - logic.getServerSender().broadcast(new PlayCardMessage(this.powerCardAutomaton.getSelectedCard(), temp, 1)); + if (ownPieces.contains(selOwn) && enemyPieces.contains(selEnemy)) { + this.powerCardAutomaton.addSelectedPiece(selOwn); + this.powerCardAutomaton.addSelectedPiece(selEnemy); + + if(!(powerCardAutomaton.getSelectedCard() instanceof SwapCard)) throw new RuntimeException("getSelectedCard is not swapCard"); + + swapPieces(selOwn, selEnemy); + + logic.getServerSender().broadcast(new PlayCardMessage(this.powerCardAutomaton.getSelectedCard(), msg.getPieces(), 1)); this.powerCardAutomaton.getTurnAutomaton().setCurrentState(this.powerCardAutomaton.getTurnAutomaton().getPlayPowerCardState()); } @@ -72,4 +84,16 @@ public void received(SelectedPiecesMessage msg, int from) { this.logic.getServerSender().send(from, new IncorrectRequestMessage(4)); } } + + private void swapPieces(Piece messageOwn, Piece messageEnemy) { + //swap Pieces in Model + Board board = logic.getGame().getBoard(); + Piece modelOwn = logic.getGame().getPieceThroughUUID(messageOwn.getUuid()); + Piece modelEnemy = logic.getGame().getPieceThroughUUID(messageEnemy.getUuid()); + Node ownNode = board.getInfield()[board.getInfieldIndexOfPiece(modelOwn)]; + Node enemyNode = board.getInfield()[board.getInfieldIndexOfPiece(modelEnemy)]; + + ownNode.setOccupant(modelEnemy); + enemyNode.setOccupant(modelOwn); + } }