diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 6db36ef3..17dc1374 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -189,7 +189,7 @@ public class GameState implements Runnable { } catch (InterruptedException e) { System.out.println("[GameState] interrupted exception"); } - if (currentStage == GameStages.PRE_RACE || curentStage == GameStages.RACING) { + if (currentStage == GameStages.PRE_RACE || currentStage == GameStages.RACING) { update(); } @@ -245,10 +245,6 @@ public class GameState implements Runnable { raceFinished = false; } } - for (Yacht yacht : yachts.values()) { - yacht.update(timeInterval); - } - } if (raceFinished) { currentStage = GameStages.FINISHED; diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index bd22063c..c1eb394f 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -8,11 +8,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; -import seng302.gameServer.server.messages.BoatSubMessage; -import seng302.gameServer.server.messages.Message; -import seng302.gameServer.server.messages.RaceStatus; -import seng302.gameServer.server.messages.RaceStatusMessage; -import seng302.gameServer.server.messages.RaceType; + +import seng302.gameServer.server.messages.*; import seng302.model.GeoPoint; import seng302.model.Player; import seng302.model.PolarTable; @@ -30,6 +27,10 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate { private static final int PORT = 4942; private static final Integer CLIENT_UPDATES_PER_SECOND = 10; private static final int LOG_LEVEL = 1; + private static final int PRESTART_TIME = 60 * -1000; + private static final int WARNING_TIME = 30 * -1000; + private static final int PREPATORY_TIME = 10 * -1000; + private boolean terminated; private Thread thread; @@ -166,10 +167,21 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate { @Override public void run() { broadcastMessage(makeRaceStatusMessage()); + if (GameState.getCurrentStage() == GameStages.PRE_RACE || GameState.getCurrentStage() == GameStages.LOBBYING) { + broadcastMessage(makeRaceStartMessage()); + } } }, 0, 500); } + + private RaceStartStatusMessage makeRaceStartMessage() { + Long raceStartTime = GameState.getStartTime(); + + return new RaceStartStatusMessage(1, raceStartTime , + 1, RaceStartNotificationType.SET_RACE_START_TIME); + } + private RaceStatusMessage makeRaceStatusMessage() { // variables taken from GameServerThread @@ -184,10 +196,22 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate { boatSubMessages.add(m); } - if (GameState.getCurrentStage() == GameStages.RACING) { - raceStatus = RaceStatus.STARTED; + long timeTillStart = System.currentTimeMillis() - GameState.getStartTime(); + + if (GameState.getCurrentStage() == GameStages.LOBBYING) { + raceStatus = RaceStatus.PRESTART; + } else if (GameState.getCurrentStage() == GameStages.PRE_RACE) { + raceStatus = RaceStatus.PRESTART; + + if (timeTillStart > WARNING_TIME) { + raceStatus = RaceStatus.WARNING; + } + + if (timeTillStart > PREPATORY_TIME) { + raceStatus = RaceStatus.PREPARATORY; + } } else { - raceStatus = RaceStatus.WARNING; + raceStatus = RaceStatus.STARTED; } return new RaceStatusMessage(1, raceStatus, GameState.getStartTime(), diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index bca65e0a..0acd5c52 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -73,11 +73,6 @@ public class ServerToClientThread implements Runnable, Observer { private XMLGenerator xml; - private static final int PRESTART_TIME = 60 * -1000; - private static final int WARNING_TIME = 30 * -1000; - private static final int PREPATORY_TIME = 10 * -1000; - - private List connectionListeners = new ArrayList<>(); private ServerYacht yacht; diff --git a/src/main/java/seng302/visualiser/controllers/LobbyController.java b/src/main/java/seng302/visualiser/controllers/LobbyController.java index 78b19c21..86a63ff5 100644 --- a/src/main/java/seng302/visualiser/controllers/LobbyController.java +++ b/src/main/java/seng302/visualiser/controllers/LobbyController.java @@ -142,11 +142,10 @@ public class LobbyController { @FXML public void readyButtonPressed() { GameState.setCurrentStage(GameStages.PRE_RACE); - return; // Do countdown logic here - //for (LobbyCloseListener readyListener : lobbyListeners) - // readyListener.notify(CloseStatus.READY); + for (LobbyCloseListener readyListener : lobbyListeners) + readyListener.notify(CloseStatus.READY); } public void setTitle (String title) {