diff --git a/src/main/java/seng302/Controllers/RaceController.java b/src/main/java/seng302/Controllers/RaceController.java index c3b74ad1..a5e5c4e2 100644 --- a/src/main/java/seng302/Controllers/RaceController.java +++ b/src/main/java/seng302/Controllers/RaceController.java @@ -2,11 +2,13 @@ package seng302.Controllers; import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.property.StringProperty; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.control.Label; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; @@ -34,6 +36,9 @@ public class RaceController extends Controller{ ResizableRaceCanvas raceMap; + @FXML + Label timer; + @FXML TableView boatInfoTable; @FXML @@ -124,5 +129,12 @@ public class RaceController extends Controller{ } + public void setTimer(String time){ + timer.setText(time); + } + + + + } diff --git a/src/main/java/seng302/Model/Race.java b/src/main/java/seng302/Model/Race.java index 3fd39672..287540c4 100644 --- a/src/main/java/seng302/Model/Race.java +++ b/src/main/java/seng302/Model/Race.java @@ -1,6 +1,8 @@ package seng302.Model; +import javafx.application.Platform; +import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableArray; import javafx.collections.ObservableList; @@ -19,6 +21,7 @@ public abstract class Race implements Runnable { protected ArrayList legs; protected RaceController controller; protected int boatsFinished = 0; + protected long totalTimeElapsed; private int SLEEP_TIME = 100; //time in milliseconds to pause in a paced loop @@ -70,6 +73,26 @@ public abstract class Race implements Runnable { } + private String calcTimer() { + long minutes; + long currentTimeInSeconds; + long remainingSeconds; + long hours; + + currentTimeInSeconds = totalTimeElapsed / 1000; + minutes = currentTimeInSeconds / 60; + remainingSeconds = currentTimeInSeconds % 60; + hours = minutes/60; + return String.format("%02d:%02d:%02d", hours, minutes, remainingSeconds); + } + + private void updateTime(String time){ + + Platform.runLater(() -> {controller.setTimer(time);}); + } + + + /** * Starts the Race Simulation, playing the race start to finish with the timescale. * This prints the boats participating, the order that the events occur in time order, and the respective information of the events. @@ -77,23 +100,15 @@ public abstract class Race implements Runnable { private void simulateRace() { long timeRaceStarted = System.currentTimeMillis(); - long totalTimeElapsed; long timeLoopStarted; long timeLoopEnded; - long minutes; - long currentTimeInSeconds; - long remainingSeconds; while (boatsFinished < startingBoats.size()) { timeLoopStarted = System.currentTimeMillis(); totalTimeElapsed = System.currentTimeMillis() - timeRaceStarted; - long currentTime = System.currentTimeMillis() - timeRaceStarted; - currentTimeInSeconds = currentTime / 1000; - minutes = currentTimeInSeconds / 60; - remainingSeconds = currentTimeInSeconds % 60; - System.out.println(minutes + ":" + remainingSeconds); + for (BoatInRace boat : startingBoats) { if (boat != null && !boat.isFinished()) { @@ -103,6 +118,7 @@ public abstract class Race implements Runnable { } controller.updateMap(startingBoats); + updateTime(calcTimer()); try { timeLoopEnded = System.currentTimeMillis(); Thread.sleep(SLEEP_TIME - (timeLoopEnded - timeLoopStarted)); diff --git a/src/main/resources/scenes/racepane.fxml b/src/main/resources/scenes/racepane.fxml index fb795e5c..d699ff46 100644 --- a/src/main/resources/scenes/racepane.fxml +++ b/src/main/resources/scenes/racepane.fxml @@ -7,13 +7,15 @@ - + - + + - +