Implement race clock

-Added label to fxml racepane.fxml
-Added calcTime method to calculate time elapsed
-Added updateTime method in Race to update label text
-Added setTimer in RaceController to update label text

#story [16] #pair [fwy13, zwu18]
This commit is contained in:
David Wu
2017-03-20 15:33:37 +13:00
parent 3dd343eb94
commit ca966e6c7b
6 changed files with 52 additions and 34 deletions
@@ -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
@@ -125,5 +130,12 @@ public class RaceController extends Controller{
}
public void setTimer(String time){
timer.setText(time);
}
}
+25 -9
View File
@@ -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<Leg> legs;
protected RaceController controller;
protected int boatsFinished = 0;
protected long totalTimeElapsed;
private int SLEEP_TIME = 1000; //time in milliseconds to pause in a paced loop
@@ -69,6 +72,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.
@@ -76,23 +99,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) {
@@ -102,6 +117,7 @@ public abstract class Race implements Runnable {
}
controller.updateMap(startingBoats);
updateTime(calcTimer());
try {
timeLoopEnded = System.currentTimeMillis();
Thread.sleep(SLEEP_TIME - (timeLoopEnded - timeLoopStarted));