From 0622c35303bc62ccaad863411f83af2d6d5ebf33 Mon Sep 17 00:00:00 2001 From: Hanno Fleischer Date: Thu, 5 Dec 2024 14:02:02 +0100 Subject: [PATCH] fixed state transitions and implemented the Intro state to move the pieces to the correct start setup added some logic so that the client only transitions to the intro state when the animation has finished at it received the new active Player, and after animating the setup it switches to the corresponding state baserd on the active player and displays the now new active player. --- .../java/pp/mdga/client/ClientGameLogic.java | 2 +- .../gamestate/DetermineStartPlayerState.java | 12 ++++++++++++ .../pp/mdga/client/gamestate/GameStates.java | 2 +- .../mdga/client/gamestate/SpectatorState.java | 2 +- .../pp/mdga/client/gamestate/WaitingState.java | 2 +- .../determinestartplayerstate/Intro.java | 12 ++++++------ .../RollRankingDiceState.java | 3 +-- .../WaitRankingState.java | 18 +++++++++++++++++- .../gamestate/turnstate/RollDiceState.java | 4 ++-- .../powercardstate/ChoosePowerCardState.java | 4 ++-- .../src/main/java/pp/mdga/game/Player.java | 1 + 11 files changed, 45 insertions(+), 17 deletions(-) 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 c65de787..1b7a7be5 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 @@ -152,7 +152,7 @@ public boolean isHost() { * @return the calculated moves as int */ public int getCalculatedMoves() { - return game.getDiceEyes() * game.getDiceModifier(); + return 0; } /** diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java index 82300679..9ac6f912 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/DetermineStartPlayerState.java @@ -7,6 +7,8 @@ import pp.mdga.client.gamestate.determinestartplayerstate.Intro; import pp.mdga.client.gamestate.determinestartplayerstate.RollRankingDiceState; import pp.mdga.client.gamestate.determinestartplayerstate.WaitRankingState; +import pp.mdga.message.client.AnimationEndMessage; +import pp.mdga.message.server.ActivePlayerMessage; import pp.mdga.message.server.DieMessage; import pp.mdga.message.server.RankingResponseMessage; import pp.mdga.message.server.RankingRollAgainMessage; @@ -68,6 +70,11 @@ public void selectDice() { state.selectDice(); } + @Override + public void selectAnimationEnd(){ + state.selectAnimationEnd(); + } + @Override public void received(DieMessage msg){ state.received(msg); @@ -82,4 +89,9 @@ public void received(RankingRollAgainMessage msg){ public void received(RankingResponseMessage msg){ state.received(msg); } + + @Override + public void received(ActivePlayerMessage msg){ + state.received(msg); + } } 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 141bddae..66ae86a6 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 @@ -19,7 +19,7 @@ public GameStates(ClientState parent, ClientGameLogic logic) { protected void handlePowerCard(PlayCardMessage msg) { if (msg.getCard().equals(BonusCard.TURBO)) { - logic.getGame().setDiceModifier(msg.getDiceModifier()); + //logic.getGame().setDiceModifier(msg.getDiceModifier()); } else if (msg.getCard().equals(BonusCard.SHIELD)) { if (logic.getGame().getBoard().getInfieldIndexOfPiece(logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier())) % 10 != 0) { logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()).setShield(ShieldState.SUPPRESSED); 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 e1f8bfb9..3b190708 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 @@ -36,7 +36,7 @@ public void received(CeremonyMessage msg) { @Override public void received(DieMessage msg) { - logic.getGame().setDiceEyes(msg.getDiceEye()); + //logic.getGame().setDiceEyes(msg.getDiceEye()); // logic.addNotification(new RollDiceNotification(logic.getGame().getActiveColor(), logic.getGame().getDiceEyes(), logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier())); if (msg.getDiceEye() == 6) { logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseDiced6(); 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 42bdb48c..5567f413 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 @@ -40,7 +40,7 @@ public void received(DiceNowMessage msg) { @Override public void received(DieMessage msg) { - logic.getGame().setDiceEyes(msg.getDiceEye()); +// logic.getGame().setDiceEyes(msg.getDiceEye()); // logic.addNotification(new RollDiceNotification(logic.getGame().getActiveColor(), logic.getGame().getDiceEyes(), logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier())); if (msg.getDiceEye() == 6) { logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseDiced6(); diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java index dca39b4f..5409e977 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/Intro.java @@ -5,9 +5,7 @@ import pp.mdga.client.gamestate.DetermineStartPlayerState; import pp.mdga.game.Player; import pp.mdga.message.client.AnimationEndMessage; -import pp.mdga.notification.AcquireCardNotification; -import pp.mdga.notification.DrawCardNotification; -import pp.mdga.notification.WaitMoveNotification; +import pp.mdga.notification.MovePieceNotification; import java.util.Map; @@ -43,12 +41,13 @@ public DetermineStartPlayerState getParent(){ @Override public void enter() { for(Map.Entry entry : logic.getGame().getPlayers().entrySet()){ - logic.addNotification(new WaitMoveNotification(entry.getValue().getPieces()[0].getUuid())); + //logic.addNotification(new WaitMoveNotification(entry.getValue().getPieces()[0].getUuid())); + logic.addNotification(new MovePieceNotification(entry.getValue().getPieces()[0].getUuid(), entry.getValue().getStartNodeIndex(), true)); animationCounter++; if(entry.getKey() == logic.getOwnPlayerId()){ - logic.addNotification(new AcquireCardNotification(entry.getValue().getHandCards().get(0))); + //logic.addNotification(new AcquireCardNotification(entry.getValue().getHandCards().get(0))); } else { - logic.addNotification(new DrawCardNotification(entry.getValue().getColor(), entry.getValue().getHandCards().get(0))); + //logic.addNotification(new DrawCardNotification(entry.getValue().getColor(), entry.getValue().getHandCards().get(0))); } } } @@ -66,6 +65,7 @@ public void exit() { */ @Override public void selectAnimationEnd(){ + System.out.println("selectAnimationEnd"); animationCounter--; if(animationCounter != 0){ return; diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/RollRankingDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/RollRankingDiceState.java index 72cc63da..292c6748 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/RollRankingDiceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/RollRankingDiceState.java @@ -28,13 +28,12 @@ public void exit() { @Override public void selectDice(){ - System.out.println("selectDice"); logic.send(new RequestDieMessage()); } @Override public void received(DieMessage msg){ - logic.addNotification(new RollDiceNotification(logic.getGame().getPlayerById(logic.getOwnPlayerId()).getColor(), msg.getDiceEye(),true)); parent.setState(parent.getWaitRanking()); + logic.addNotification(new RollDiceNotification(logic.getGame().getPlayerById(logic.getOwnPlayerId()).getColor(), msg.getDiceEye(),true)); } } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java index 6deca992..97f828bd 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/determinestartplayerstate/WaitRankingState.java @@ -3,6 +3,7 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientState; import pp.mdga.client.gamestate.DetermineStartPlayerState; +import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.server.ActivePlayerMessage; import pp.mdga.message.server.RankingResponseMessage; import pp.mdga.message.server.RankingRollAgainMessage; @@ -11,6 +12,7 @@ public class WaitRankingState extends DetermineStartPlayerStates { private final DetermineStartPlayerState parent; + private boolean canTransition = false; public WaitRankingState(ClientState parent, ClientGameLogic logic) { super(parent, logic); @@ -19,7 +21,6 @@ public WaitRankingState(ClientState parent, ClientGameLogic logic) { @Override public void enter() { - } @Override @@ -36,10 +37,25 @@ public void received(RankingRollAgainMessage msg){ public void received(RankingResponseMessage msg){ } + + @Override + public void selectAnimationEnd(){ + logic.send(new AnimationEndMessage()); + changeToIntro(); + } + @Override public void received(ActivePlayerMessage msg){ logic.addNotification(new ActivePlayerNotification(msg.getColor())); logic.getGame().setActiveColor(msg.getColor()); + changeToIntro(); + } + + private void changeToIntro(){ + if (!canTransition){ + canTransition = true; + return; + } parent.setState(parent.getIntro()); } } 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 50bfc2a1..1c7fff2f 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 @@ -22,7 +22,7 @@ public void enter() { @Override public void exit() { - logic.getGame().setDiceModifier(1); + //logic.getGame().setDiceModifier(1); } public TurnState getParent() { @@ -30,7 +30,7 @@ public TurnState getParent() { } public void received(DieMessage msg){ - logic.getGame().setDiceEyes(msg.getDiceEye()); +// logic.getGame().setDiceEyes(msg.getDiceEye()); parent.setState(parent.getChoosePiece()); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java index c679d198..27174204 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gamestate/turnstate/powercardstate/ChoosePowerCardState.java @@ -39,7 +39,7 @@ public ChoosePowerCardState(ClientState parent, ClientGameLogic logic) { @Override public void enter() { possibleCards = new ArrayList<>(); - //TODO: logic.send(new RequestPossibleCardsMessage()); + System.out.println("ChoosePowerCardState"); } /** @@ -80,7 +80,7 @@ public void selectCard(BonusCard card){ @Override public void received(PlayCardMessage msg){ if(msg.getCard().equals(BonusCard.TURBO)){ - logic.getGame().setDiceModifier(msg.getDiceModifier()); + //logic.getGame().setDiceModifier(msg.getDiceModifier()); } else { LOGGER.log(System.Logger.Level.ERROR, "Received card that is not turbo"); } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java index ec38a06a..1ca33b4d 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java @@ -85,6 +85,7 @@ public void initialize() { this.pieces[index] = new Piece(this.color, PieceState.WAITING); this.waitingArea[index] = this.pieces[index]; } + startNodeIndex = color.ordinal() * 10; } /**