diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java index 518feb52..6a69b6ba 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/MdgaApp.java @@ -66,6 +66,8 @@ public class MdgaApp extends SimpleApplication { private ServerConnection networkConnection; + public static final int DEBUG_MULTIPLIER = 0; + public MdgaApp() { networkConnection = new NetworkSupport(this); this.clientGameLogic = new ClientGameLogic(networkConnection); diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java index 7bc98b81..67ef7b53 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/NotificationSynchronizer.java @@ -7,6 +7,7 @@ import pp.mdga.client.view.CeremonyView; import pp.mdga.client.view.GameView; import pp.mdga.client.view.LobbyView; +import pp.mdga.game.BonusCard; import pp.mdga.game.Color; import pp.mdga.notification.*; @@ -171,6 +172,12 @@ private void handleGame(Notification notification) { } else if (notification instanceof NoShieldNotification n) { boardHandler.unshieldPiece(n.getPieceId()); } else if (notification instanceof PlayCardNotification n) { + if(n.getCard() == BonusCard.TURBO) { + guiHandler.turbo(); + app.getModelSynchronize().animationEnd(); + return; + } + if(n.getColor() == ownColor) guiHandler.playCardOwn(n.getCard()); else guiHandler.playCardEnemy(n.getColor(), n.getCard()); } else if (notification instanceof PlayerInGameNotification n) { @@ -203,7 +210,7 @@ private void handleGame(Notification notification) { boardHandler.swapPieceAnim(n.getFirstPiece(), n.getSecondPiece()); guiHandler.swap(); } else if (notification instanceof WaitMoveNotification) { - //TODO ??? + //nothing } else if (notification instanceof SelectableMoveNotification n) { boardHandler.outlineMove(n.getPieces(), n.getMoveIndices(), n.getHomeMoves()); modelSynchronizer.setSwap(false); @@ -214,7 +221,7 @@ private void handleGame(Notification notification) { boardHandler.outlineShield(n.getPieces()); modelSynchronizer.setSwap(false); } else if (notification instanceof TurboActiveNotification){ - guiHandler.turbo(); + //nothing } else if (notification instanceof FinishNotification n){ guiHandler.finish(n.getColorFinished()); } else { diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java index 5caa6192..14b5436e 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java @@ -153,6 +153,7 @@ private void initializeSerializables() { Serializer.registerClass(ShieldCard.class); Serializer.registerClass(HiddenCard.class); Serializer.registerClass(ChoosePieceStateMessage.class); + Serializer.registerClass(DrawCardMessage.class); Serializer.registerClass(Color.class, new EnumSerializer()); Serializer.registerClass(PieceState.class, new EnumSerializer()); diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/UUIDSerializer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/UUIDSerializer.java index c892e6d7..a99522bf 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/UUIDSerializer.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/UUIDSerializer.java @@ -21,6 +21,9 @@ public T readObject(ByteBuffer data, Class c) throws IOException public void writeObject(ByteBuffer buffer, Object object) throws IOException { UUID uuid = (UUID) object; - buffer.put(uuid.toString().getBytes()); + + if(uuid != null) { + buffer.put(uuid.toString().getBytes()); + } } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java index 6a6735fa..f32d8603 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java @@ -424,6 +424,14 @@ public void received(ChoosePieceStateMessage choosePieceStateMessage) { state.received(choosePieceStateMessage); } + /** + * @param drawCardMessage + */ + @Override + public void received(DrawCardMessage drawCardMessage) { + state.received(drawCardMessage); + } + /** * This method calls the method received of the state * diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java index e9b5c5e6..d210b7d7 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java @@ -100,6 +100,11 @@ public void received(ChoosePieceStateMessage msg) { LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg.toString()); } + @Override + public void received(DrawCardMessage msg){ + LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg.toString()); + } + @Override public void received(MoveMessage msg) { LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg.toString()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java index 100a8072..a41d66c7 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java @@ -286,6 +286,11 @@ public void received(ChoosePieceStateMessage msg){ state.received(msg); } + @Override + public void received(DrawCardMessage msg){ + state.received(msg); + } + /** * This method returns the current state * diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/SpectatorState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/SpectatorState.java index c840e997..39602bed 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/SpectatorState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/SpectatorState.java @@ -31,6 +31,13 @@ public void received(CeremonyMessage msg) { logic.setState(logic.getCeremony()); } + @Override + public void received(DrawCardMessage msg){ + logic.addNotification(new DrawCardNotification(logic.getGame().getActiveColor(), msg.getCard().getCard())); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseActivatedBonusNodes(); + logic.getGame().getGameStatistics().increaseActivatedBonusNodes(); + } + @Override public void received(DieMessage msg) { //logic.getGame().setDiceEyes(msg.getDiceEye()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java index 80f57ae5..0521dda2 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/TurnState.java @@ -143,6 +143,11 @@ public void received(ChoosePieceStateMessage msg){ state.received(msg); } + @Override + public void received(DrawCardMessage msg){ + state.received(msg); + } + public ChoosePieceState getChoosePiece() { return choosePieceState; } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java index 002ce1cd..30287096 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/WaitingState.java @@ -67,6 +67,13 @@ public void received(ActivePlayerMessage msg) { } } + @Override + public void received(DrawCardMessage msg){ + logic.addNotification(new DrawCardNotification(logic.getGame().getActiveColor(), msg.getCard().getCard())); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseActivatedBonusNodes(); + logic.getGame().getGameStatistics().increaseActivatedBonusNodes(); + } + @Override public void received(MoveMessage msg) { Piece piece = logic.getGame().getPieceThroughUUID(msg.getPiece().getUuid()); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java index 90d473d3..2d2c1258 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/RollDiceState.java @@ -6,6 +6,7 @@ import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.RequestDieMessage; import pp.mdga.message.server.ChoosePieceStateMessage; +import pp.mdga.message.server.DiceNowMessage; import pp.mdga.message.server.DieMessage; import pp.mdga.message.server.NoTurnMessage; import pp.mdga.notification.DiceNowNotification; @@ -59,4 +60,9 @@ public void received(ChoosePieceStateMessage msg){ public void received(NoTurnMessage msg){ parent.getParent().setState(parent.getParent().getWaiting()); } + + @Override + public void received(DiceNowMessage msg){ + logic.addNotification(new DiceNowNotification()); + } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/BonusNode.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/BonusNode.java index cfb1f89d..27642566 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/BonusNode.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/BonusNode.java @@ -13,4 +13,9 @@ public class BonusNode extends Node { BonusNode() { super(null); } + + @Override + public boolean isBonus() { + return true; + } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Node.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Node.java index c9482b30..0dc1d98a 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Node.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Node.java @@ -49,6 +49,10 @@ public void setOccupant(Piece occupant) { this.occupant = occupant; } + public boolean isBonus(){ + return false; + } + /** * This method handles the event when a new occupant is moved to the node, * it then returns the old occupant. diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/DrawCardMessage.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/DrawCardMessage.java new file mode 100644 index 00000000..6ccc1411 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/DrawCardMessage.java @@ -0,0 +1,34 @@ +package pp.mdga.message.server; + +import com.jme3.network.serializing.Serializable; +import pp.mdga.game.card.PowerCard; + +@Serializable +public class DrawCardMessage extends ServerMessage{ + + private final PowerCard card; + + public DrawCardMessage(PowerCard card){ + super(); + this.card = card; + } + + private DrawCardMessage(){ + super(); + card = null; + } + + /** + * Accepts a visitor to process this message. + * + * @param interpreter the visitor to process this message + */ + @Override + public void accept(ServerInterpreter interpreter) { + interpreter.received(this); + } + + public PowerCard getCard(){ + return card; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java index 5ac5be99..be0c2184 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java @@ -223,4 +223,6 @@ public interface ServerInterpreter { void received(IncorrectRequestMessage msg); void received(ChoosePieceStateMessage choosePieceStateMessage); + + void received(DrawCardMessage drawCardMessage); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/ShieldCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/ShieldCardState.java index 1d095895..cf7eaff0 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/ShieldCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/ShieldCardState.java @@ -3,6 +3,7 @@ import pp.mdga.game.Piece; import pp.mdga.game.PieceState; import pp.mdga.game.ShieldState; +import pp.mdga.game.card.PowerCard; import pp.mdga.message.client.SelectedPiecesMessage; import pp.mdga.message.server.IncorrectRequestMessage; import pp.mdga.message.server.PlayCardMessage; @@ -56,6 +57,8 @@ public void received(SelectedPiecesMessage msg, int from) { } } this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new PlayCardMessage(this.powerCardAutomaton.getSelectedCard(), new ArrayList<>(), this.logic.getGame().getDiceModifier())); + this.logic.getGame().getPlayerByColor(this.logic.getGame().getActiveColor()).removeHandCard(this.powerCardAutomaton.getSelectedCard()); + this.logic.getGame().getDiscardPile().add(this.powerCardAutomaton.getSelectedCard()); this.powerCardAutomaton.getTurnAutomaton().setCurrentState(this.powerCardAutomaton.getTurnAutomaton().getPlayPowerCardState()); } else { 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 e8074773..ab297dc8 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 @@ -78,6 +78,9 @@ public void received(SelectedPiecesMessage msg, int from) { logic.getServerSender().broadcast(new PlayCardMessage(this.powerCardAutomaton.getSelectedCard(), msg.getPieces(), 1)); + this.logic.getGame().getPlayerByColor(this.logic.getGame().getActiveColor()).removeHandCard(this.powerCardAutomaton.getSelectedCard()); + this.logic.getGame().getDiscardPile().add(this.powerCardAutomaton.getSelectedCard()); + this.powerCardAutomaton.getTurnAutomaton().setCurrentState(this.powerCardAutomaton.getTurnAutomaton().getPlayPowerCardState()); } } else { diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java index 6cbf91ec..74d40d0d 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/powercard/TurboCardState.java @@ -26,6 +26,8 @@ public void enter() { this.logic.getGame().getDie().modify(); this.logic.getGame().setDiceModifier(this.logic.getGame().getDie().getDieModifier()); this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new PlayCardMessage(this.powerCardAutomaton.getSelectedCard(), new ArrayList<>(), this.logic.getGame().getDiceModifier())); + this.logic.getGame().getPlayerByColor(this.logic.getGame().getActiveColor()).removeHandCard(this.powerCardAutomaton.getSelectedCard()); + this.logic.getGame().getDiscardPile().add(this.powerCardAutomaton.getSelectedCard()); this.powerCardAutomaton.getTurnAutomaton().setCurrentState(this.powerCardAutomaton.getTurnAutomaton().getPlayPowerCardState()); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java index e7eee0f9..7dc061e1 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/rolldice/FirstRollState.java @@ -38,7 +38,7 @@ public void enter() { LOGGER.log(System.Logger.Level.INFO, "Entered FirstRollState state."); roll = 0; moveablePieces = new ArrayList<>(); - for (Piece piece : this.rollDiceAutomaton.getTurnAutomaton().getPlayer().getPieces()) { + for (Piece piece : this.logic.getGame().getPlayerByColor(this.logic.getGame().getActiveColor()).getPieces()) { if (piece.getState() == PieceState.HOME || piece.getState() == PieceState.ACTIVE) { moveablePieces.add(piece); }