From 612b4b455ef2172761fde8036c9a3d638e1c88f9 Mon Sep 17 00:00:00 2001 From: fjc40 Date: Sun, 24 Sep 2017 19:59:56 +1300 Subject: [PATCH 1/6] Added start button for host on the ingameLobby screen. #story[1352] --- .../src/main/java/mock/app/Event.java | 15 ++++++++--- .../src/main/java/mock/model/MockRace.java | 13 +++++++++ .../Controllers/InGameLobbyController.java | 27 ++++++++++++++++++- .../visualiser/scenes/gameLobby.fxml | 16 +++-------- 4 files changed, 53 insertions(+), 18 deletions(-) diff --git a/racevisionGame/src/main/java/mock/app/Event.java b/racevisionGame/src/main/java/mock/app/Event.java index 1e1b8966..6b6ff4b4 100644 --- a/racevisionGame/src/main/java/mock/app/Event.java +++ b/racevisionGame/src/main/java/mock/app/Event.java @@ -63,6 +63,8 @@ public class Event { */ private SourceIdAllocator sourceIdAllocator; + private RaceLogic raceLogic; + private Thread raceThread; private Thread connectionThread; @@ -171,20 +173,20 @@ public class Event { } - RaceLogic newRace = new RaceLogic( + this.raceLogic = new RaceLogic( mockRace, this.latestMessages, this.compositeCommand); - this.raceThread = new Thread(newRace, "Event.Start()->RaceLogic thread"); + this.raceThread = new Thread(raceLogic, "Event.Start()->RaceLogic thread"); raceThread.start(); //Create connection acceptor. - this.sourceIdAllocator = new SourceIdAllocator(newRace.getRace()); + this.sourceIdAllocator = new SourceIdAllocator(raceLogic.getRace()); try { - this.connectionAcceptor = new ConnectionAcceptor(latestMessages, compositeCommand, sourceIdAllocator, newRace); + this.connectionAcceptor = new ConnectionAcceptor(latestMessages, compositeCommand, sourceIdAllocator, raceLogic); } catch (IOException e) { throw new EventConstructionException("Could not create ConnectionAcceptor.", e); @@ -241,4 +243,9 @@ public class Event { return new HostGame(ip, 3779,(byte) 1,(byte) 1, RaceStatusEnum.PRESTART, (byte) 1, (byte) 1); } + + public RaceLogic getRaceLogic() { + return raceLogic; + } + } diff --git a/racevisionGame/src/main/java/mock/model/MockRace.java b/racevisionGame/src/main/java/mock/model/MockRace.java index 9ede32d1..2ae5dc7c 100644 --- a/racevisionGame/src/main/java/mock/model/MockRace.java +++ b/racevisionGame/src/main/java/mock/model/MockRace.java @@ -195,6 +195,19 @@ public class MockRace extends RaceState { this.racePreparatoryTime = racePreparatoryTime; } + public long getRacePreparatoryTime() { + return racePreparatoryTime; + } + + + /** + * Starts the race in #timeToStartMilli milliseconds. + * @param timeToStartMilli Millseconds before starting the race. + */ + public void startRace(long timeToStartMilli) { + //TODO + } + /** * Sets the status of all boats in the race to RACING. */ diff --git a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java index 38544ba6..63112e33 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java @@ -10,6 +10,7 @@ import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.scene.Node; import javafx.scene.control.Alert; +import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.Label; import javafx.scene.image.ImageView; @@ -78,6 +79,12 @@ public class InGameLobbyController extends Controller { @FXML private Label countdownTenText; + @FXML + private Button startButton; + + @FXML + private Button quitButton; + private Event game; private View3D playerBoat; @@ -291,6 +298,8 @@ public class InGameLobbyController extends Controller { this.visualiserRaceEvent.getVisualiserRaceState().getBoats().addListener(this.lobbyUpdateListener); + enableStartIfHost(); + startRace(); } catch (IOException e) { //TODO should probably let this propagate, so that we only enter this scene if everything works @@ -298,6 +307,22 @@ public class InGameLobbyController extends Controller { } } + + /** + * Enables the start button if the client is the host of the game. + */ + private void enableStartIfHost() { + if (isHost) { + startButton.setVisible(true); + startButton.setDisable(false); + } else { + startButton.setVisible(false); + startButton.setDisable(true); + } + } + + + /** * Menu button pressed. Prompt alert then return to menu * @throws IOException socket erro @@ -325,7 +350,7 @@ public class InGameLobbyController extends Controller { * Start button pressed. Currently only prints out start */ public void startBtnPressed(){ - //System.out.println("Should start the race. This button is only visible for the host"); + App.game.getRaceLogic().getRace().startRace(App.game.getRaceLogic().getRace().getRacePreparatoryTime()); } public void joinSpecPressed(){ diff --git a/racevisionGame/src/main/resources/visualiser/scenes/gameLobby.fxml b/racevisionGame/src/main/resources/visualiser/scenes/gameLobby.fxml index 18658445..cef2924c 100644 --- a/racevisionGame/src/main/resources/visualiser/scenes/gameLobby.fxml +++ b/racevisionGame/src/main/resources/visualiser/scenes/gameLobby.fxml @@ -1,30 +1,19 @@ - - - - - - - - - - - - + - - @@ -84,19 +79,5 @@ - - - - - -