Fixed game crash, and improved timer

- Fixed the null pointer exception that happened on slower computers
- Made the timer start counting down when the host clicks ready

Tags: #story[1109]
This commit is contained in:
Michael Rausch
2017-08-16 16:34:31 +12:00
parent 5843fc9212
commit 711c94001b
4 changed files with 33 additions and 10 deletions
@@ -89,7 +89,7 @@ public class GameState implements Runnable {
markOrder = new MarkOrder(); //This could be instantiated at some point with a select map? markOrder = new MarkOrder(); //This could be instantiated at some point with a select map?
markListeners = new ArrayList<>(); markListeners = new ArrayList<>();
startTime = System.currentTimeMillis() + 60000; resetStartTime();
new Thread(this).start(); //Run the auto updates on the game state new Thread(this).start(); //Run the auto updates on the game state
new Thread(this, "GameState").start(); //Run the auto updates on the game state new Thread(this, "GameState").start(); //Run the auto updates on the game state
@@ -149,6 +149,10 @@ public class GameState implements Runnable {
return startTime; return startTime;
} }
public static void resetStartTime(){
startTime = System.currentTimeMillis() + MainServerThread.TIME_TILL_START;
}
public static Double getWindDirection() { public static Double getWindDirection() {
return windDirection; return windDirection;
} }
@@ -27,9 +27,9 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
private static final int PORT = 4942; private static final int PORT = 4942;
private static final Integer CLIENT_UPDATES_PER_SECOND = 10; private static final Integer CLIENT_UPDATES_PER_SECOND = 10;
private static final int LOG_LEVEL = 1; private static final int LOG_LEVEL = 1;
private static final int PRESTART_TIME = 60 * -1000; private static final int WARNING_TIME = 10 * -1000;
private static final int WARNING_TIME = 30 * -1000; private static final int PREPATORY_TIME = 5 * -1000;
private static final int PREPATORY_TIME = 10 * -1000; public static final int TIME_TILL_START = 10 * 1000;
private boolean terminated; private boolean terminated;
@@ -12,6 +12,7 @@ import javafx.fxml.FXMLLoader;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.input.KeyEvent; import javafx.scene.input.KeyEvent;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import seng302.gameServer.GameState;
import seng302.gameServer.MainServerThread; import seng302.gameServer.MainServerThread;
import seng302.gameServer.server.messages.BoatAction; import seng302.gameServer.server.messages.BoatAction;
import seng302.model.ClientYacht; import seng302.model.ClientYacht;
@@ -76,8 +77,16 @@ public class GameClient {
LobbyController lobbyController = loadLobby(); LobbyController lobbyController = loadLobby();
lobbyController.setPlayerListSource(clientLobbyList); lobbyController.setPlayerListSource(clientLobbyList);
lobbyController.disableReadyButton(); lobbyController.disableReadyButton();
lobbyController.setTitle(regattaData.getRegattaName());
lobbyController.setCourseName(regattaData.getCourseName()); if (regattaData != null){
lobbyController.setTitle(regattaData.getRegattaName());
lobbyController.setCourseName(regattaData.getCourseName());
}
else{
lobbyController.setTitle(ipAddress);
lobbyController.setCourseName("");
}
lobbyController.addCloseListener((exitCause) -> this.loadStartScreen()); lobbyController.addCloseListener((exitCause) -> this.loadStartScreen());
this.lobbyController = lobbyController; this.lobbyController = lobbyController;
} }
@@ -98,10 +107,20 @@ public class GameClient {
socketThread.addStreamObserver(this::parsePackets); socketThread.addStreamObserver(this::parsePackets);
LobbyController lobbyController = loadLobby(); LobbyController lobbyController = loadLobby();
lobbyController.setPlayerListSource(clientLobbyList); lobbyController.setPlayerListSource(clientLobbyList);
lobbyController.setTitle("Hosting: " + regattaData.getRegattaName());
lobbyController.setCourseName(regattaData.getCourseName()); if (regattaData != null){
lobbyController.setTitle("Hosting: " + regattaData.getRegattaName());
lobbyController.setCourseName(regattaData.getCourseName());
}
else{
lobbyController.setTitle("Hosting: " + ipAddress);
lobbyController.setCourseName("");
}
lobbyController.addCloseListener(exitCause -> { lobbyController.addCloseListener(exitCause -> {
if (exitCause == CloseStatus.READY) { if (exitCause == CloseStatus.READY) {
GameState.resetStartTime();
lobbyController.disableReadyButton();
server.startGame(); server.startGame();
} else if (exitCause == CloseStatus.LEAVE) { } else if (exitCause == CloseStatus.LEAVE) {
loadStartScreen(); loadStartScreen();
@@ -96,7 +96,7 @@ public class LobbyController {
); );
initialiseImageView(); initialiseImageView();
timeUntilStart.setText(""); timeUntilStart.setText("Waiting For Host...");
} }
/** /**
@@ -170,7 +170,7 @@ public class LobbyController {
public void updateRaceState(RaceState raceState){ public void updateRaceState(RaceState raceState){
this.raceState = raceState; this.raceState = raceState;
timeUntilStart.setText(raceState.getRaceTimeStr()); timeUntilStart.setText("Starting in: " + raceState.getRaceTimeStr());
} }
public void disableReadyButton () { public void disableReadyButton () {