added swap functionality in model for server & client
This commit is contained in:
		@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<Piece> ownPieces = this.powerCardAutomaton.getVisitor().getSwapOwnPieces();
 | 
			
		||||
            List<Piece> enemyPieces = this.powerCardAutomaton.getVisitor().getSwapOtherPieces();
 | 
			
		||||
 | 
			
		||||
                ArrayList<Piece> 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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user