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.
This commit is contained in:
Daniel Grigencha
2024-12-06 00:53:11 +01:00
parent dd95356abd
commit 66dc9c02ea

View File

@@ -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<Piece> 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<Piece> 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;
}
}