Updated 'DeterminStartPlayerState' class.

Updated the 'DetermineStartPlayerState' class by adding the multi roll support to it. In Addition, the server model will be updated correctly.
This commit is contained in:
Daniel Grigencha
2024-12-06 03:29:11 +01:00
parent 39ed4238b5
commit 1a562a8d38

View File

@@ -1,5 +1,6 @@
package pp.mdga.server.automaton.game; package pp.mdga.server.automaton.game;
import pp.mdga.game.Color;
import pp.mdga.message.client.AnimationEndMessage; import pp.mdga.message.client.AnimationEndMessage;
import pp.mdga.message.client.RequestDieMessage; import pp.mdga.message.client.RequestDieMessage;
import pp.mdga.message.server.ActivePlayerMessage; import pp.mdga.message.server.ActivePlayerMessage;
@@ -24,10 +25,10 @@ public class DetermineStartPlayerState extends GameAutomatonState {
/** /**
* Create DetermineStartPlayerState attributes. * Create DetermineStartPlayerState attributes.
*/ */
private Map<Integer, Integer> diceResults = new HashMap<>(); private final Map<Integer, Integer> diceResults = new HashMap<>();
private Map<Integer, Integer> rankedResults = new HashMap<>();
private final List<Integer> playersHaveToRoll = new ArrayList<>(); private final List<Integer> playersHaveToRoll = new ArrayList<>();
private Map<Integer, Boolean> messageReceived = new HashMap<>(); private final Map<Integer, Boolean> messageReceived = new HashMap<>();
private int rolls = 0;
/** /**
* Constructs a server state of the specified game logic. * Constructs a server state of the specified game logic.
@@ -48,7 +49,7 @@ public void enter() {
public void exit() { public void exit() {
LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state."); LOGGER.log(System.Logger.Level.DEBUG, "Exited DetermineStartPlayerState state.");
this.diceResults.clear(); this.diceResults.clear();
this.rankedResults.clear(); this.messageReceived.clear();
} }
/** /**
@@ -63,6 +64,7 @@ public void received(RequestDieMessage msg, int from) {
int roll = this.logic.getGame().getDie().shuffle(); int roll = this.logic.getGame().getDie().shuffle();
this.logic.getServerSender().send(from, new DieMessage(roll)); this.logic.getServerSender().send(from, new DieMessage(roll));
this.diceResults.put(from, roll); this.diceResults.put(from, roll);
this.rolls++;
if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) { if (this.diceResults.size() == this.logic.getGame().getPlayers().size()) {
int maximumRoll = 0; int maximumRoll = 0;
@@ -79,6 +81,7 @@ else if (maximumRoll < entry.getKey()) {
this.logic.getServerSender().send(entry.getKey(), new EndOfTurnMessage()); this.logic.getServerSender().send(entry.getKey(), new EndOfTurnMessage());
} }
} }
} }
} }
@@ -92,16 +95,20 @@ else if (maximumRoll < entry.getKey()) {
@Override @Override
public void received(AnimationEndMessage msg, int from) { public void received(AnimationEndMessage msg, int from) {
this.messageReceived.put(from, true); this.messageReceived.put(from, true);
if (this.messageReceived.size() == this.logic.getGame().getPlayers().size()) { if (this.messageReceived.size() == this.rolls) {
this.messageReceived.clear();
if (this.playersHaveToRoll.size() > 1) { if (this.playersHaveToRoll.size() > 1) {
for (Integer id : this.playersHaveToRoll) { for (Integer id : this.playersHaveToRoll) {
this.logic.getServerSender().send(id, new DiceNowMessage()); this.logic.getServerSender().send(id, new DiceNowMessage());
} }
this.rolls = 0;
} }
else { else {
Color color = this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor();
this.logic.getGame().setActiveColor(color);
this.logic.getServerSender().broadcast(new RankingResponseMessage(this.diceResults)); this.logic.getServerSender().broadcast(new RankingResponseMessage(this.diceResults));
this.logic.getServerSender().broadcast(new ActivePlayerMessage(this.logic.getGame().getPlayerById(this.playersHaveToRoll.get(0)).getColor())); this.logic.getServerSender().broadcast(new ActivePlayerMessage(color));
this.gameAutomaton.setCurrentState(this.gameAutomaton.getTurnState()); this.gameAutomaton.setCurrentState(this.gameAutomaton.getAnimationState());
} }
} }
} }