Streamlined clock handling.

- Set starting time from network
- Update RaceClock instance to current time from network

#story[782]
main
cbt24 9 years ago
parent 09483fff2c
commit c1fa760dde

@ -22,10 +22,8 @@ import java.net.Socket;
import java.net.URL; import java.net.URL;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.List; import java.time.format.DateTimeFormatter;
import java.util.Observable; import java.util.*;
import java.util.Observer;
import java.util.ResourceBundle;
/** /**
* Created by esa46 on 6/04/17. * Created by esa46 on 6/04/17.
@ -35,6 +33,7 @@ public class StartController extends Controller implements Observer {
@FXML private GridPane start; @FXML private GridPane start;
@FXML private AnchorPane startWrapper; @FXML private AnchorPane startWrapper;
@FXML private Label raceTitleLabel; @FXML private Label raceTitleLabel;
@FXML private Label raceStartLabel;
@FXML private TableView<Boat> boatNameTable; @FXML private TableView<Boat> boatNameTable;
@FXML private TableColumn<Boat, String> boatNameColumn; @FXML private TableColumn<Boat, String> boatNameColumn;
@ -103,7 +102,6 @@ public class StartController extends Controller implements Observer {
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
long startTime = currentTime + (PRERACE_TIME/scaleFactor); long startTime = currentTime + (PRERACE_TIME/scaleFactor);
DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss"); DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss");
@Override @Override
public void handle(long arg0) { public void handle(long arg0) {
timeLeft = startTime - currentTime; timeLeft = startTime - currentTime;
@ -122,7 +120,7 @@ public class StartController extends Controller implements Observer {
}.start(); }.start();
} }
protected void setRaceClock() { private void setRaceClock() {
raceClock = new RaceClock(raceData.getZonedDateTime()); raceClock = new RaceClock(raceData.getZonedDateTime());
timeZoneTime.textProperty().bind(raceClock.timeStringProperty()); timeZoneTime.textProperty().bind(raceClock.timeStringProperty());
@ -138,6 +136,20 @@ public class StartController extends Controller implements Observer {
}.start(); }.start();
} }
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)));
});
}
private void setCurrentTime() {
Platform.runLater(()->
raceClock.setTime(raceClock.getLocalTime(visualiserInput.getRaceStatus().getCurrentTime()))
);
}
@Override @Override
public void update(Observable o, Object arg) { public void update(Observable o, Object arg) {
if(o instanceof StreamedCourse) { if(o instanceof StreamedCourse) {
@ -148,7 +160,12 @@ public class StartController extends Controller implements Observer {
Platform.runLater(() -> raceTitleLabel.setText(((StreamedCourse)o).getRegattaName())); Platform.runLater(() -> raceTitleLabel.setText(((StreamedCourse)o).getRegattaName()));
} }
if (((StreamedCourse) o).hasReadCourse()) { if (((StreamedCourse) o).hasReadCourse()) {
Platform.runLater(() -> setRaceClock()); Platform.runLater(() -> {
setRaceClock();
while(visualiserInput.getRaceStatus() == null);
setStartingTime();
setCurrentTime();
});
} }
} }
} }

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?> <?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableColumn?>
@ -10,7 +14,7 @@
<?import javafx.scene.layout.RowConstraints?> <?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>
<AnchorPane fx:id="startWrapper" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" visible="false" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng302.Controllers.StartController"> <AnchorPane fx:id="startWrapper" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" visible="false" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="seng302.Controllers.StartController">
<children> <children>
<GridPane fx:id="start" prefHeight="600.0" prefWidth="780.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <GridPane fx:id="start" prefHeight="600.0" prefWidth="780.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columnConstraints> <columnConstraints>
@ -41,7 +45,7 @@
</TableView> </TableView>
<Label fx:id="timeZoneTime" contentDisplay="CENTER" text="Local time..." GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER" /> <Label fx:id="timeZoneTime" contentDisplay="CENTER" text="Local time..." GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="3" GridPane.valignment="CENTER" />
<Label fx:id="timer" text=" " GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="5" /> <Label fx:id="timer" text=" " GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="5" />
<Label fx:id="raceStartLabel" text="Starting time..." visible="false" GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="1" /> <Label fx:id="raceStartLabel" text="Starting time..." GridPane.columnIndex="2" GridPane.halignment="CENTER" GridPane.rowIndex="1" />
<Label fx:id="raceTitleLabel" text="Welcome to RaceVision" GridPane.columnIndex="1" GridPane.columnSpan="3" GridPane.halignment="CENTER"> <Label fx:id="raceTitleLabel" text="Welcome to RaceVision" GridPane.columnIndex="1" GridPane.columnSpan="3" GridPane.halignment="CENTER">
<font> <font>
<Font size="36.0" /> <Font size="36.0" />

Loading…
Cancel
Save