From 6e49da750306f05793a76bea1bebfe29945bdae9 Mon Sep 17 00:00:00 2001 From: prisect Date: Sun, 21 Jun 2026 15:11:12 +0200 Subject: [PATCH] Ready system overhaul --- src/GraphServer/GraphServer.java | 35 ++++++++++++++++++++++++++++---- src/Graphwar/GameData.java | 1 + src/Graphwar/PlayerBoard.java | 12 +++++++++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/GraphServer/GraphServer.java b/src/GraphServer/GraphServer.java index 71127fa..31192b1 100644 --- a/src/GraphServer/GraphServer.java +++ b/src/GraphServer/GraphServer.java @@ -572,6 +572,28 @@ protected void sendModeMessage() sendMessageAll(message); } + private boolean isPlayerReady(int playerID) + { + ListIterator itr = clients.listIterator(); + + while(itr.hasNext()) + { + ClientConnection tmpClient = itr.next(); + List players = tmpClient.getPlayers(); + ListIterator pitr = players.listIterator(); + + while(pitr.hasNext()) + { + Player player = pitr.next(); + if(player.getID() == playerID) + { + return player.getReady(); + } + } + } + return false; + } + private boolean checkAllReady() { ListIterator itr = clients.listIterator(); @@ -1105,7 +1127,6 @@ public synchronized void handleMessage(String message, ClientConnection client) client.addPlayer(player); players.add(player); - setEveryoneNotReady(); sendAddPlayerMessage(player, client); } }break; @@ -1115,10 +1136,12 @@ public synchronized void handleMessage(String message, ClientConnection client) int team = Integer.parseInt(info[1]); int playerID = Integer.parseInt(info[2]); + if(isPlayerReady(playerID)) + break; + // Only send message to everyone if player belongs to that client if(setTeam(team, playerID, client)) { - setEveryoneNotReady(); sendMessageAll(message); } }break; @@ -1139,9 +1162,11 @@ public synchronized void handleMessage(String message, ClientConnection client) { int playerID = Integer.parseInt(info[1]); + if(isPlayerReady(playerID)) + break; + if(addSoldier(playerID, client)) { - setEveryoneNotReady(); sendMessageAll(message); } }break; @@ -1150,9 +1175,11 @@ public synchronized void handleMessage(String message, ClientConnection client) { int playerID = Integer.parseInt(info[1]); + if(isPlayerReady(playerID)) + break; + if(removeSoldier(playerID, client)) { - setEveryoneNotReady(); sendMessageAll(message); } }break; diff --git a/src/Graphwar/GameData.java b/src/Graphwar/GameData.java index 9b59423..9727ec9 100644 --- a/src/Graphwar/GameData.java +++ b/src/Graphwar/GameData.java @@ -740,6 +740,7 @@ private void setReadyMessage(String[] info) throws Exception if(gameState == Constants.PRE_GAME) { + ((PreGameScreen)graphwar.getUI().getScreen(Constants.PRE_GAME_SCREEN)).updatePlayer(player); ((PreGameScreen)graphwar.getUI().getScreen(Constants.PRE_GAME_SCREEN)).repaint(); } diff --git a/src/Graphwar/PlayerBoard.java b/src/Graphwar/PlayerBoard.java index 76d971d..93c0646 100644 --- a/src/Graphwar/PlayerBoard.java +++ b/src/Graphwar/PlayerBoard.java @@ -175,6 +175,8 @@ public void actionPerformed(ActionEvent arg0) { if(arg0.getSource() == switchSide) { + if(player.getReady()) + return; graphwar.getGameData().switchSide(player); } else if(arg0.getSource() == removePlayer) @@ -183,6 +185,8 @@ else if(arg0.getSource() == removePlayer) } else if(isAddSoldier(arg0.getSource())) { + if(player.getReady()) + return; graphwar.getGameData().addSoldier(player); } } @@ -193,6 +197,8 @@ public void mouseClicked(MouseEvent arg0) { if(isAddSoldier(arg0.getSource())) { + if(player.getReady()) + return; graphwar.getGameData().removeSoldier(player); } } @@ -271,9 +277,11 @@ private void updatePlayerButtons(Player player) { if(playersEntries[i].player == player) { + boolean canInteract = (player.isLocalPlayer() || graphwar.getGameData().isLeader()) && !player.getReady(); + if(player.getTeam() == Constants.TEAM1) { - if(player.isLocalPlayer() || graphwar.getGameData().isLeader()) + if(canInteract) { playersEntries[i].switchSide.updateImages(switchNormal, switchOver, switchMask); playersEntries[i].removePlayer.updateImages(removeNormal, removeOver, removeMask); @@ -298,7 +306,7 @@ private void updatePlayerButtons(Player player) } else { - if(player.isLocalPlayer() || graphwar.getGameData().isLeader()) + if(canInteract) { playersEntries[i].switchSide.updateImages(switchNormalMirror, switchOverMirror, switchMaskMirror); playersEntries[i].removePlayer.updateImages(removeNormalMirror, removeOverMirror, removeMaskMirror);