@ -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 . set Time( race Clock. getLocal Time( visualiserInput . getRaceStatus ( ) . getCurrentTime ( ) ) )
raceClock . set U TCTime( 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 ( ) ;
} ) ;