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; + } }