added swap functionality in model for server & client

This commit is contained in:
Cedric Beck
2024-12-08 22:28:51 +01:00
parent 2d7fddf09a
commit fa18ae4280
2 changed files with 52 additions and 19 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}