Refactored RaceClock to act as central source of time and duration information throughout visualiser.
- StartController and RaceController use same RaceClock instance - RaceClock updates automatically as Runnable for consistent operation - Duration between starting and current time is now an observable property of RaceClock #story[782]
This commit is contained in:
@@ -2,6 +2,7 @@ package seng302.Controllers;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
import seng302.Model.RaceClock;
|
||||
import seng302.RaceDataSource;
|
||||
import seng302.VisualiserInput;
|
||||
|
||||
@@ -20,8 +21,8 @@ public class MainController extends Controller {
|
||||
@FXML
|
||||
ConnectionController connectionController;
|
||||
|
||||
public void beginRace(VisualiserInput visualiserInput) {
|
||||
raceController.startRace(visualiserInput);
|
||||
public void beginRace(VisualiserInput visualiserInput, RaceClock raceClock) {
|
||||
raceController.startRace(visualiserInput, raceClock);
|
||||
}
|
||||
|
||||
public void enterLobby(Socket socket) {
|
||||
|
||||
@@ -121,7 +121,7 @@ public class RaceController extends Controller {
|
||||
*
|
||||
* @param visualiserInput input from network
|
||||
*/
|
||||
public void startRace(VisualiserInput visualiserInput) {
|
||||
public void startRace(VisualiserInput visualiserInput, RaceClock raceClock) {
|
||||
StreamedRace newRace = new StreamedRace(visualiserInput, this);
|
||||
//newRace.initialiseBoats();
|
||||
|
||||
@@ -146,8 +146,8 @@ public class RaceController extends Controller {
|
||||
race.setVisible(true);
|
||||
|
||||
//Initialize save annotation array, fps listener, and annotation listeners
|
||||
RaceClock raceClock = new RaceClock(visualiserInput.getCourse().getZonedDateTime());
|
||||
timeZone.setText(raceClock.getTimeZone());
|
||||
timer.textProperty().bind(raceClock.durationProperty());
|
||||
initializeFPS();
|
||||
initializeAnnotations();
|
||||
|
||||
@@ -161,7 +161,7 @@ public class RaceController extends Controller {
|
||||
* @param time time that the label will be updated to
|
||||
*/
|
||||
public void setTimer(String time) {
|
||||
timer.setText(time);
|
||||
//timer.setText(time);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,6 +22,8 @@ import java.net.Socket;
|
||||
import java.net.URL;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Duration;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
@@ -41,14 +43,14 @@ public class StartController extends Controller implements Observer {
|
||||
@FXML private Label timeZoneTime;
|
||||
@FXML private Label timer;
|
||||
@FXML private Label raceStatusLabel;
|
||||
@FXML private int PRERACE_TIME = 10;
|
||||
|
||||
private ZonedDateTime startingTime;
|
||||
|
||||
//@FXML Button fifteenMinButton;
|
||||
|
||||
private RaceClock raceClock;
|
||||
|
||||
private StreamedCourse raceData;
|
||||
private long timeLeft = 1;
|
||||
private int raceStat;
|
||||
|
||||
private VisualiserInput visualiserInput;
|
||||
@@ -86,42 +88,21 @@ public class StartController extends Controller implements Observer {
|
||||
boatCodeColumn.setCellValueFactory(new PropertyValueFactory<>("abbrev"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Updates the calculated time to the timer label
|
||||
*
|
||||
* @param time The calculated time from calcTimer() method
|
||||
*/
|
||||
protected void updateTime(String time) {
|
||||
Platform.runLater(() -> {
|
||||
timer.setText(time);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Countdown timer until race starts.
|
||||
*/
|
||||
protected void countdownTimer() {
|
||||
new AnimationTimer() {
|
||||
long currentTime = System.currentTimeMillis();
|
||||
long startTime = currentTime + PRERACE_TIME;
|
||||
DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss");
|
||||
@Override
|
||||
public void handle(long arg0) {
|
||||
timeLeft = startTime - currentTime;
|
||||
raceStat = visualiserInput.getRaceStatus().getRaceStatus();
|
||||
raceStatusLabel.setText("Race Status: " + visualiserInput.getRaceStatus().getRaceStatus());
|
||||
if (raceStat==2 || raceStat == 3) {
|
||||
updateTime("Race is starting...");
|
||||
stop();
|
||||
parent.beginRace(visualiserInput);
|
||||
parent.beginRace(visualiserInput, raceClock);
|
||||
startWrapper.setVisible(false);
|
||||
start.setVisible(false);
|
||||
|
||||
} else {
|
||||
updateTime(timerFormat.format(currentTime));
|
||||
}
|
||||
currentTime = System.currentTimeMillis();
|
||||
}
|
||||
}.start();
|
||||
}
|
||||
@@ -129,26 +110,22 @@ public class StartController extends Controller implements Observer {
|
||||
private void setRaceClock() {
|
||||
raceClock = new RaceClock(raceData.getZonedDateTime());
|
||||
timeZoneTime.textProperty().bind(raceClock.timeStringProperty());
|
||||
|
||||
new AnimationTimer() {
|
||||
@Override
|
||||
public void handle(long arg0) {
|
||||
raceClock.updateTime();
|
||||
}
|
||||
}.start();
|
||||
raceClock.run();
|
||||
}
|
||||
|
||||
private void setStartingTime() {
|
||||
String dateFormat = "'Starting time:' HH:mm dd/MM/YYYY";
|
||||
Platform.runLater(()-> {
|
||||
long utcTime = visualiserInput.getRaceStatus().getExpectedStartTime();
|
||||
raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(raceClock.getLocalTime(utcTime)));
|
||||
raceClock.setStartingTime(raceClock.getLocalTime(utcTime));
|
||||
raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(raceClock.getStartingTime()));
|
||||
timer.textProperty().bind(raceClock.durationProperty());
|
||||
});
|
||||
}
|
||||
|
||||
private void setCurrentTime() {
|
||||
Platform.runLater(()->
|
||||
raceClock.setTime(raceClock.getLocalTime(visualiserInput.getRaceStatus().getCurrentTime()))
|
||||
raceClock.setUTCTime(visualiserInput.getRaceStatus().getCurrentTime())
|
||||
);
|
||||
}
|
||||
|
||||
@@ -163,8 +140,8 @@ public class StartController extends Controller implements Observer {
|
||||
}
|
||||
if (((StreamedCourse) o).hasReadCourse()) {
|
||||
Platform.runLater(() -> {
|
||||
while(visualiserInput.getRaceStatus() == null);
|
||||
setRaceClock();
|
||||
while(visualiserInput.getRaceStatus() == null); // TODO - replace with observer on VisualiserInput
|
||||
setStartingTime();
|
||||
setCurrentTime();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user