From 26d2d0587d871b02bb7bc0c47cbf4bff2961fbd7 Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Sun, 1 Dec 2024 12:36:44 +0100 Subject: [PATCH] added the remaining logic for GameState and its substatemachines --- .../main/java/pp/mdga/client/GameState.java | 82 ++++++++++++++++++- .../mdga/client/gameState/SpectatorState.java | 60 +++++++++++++- .../pp/mdga/client/gameState/TurnState.java | 79 +++++++++++++++--- .../gameState/turnState/ChoosePieceState.java | 32 ++++++++ .../gameState/turnState/PowerCardState.java | 36 ++++++++ 5 files changed, 274 insertions(+), 15 deletions(-) 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 41e3f0f0..7f04f8a8 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 @@ -1,10 +1,9 @@ package pp.mdga.client; import pp.mdga.client.gameState.*; -import pp.mdga.message.server.DieMessage; -import pp.mdga.message.server.PauseGameMessage; -import pp.mdga.message.server.RankingResponseMessage; -import pp.mdga.message.server.RankingRollAgainMessage; +import pp.mdga.game.BonusCard; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; import pp.mdga.notification.InterruptNotification; public class GameState extends ClientState { @@ -48,6 +47,16 @@ public void selectDice(){ state.selectDice(); } + @Override + public void selectPiece(Piece piece){ + state.selectPiece(piece); + } + + @Override + public void selectCard(BonusCard card){ + state.selectCard(card); + } + @Override public void received(PauseGameMessage msg){ logic.enterInterrupt(); @@ -69,6 +78,71 @@ public void received(RankingResponseMessage msg){ state.received(msg); } + @Override + public void received(SelectPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(WaitPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(StartPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(NoTurnMessage msg){ + state.received(msg); + } + + @Override + public void received(MoveMessage msg){ + state.received(msg); + } + + @Override + public void received(CeremonyMessage msg){ + state.received(msg); + } + + @Override + public void received(EndOfTurnMessage msg){ + state.received(msg); + } + + @Override + public void received(SpectatorMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceAgainMessage msg){ + state.received(msg); + } + + @Override + public void received(PossibleCardMessage msg){ + state.received(msg); + } + + @Override + public void received(PlayCardMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceNowMessage msg){ + state.received(msg); + } + + @Override + public void received(ActivePlayerMessage msg){ + state.received(msg); + } + public GameStates getState(){ return 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 001454bc..2e7673fa 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 @@ -2,11 +2,18 @@ import pp.mdga.client.ClientGameLogic; import pp.mdga.client.ClientState; -import pp.mdga.message.server.CeremonyMessage; +import pp.mdga.client.GameState; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; +import pp.mdga.notification.*; public class SpectatorState extends GameStates { + + private final GameState parent; + public SpectatorState(ClientState parent, ClientGameLogic logic) { super(parent, logic); + this.parent = (GameState) parent; } @Override @@ -23,4 +30,55 @@ public void exit() { public void received(CeremonyMessage msg){ logic.setState(logic.getCeremony()); } + + @Override + public void received(DieMessage msg){ + 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(); + logic.getGame().getGameStatistics().increaseDiced6(); + } + parent.setState(parent.getAnimation()); + } + + @Override + public void received(PlayCardMessage msg){ + logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor(), msg.getCard())); + handlePowerCard(msg); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseCardsPlayed(); + logic.getGame().getGameStatistics().increaseCardsPlayed(); + parent.setState(parent.getAnimation()); + } + + @Override + public void received(ActivePlayerMessage msg){ + logic.addNotification(new ActivePlayerNotification(msg.getColor())); + logic.getGame().setActiveColor(msg.getColor()); + parent.setState(parent.getAnimation()); + } + + @Override + public void received(MoveMessage msg){ + Piece pieceToMove = logic.getGame().getPieceThroughIdentifier(msg.getIdentifier()); + if (msg.isHomeMove()){ + logic.addNotification(new HomeMoveNotification(pieceToMove.getUuid(), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove)].clearOccupant(); + logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).setPieceInHome(msg.getTargetIndex(), pieceToMove); + } else { + if (logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].isOccupied()) { + throwPiece(logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].getOccupant()); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increasePiecesThrown(); + logic.getGame().getGameStatistics().increasePiecesThrown(); + } + if(logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).getStartNodeIndex() == logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove)){ + logic.addNotification(new MovePieceNotification(pieceToMove.getUuid(), msg.getTargetIndex(), true)); + logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].setOccupant(pieceToMove); + } else { + logic.addNotification(new MovePieceNotification(pieceToMove.getUuid(), logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].setOccupant(pieceToMove); + } + } + parent.setState(parent.getAnimation()); + } } 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 055986cf..b59a35b8 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 @@ -9,10 +9,9 @@ import pp.mdga.client.gameState.turnState.PowerCardState; import pp.mdga.client.gameState.turnState.RollDiceState; import pp.mdga.client.gameState.turnState.TurnStates; -import pp.mdga.message.server.CeremonyMessage; -import pp.mdga.message.server.EndOfTurnMessage; -import pp.mdga.message.server.NoTurnMessage; -import pp.mdga.message.server.SpectatorMessage; +import pp.mdga.game.BonusCard; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; public class TurnState extends GameStates { @@ -47,23 +46,83 @@ public void setState(TurnStates state){ } @Override - public void received(NoTurnMessage msg){ - parent.setState(parent.getWaiting()); + public void selectPiece(Piece piece){ + state.selectPiece(piece); } @Override - public void received(EndOfTurnMessage msg){ - parent.setState(parent.getWaiting()); + public void selectCard(BonusCard card){ + state.selectCard(card); + } + + @Override + public void selectAnimationEnd(){ + state.selectAnimationEnd(); + } + + @Override + public void received(SelectPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(WaitPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(StartPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(NoTurnMessage msg){ + state.received(msg); + } + + @Override + public void received(MoveMessage msg){ + state.received(msg); } @Override public void received(CeremonyMessage msg){ - logic.setState(logic.getCeremony()); + state.received(msg); + } + + @Override + public void received(EndOfTurnMessage msg){ + state.received(msg); } @Override public void received(SpectatorMessage msg){ - parent.setState(parent.getSpectator()); + state.received(msg); + } + + @Override + public void received(DiceAgainMessage msg){ + state.received(msg); + } + + @Override + public void received(PossibleCardMessage msg){ + state.received(msg); + } + + @Override + public void received(PlayCardMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceNowMessage msg){ + state.received(msg); + } + + @Override + public void received(DieMessage msg){ + state.received(msg); } public ChoosePieceState getChoosePiece() { diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java index 6861399f..b1a0c7e3 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java @@ -4,6 +4,8 @@ import pp.mdga.client.ClientState; import pp.mdga.client.gameState.TurnState; import pp.mdga.client.gameState.turnState.choosePieceState.*; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; public class ChoosePieceState extends TurnStates { @@ -37,6 +39,36 @@ public void setState(ChoosePieceStates state){ currentState.enter(); } + @Override + public void selectPiece(Piece piece){ + currentState.selectPiece(piece); + } + + @Override + public void received(SelectPieceMessage msg){ + currentState.received(msg); + } + + @Override + public void received(WaitPieceMessage msg){ + currentState.received(msg); + } + + @Override + public void received(StartPieceMessage msg){ + currentState.received(msg); + } + + @Override + public void received(NoTurnMessage msg){ + currentState.received(msg); + } + + @Override + public void received(MoveMessage msg){ + currentState.received(msg); + } + public NoPieceState getNoPiece(){ return noPieceState; } diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java index 9ff3a521..fd80b68d 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java @@ -7,6 +7,12 @@ import pp.mdga.client.gameState.turnState.powerCardState.PowerCardStates; import pp.mdga.client.gameState.turnState.powerCardState.ShieldState; import pp.mdga.client.gameState.turnState.powerCardState.SwapState; +import pp.mdga.game.BonusCard; +import pp.mdga.game.Piece; +import pp.mdga.message.server.DiceNowMessage; +import pp.mdga.message.server.PlayCardMessage; +import pp.mdga.message.server.PossibleCardMessage; +import pp.mdga.message.server.PossiblePieceMessage; public class PowerCardState extends TurnStates { @@ -39,6 +45,36 @@ public void setState(PowerCardStates state) { this.state = state; } + @Override + public void received(PossibleCardMessage msg){ + state.received(msg); + } + + @Override + public void received(PlayCardMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceNowMessage msg){ + state.received(msg); + } + + @Override + public void received(PossiblePieceMessage msg){ + state.received(msg); + } + + @Override + public void selectCard(BonusCard card) { + state.selectCard(card); + } + + @Override + public void selectPiece(Piece piece) { + state.selectPiece(piece); + } + public ChoosePowerCardState getChoosePowerCard() { return choosePowerCardState; }