From 66dc9c02ead97d8726bbd6809978c954c471df07 Mon Sep 17 00:00:00 2001 From: Daniel Grigencha Date: Fri, 6 Dec 2024 00:53:11 +0100 Subject: [PATCH] Updated 'PowerCardState' class. Updated the 'PowerCardState' class by adding the 'currentState', 'choosePowerCardState', 'shieldCardState', 'swapCardState' and 'turboCardState' attributes and its getter methods to it. In Addition, logic was written into the 'enter' method. --- .../automaton/game/turn/PowerCardState.java | 152 +++++++++++++++++- 1 file changed, 151 insertions(+), 1 deletion(-) diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/PowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/PowerCardState.java index 9f8e7ee0..ebe2b199 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/PowerCardState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/game/turn/PowerCardState.java @@ -1,8 +1,20 @@ package pp.mdga.server.automaton.game.turn; +import pp.mdga.game.Piece; +import pp.mdga.game.card.PowerCard; +import pp.mdga.message.server.DiceNowMessage; +import pp.mdga.message.server.PossibleCardMessage; import pp.mdga.server.ServerGameLogic; -import pp.mdga.server.automaton.game.AnimationState; import pp.mdga.server.automaton.game.TurnState; +import pp.mdga.server.automaton.game.turn.powercard.ChoosePowerCardState; +import pp.mdga.server.automaton.game.turn.powercard.PowerCardAutomatonState; +import pp.mdga.server.automaton.game.turn.powercard.ShieldCardState; +import pp.mdga.server.automaton.game.turn.powercard.SwapCardState; +import pp.mdga.server.automaton.game.turn.powercard.TurboCardState; +import pp.mdga.visitor.ServerCardVisitor; + +import java.util.HashSet; +import java.util.Set; public class PowerCardState extends TurnAutomatonState { /** @@ -10,6 +22,22 @@ public class PowerCardState extends TurnAutomatonState { */ private static final System.Logger LOGGER = System.getLogger(PowerCardState.class.getName()); + /** + * Create PowerCardState states. + */ + private PowerCardAutomatonState currentState; + private final ChoosePowerCardState choosePowerCardState; + private final ShieldCardState shieldCardState; + private final SwapCardState swapCardState; + private final TurboCardState turboCardState; + + /** + * Create PowerCardState attributes. + */ + private ServerCardVisitor visitor; + private PowerCard selectedCard; + private final Set selectedPieces = new HashSet<>(); + /** * Constructs a server state of the specified game logic. * @@ -18,15 +46,137 @@ public class PowerCardState extends TurnAutomatonState { */ public PowerCardState(TurnState turnAutomaton, ServerGameLogic logic) { super(turnAutomaton, logic); + this.choosePowerCardState = new ChoosePowerCardState(this, logic); + this.shieldCardState = new ShieldCardState(this, logic); + this.swapCardState = new SwapCardState(this, logic); + this.turboCardState = new TurboCardState(this, logic); + this.setCurrentState(this.choosePowerCardState); } @Override public void enter() { LOGGER.log(System.Logger.Level.DEBUG, "Exited PowerCardState state."); + this.visitor = new ServerCardVisitor(this.turnAutomaton.getPlayer()); + for (PowerCard card: this.turnAutomaton.getPlayer().getHandCards()) { + card.accept(this.visitor); + } + + if (this.visitor.getCards().isEmpty()) { + this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new DiceNowMessage()); + this.turnAutomaton.setCurrentState(this.turnAutomaton.getRollDiceState()); + } else { + this.logic.getServerSender().send(this.logic.getGame().getActivePlayerId(), new PossibleCardMessage(this.visitor.getCards())); + } } @Override public void exit() { LOGGER.log(System.Logger.Level.DEBUG, "Entered PowerCardState state."); } + + /** + * This method will be used to add the given piece parameter to the selectedPieces attribute of PowerCardState + * class. + * + * @param piece as the new selected piece as a Piece object. + */ + public void addSelectedPiece(Piece piece) { + this.selectedPieces.add(piece); + } + + /** + * This method will be used to return currentState attribute of PowerCardState class. + * + * @return currentState as a PowerCardAutomatonState object. + */ + public PowerCardAutomatonState getCurrentState() { + return this.currentState; + } + + /** + * This method will be used to return choosePowerCardState attribute of PowerCardState class. + * + * @return choosePowerCardState as a ChoosePowerCardState object. + */ + public ChoosePowerCardState getChoosePowerCardState() { + return this.choosePowerCardState; + } + + /** + * This method will be used to return shieldCardState attribute of PowerCardState class. + * + * @return shieldCardState as a ShieldCardState object. + */ + public ShieldCardState getShieldCardState() { + return this.shieldCardState; + } + + /** + * This method will be used to return swapCardState attribute of PowerCardState class. + * + * @return swapCardState as a SwapCardState object. + */ + public SwapCardState getSwapCardState() { + return this.swapCardState; + } + + /** + * This method will be used to return turboCardState attribute of PowerCardState class. + * + * @return turboCardState as a TurboCardState object. + */ + public TurboCardState getTurboCardState() { + return this.turboCardState; + } + + /** + * This method will be used to return visitor attribute of PowerCardState class. + * + * @return visitor as a ServerCardVisitor object. + */ + public ServerCardVisitor getVisitor() { + return this.visitor; + } + + /** + * This method will be used to return selectedPieces attribute of PowerCardState class. + * + * @return selectedCard as a PowerCard object. + */ + public PowerCard getSelectedCard() { + return this.selectedCard; + } + + /** + * This method will be used to return selectedPieces attribute of PowerCardState class. + * + * @return selectedPieces as a Set of Piece objects. + */ + public Set getSelectedPieces() { + return this.selectedPieces; + } + + /** + * This method will be used to set currentState attribute of PowerCardState class to the given state parameter. + * In Addition, the currentState will be exited, changed and entered. + * + * @param state as the new currentState attribute as a PowerCardAutomatonState object. + */ + public void setCurrentState(PowerCardAutomatonState state) { + if (this.currentState != null) { + this.currentState.exit(); + } + this.currentState = state; + this.currentState.enter(); + } + + /** + * This method will be used to set selectedCard attribute of PowerCardState class to the given selectedCard + * parameter. + * + * @param selectedCard as the new selectedCard attribute as a PowerCard object. + */ + public void setSelectedCard(PowerCard selectedCard) { + this.selectedCard = selectedCard; + } }