added more logic for the server state diagram

This commit is contained in:
Daniel Grigencha
2024-11-24 15:27:10 +01:00
committed by Felix
parent e3d5d8e2e9
commit 85ea4d340c
8 changed files with 80 additions and 11 deletions

View File

@@ -1,6 +1,9 @@
package pp.mdga.server;
import pp.mdga.game.Color;
import pp.mdga.game.Player;
import pp.mdga.message.client.*;
import pp.mdga.message.server.ServerMessage;
import pp.mdga.message.server.ServerStartGame;
import pp.mdga.message.server.UpdateReady;
import pp.mdga.message.server.UpdateTSK;
@@ -26,7 +29,7 @@ public Lobby(ServerState parent, ServerGameLogic logic) {
*/
@Override
public void receivedDeselectTSK(DeselectTSK msg, int from) {
broadcastUpdate(new UpdateTSK());
broadcastUpdate(new UpdateTSK(logic.getPlayerById(from).getName(), msg.getColor()));
}
/**
@@ -36,7 +39,7 @@ public void receivedDeselectTSK(DeselectTSK msg, int from) {
*/
@Override
public void receivedNotReady(LobbyNotReady msg, int from) {
broadcastUpdate(new UpdateReady());
broadcastUpdate(new UpdateReady(getPlayerColor(from), false));
}
/**
@@ -46,7 +49,24 @@ public void receivedNotReady(LobbyNotReady msg, int from) {
*/
@Override
public void receivedReady(LobbyReady msg, int from) {
broadcastUpdate(new UpdateReady());
broadcastUpdate(new UpdateReady(getPlayerColor(from), true));
}
/**
* Helper method to get the color associated with a player ID.
*
* @param playerId The ID of the player.
* @return The Color associated with the player, or null if not found.
*/
private Color getPlayerColor(int playerId) {
Player player = logic.getPlayerById(playerId);
for (var entry : logic.getGame().getPlayers().entrySet()) {
if (entry.getValue().equals(player)) {
return entry.getKey();
}
}
return null;
}
/**
@@ -56,7 +76,7 @@ public void receivedReady(LobbyReady msg, int from) {
*/
@Override
public void receivedSelectTSK(SelectTSK msg, int from) {
broadcastUpdate(new UpdateTSK());
broadcastUpdate(new UpdateTSK(logic.getPlayerById(from).getName(), msg.getColor()));
}
/**
@@ -66,7 +86,7 @@ public void receivedSelectTSK(SelectTSK msg, int from) {
*/
@Override
public void receivedStartGame(ClientStartGame msg, int from) {
if (Boolean.TRUE.equals(logic.getGame().allRanked())) {
if (Boolean.TRUE.equals(logic.getGame().allReady())) {
broadcastUpdate(new ServerStartGame());
parent.gotoState(new GameState(parent, logic));
}