|
|
|
|
@ -20,9 +20,11 @@ import seng302.VisualiserInput;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.net.Socket;
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
import java.text.DateFormat;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.time.Duration;
|
|
|
|
|
import java.time.Period;
|
|
|
|
|
import java.time.ZonedDateTime;
|
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -40,14 +42,14 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
@FXML private TableColumn<Boat, String> boatCodeColumn;
|
|
|
|
|
@FXML private Label timeZoneTime;
|
|
|
|
|
@FXML private Label timer;
|
|
|
|
|
@FXML private int PRERACE_TIME = 10;
|
|
|
|
|
|
|
|
|
|
private ZonedDateTime startingTime;
|
|
|
|
|
|
|
|
|
|
//@FXML Button fifteenMinButton;
|
|
|
|
|
|
|
|
|
|
private RaceClock raceClock;
|
|
|
|
|
|
|
|
|
|
private StreamedCourse raceData;
|
|
|
|
|
private long timeLeft = 1;
|
|
|
|
|
|
|
|
|
|
private VisualiserInput visualiserInput;
|
|
|
|
|
|
|
|
|
|
@ -56,13 +58,7 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
*/
|
|
|
|
|
public void startRaceNoScaling() {
|
|
|
|
|
//startRace(1);
|
|
|
|
|
while(visualiserInput.getRaceStatus() == null);
|
|
|
|
|
countdownTimer(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void startRace(int raceScale){
|
|
|
|
|
//fifteenMinButton.setDisable(true);
|
|
|
|
|
//countdownTimer(raceScale);
|
|
|
|
|
countdownTimer();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@ -99,14 +95,11 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
/**
|
|
|
|
|
* Countdown timer until race starts. Use PRERACE_TIME to set countdown duration.
|
|
|
|
|
*/
|
|
|
|
|
protected void countdownTimer(int scaleFactor) {
|
|
|
|
|
protected void countdownTimer() {
|
|
|
|
|
new AnimationTimer() {
|
|
|
|
|
long currentTime = System.currentTimeMillis();
|
|
|
|
|
long startTime = currentTime + (PRERACE_TIME/scaleFactor);
|
|
|
|
|
DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss");
|
|
|
|
|
@Override
|
|
|
|
|
public void handle(long arg0) {
|
|
|
|
|
timeLeft = startTime - currentTime;
|
|
|
|
|
ZonedDateTime currentTime = raceClock.getTime();
|
|
|
|
|
if (visualiserInput.getRaceStatus().getRaceStatus()==2) {
|
|
|
|
|
updateTime("Race is starting...");
|
|
|
|
|
stop();
|
|
|
|
|
@ -115,10 +108,9 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
start.setVisible(false);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
updateTime(timerFormat.format(currentTime));
|
|
|
|
|
|
|
|
|
|
long seconds = startingTime.toLocalDateTime().until(currentTime.toLocalDateTime(), ChronoUnit.SECONDS);
|
|
|
|
|
updateTime(String.format("Race starts in: %d:%02d:%02d", seconds/3600, (seconds%3600)/60, (seconds%60)));
|
|
|
|
|
}
|
|
|
|
|
currentTime = System.currentTimeMillis();
|
|
|
|
|
}
|
|
|
|
|
}.start();
|
|
|
|
|
}
|
|
|
|
|
@ -130,11 +122,7 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
new AnimationTimer() {
|
|
|
|
|
@Override
|
|
|
|
|
public void handle(long arg0) {
|
|
|
|
|
if (timeLeft > 0) {
|
|
|
|
|
raceClock.updateTime();
|
|
|
|
|
} else {
|
|
|
|
|
stop();
|
|
|
|
|
}
|
|
|
|
|
raceClock.updateTime();
|
|
|
|
|
}
|
|
|
|
|
}.start();
|
|
|
|
|
}
|
|
|
|
|
@ -143,7 +131,8 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
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)));
|
|
|
|
|
startingTime = raceClock.getLocalTime(utcTime);
|
|
|
|
|
raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(startingTime));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -168,6 +157,7 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
while(visualiserInput.getRaceStatus() == null);
|
|
|
|
|
setStartingTime();
|
|
|
|
|
setCurrentTime();
|
|
|
|
|
startRaceNoScaling();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -182,7 +172,6 @@ public class StartController extends Controller implements Observer {
|
|
|
|
|
try {
|
|
|
|
|
visualiserInput = new VisualiserInput(socket, raceData);
|
|
|
|
|
new Thread(visualiserInput).start();
|
|
|
|
|
startRaceNoScaling();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|