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 1ecae283..41464e64 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 @@ -3,6 +3,7 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientState; import pp.mdga.client.gamestate.TurnState; +import pp.mdga.game.BonusCard; import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.server.PlayCardMessage; import pp.mdga.notification.PlayCardNotification; @@ -12,6 +13,7 @@ public class PlayPowerCardState extends TurnStates { private final TurnState parent; private PlayCardMessage playCardMessage; + private int animationCounter = 0; public PlayPowerCardState(ClientState parent, ClientGameLogic logic) { super(parent, logic); @@ -20,7 +22,11 @@ public PlayPowerCardState(ClientState parent, ClientGameLogic logic) { @Override public void enter() { + animationCounter++; logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor() , playCardMessage.getCard().getCard())); + if(!playCardMessage.getCard().getCard().equals(BonusCard.TURBO)){ + animationCounter++; + } handlePowerCard(playCardMessage); } @@ -35,7 +41,10 @@ public void setPlayCard(PlayCardMessage playCardMessage) { @Override public void selectAnimationEnd(){ - logic.send(new AnimationEndMessage()); - parent.setState(parent.getRollDice()); + animationCounter--; + if(animationCounter == 0){ + logic.send(new AnimationEndMessage()); + parent.setState(parent.getRollDice()); + } } } 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 09b518b0..9d101bb0 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 @@ -22,6 +22,7 @@ public class FirstRollState extends RollDiceAutomatonState { private static final System.Logger LOGGER = System.getLogger(FirstRollState.class.getName()); private List moveablePieces; private int roll; + private boolean isDied = false; /** * Constructs a server state of the specified game logic. @@ -37,6 +38,7 @@ public FirstRollState(RollDiceState rollDiceAutomaton, ServerGameLogic logic) { public void enter() { LOGGER.log(System.Logger.Level.INFO, "Entered FirstRollState state."); roll = 0; + isDied = false; moveablePieces = new ArrayList<>(); for (Piece piece : this.logic.getGame().getPlayerByColor(this.logic.getGame().getActiveColor()).getPieces()) { if (piece.getState() == PieceState.HOME || piece.getState() == PieceState.ACTIVE) { @@ -62,14 +64,16 @@ public void received(RequestDieMessage msg, int from) { roll = this.logic.getGame().getDie().shuffle(); this.logic.getGame().setDiceEyes(roll); this.logic.getServerSender().broadcast(new DieMessage(roll)); + isDied = true; } @Override public void received(AnimationEndMessage msg, int from) { if (from != this.logic.getGame().getActivePlayerId()) { - return; - } - if (!moveablePieces.isEmpty()) { + LOGGER.log(System.Logger.Level.INFO, "Received AnimationEndMessage from wrong player."); + } else if (!isDied){ + LOGGER.log(System.Logger.Level.INFO, "Received AnimationEndMessage without the active player rolling a die."); + } else if (!moveablePieces.isEmpty()) { this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new ChoosePieceStateMessage()); this.rollDiceAutomaton.getTurnAutomaton().setCurrentState(this.rollDiceAutomaton.getTurnAutomaton().getChoosePieceState()); } else {