Merge remote-tracking branch 'origin/race-timer-fixes' into layeredCanvas
# Conflicts: # visualiser/src/main/java/seng302/Controllers/StartController.java
This commit is contained in:
@@ -8,9 +8,5 @@ public class Constants {
|
|||||||
|
|
||||||
public static final int NMToMetersConversion = 1852; // 1 nautical mile = 1852 meters
|
public static final int NMToMetersConversion = 1852; // 1 nautical mile = 1852 meters
|
||||||
|
|
||||||
//Knots x this = meters per second.
|
|
||||||
public static final double KnotsToMetersPerSecondConversionFactor = 0.514444;
|
|
||||||
|
|
||||||
public static final double wakeScale = 10;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,5 +28,4 @@ public class App extends Application {
|
|||||||
stage.setScene(scene);
|
stage.setScene(scene);
|
||||||
stage.show();
|
stage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ import seng302.VisualiserInput;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.time.Duration;
|
import java.text.DateFormat;
|
||||||
import java.time.Period;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.ZonedDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,15 +40,15 @@ public class StartController extends Controller implements Observer {
|
|||||||
@FXML private TableColumn<Boat, String> boatCodeColumn;
|
@FXML private TableColumn<Boat, String> boatCodeColumn;
|
||||||
@FXML private Label timeZoneTime;
|
@FXML private Label timeZoneTime;
|
||||||
@FXML private Label timer;
|
@FXML private Label timer;
|
||||||
|
|
||||||
private ZonedDateTime startingTime;
|
|
||||||
@FXML private Label raceStatusLabel;
|
@FXML private Label raceStatusLabel;
|
||||||
|
@FXML private int PRERACE_TIME = 10;
|
||||||
|
|
||||||
//@FXML Button fifteenMinButton;
|
//@FXML Button fifteenMinButton;
|
||||||
|
|
||||||
private RaceClock raceClock;
|
private RaceClock raceClock;
|
||||||
|
|
||||||
private StreamedCourse raceData;
|
private StreamedCourse raceData;
|
||||||
|
private long timeLeft = 1;
|
||||||
private int raceStat;
|
private int raceStat;
|
||||||
|
|
||||||
private VisualiserInput visualiserInput;
|
private VisualiserInput visualiserInput;
|
||||||
@@ -60,9 +58,15 @@ public class StartController extends Controller implements Observer {
|
|||||||
*/
|
*/
|
||||||
public void startRaceNoScaling() {
|
public void startRaceNoScaling() {
|
||||||
//startRace(1);
|
//startRace(1);
|
||||||
|
while(visualiserInput.getRaceStatus() == null);
|
||||||
countdownTimer();
|
countdownTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startRace(int raceScale){
|
||||||
|
//fifteenMinButton.setDisable(true);
|
||||||
|
//countdownTimer(raceScale);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL location, ResourceBundle resources){
|
public void initialize(URL location, ResourceBundle resources){
|
||||||
raceData = new StreamedCourse();
|
raceData = new StreamedCourse();
|
||||||
@@ -95,17 +99,19 @@ public class StartController extends Controller implements Observer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Countdown timer until race starts. Use PRERACE_TIME to set countdown duration.
|
* Countdown timer until race starts.
|
||||||
*/
|
*/
|
||||||
protected void countdownTimer() {
|
protected void countdownTimer() {
|
||||||
new AnimationTimer() {
|
new AnimationTimer() {
|
||||||
|
long currentTime = System.currentTimeMillis();
|
||||||
|
long startTime = currentTime + PRERACE_TIME;
|
||||||
|
DateFormat timerFormat = new SimpleDateFormat("'Race Clock:' -HH:mm:ss");
|
||||||
@Override
|
@Override
|
||||||
public void handle(long arg0) {
|
public void handle(long arg0) {
|
||||||
ZonedDateTime currentTime = raceClock.getTime();
|
timeLeft = startTime - currentTime;
|
||||||
//race about to start
|
|
||||||
raceStat = visualiserInput.getRaceStatus().getRaceStatus();
|
raceStat = visualiserInput.getRaceStatus().getRaceStatus();
|
||||||
raceStatusLabel.setText("Race Status: " + visualiserInput.getRaceStatus().getRaceStatus());
|
raceStatusLabel.setText("Race Status: " + visualiserInput.getRaceStatus().getRaceStatus());
|
||||||
if (raceStat == 2 || raceStat == 3) {
|
if (raceStat==2 || raceStat == 3) {
|
||||||
updateTime("Race is starting...");
|
updateTime("Race is starting...");
|
||||||
stop();
|
stop();
|
||||||
parent.beginRace(visualiserInput);
|
parent.beginRace(visualiserInput);
|
||||||
@@ -113,9 +119,9 @@ public class StartController extends Controller implements Observer {
|
|||||||
start.setVisible(false);
|
start.setVisible(false);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
long seconds = startingTime.toLocalDateTime().until(currentTime.toLocalDateTime(), ChronoUnit.SECONDS);
|
updateTime(timerFormat.format(currentTime));
|
||||||
updateTime(String.format("Race starts in: %d:%02d:%02d", seconds / 3600, (seconds % 3600) / 60, (seconds % 60)));
|
|
||||||
}
|
}
|
||||||
|
currentTime = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
}
|
}
|
||||||
@@ -136,8 +142,7 @@ public class StartController extends Controller implements Observer {
|
|||||||
String dateFormat = "'Starting time:' HH:mm dd/MM/YYYY";
|
String dateFormat = "'Starting time:' HH:mm dd/MM/YYYY";
|
||||||
Platform.runLater(()-> {
|
Platform.runLater(()-> {
|
||||||
long utcTime = visualiserInput.getRaceStatus().getExpectedStartTime();
|
long utcTime = visualiserInput.getRaceStatus().getExpectedStartTime();
|
||||||
startingTime = raceClock.getLocalTime(utcTime);
|
raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(raceClock.getLocalTime(utcTime)));
|
||||||
raceStartLabel.setText(DateTimeFormatter.ofPattern(dateFormat).format(startingTime));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,11 +163,10 @@ public class StartController extends Controller implements Observer {
|
|||||||
}
|
}
|
||||||
if (((StreamedCourse) o).hasReadCourse()) {
|
if (((StreamedCourse) o).hasReadCourse()) {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
setRaceClock();
|
|
||||||
while(visualiserInput.getRaceStatus() == null);
|
while(visualiserInput.getRaceStatus() == null);
|
||||||
|
setRaceClock();
|
||||||
setStartingTime();
|
setStartingTime();
|
||||||
setCurrentTime();
|
setCurrentTime();
|
||||||
startRaceNoScaling();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,6 +181,7 @@ public class StartController extends Controller implements Observer {
|
|||||||
try {
|
try {
|
||||||
visualiserInput = new VisualiserInput(socket, raceData);
|
visualiserInput = new VisualiserInput(socket, raceData);
|
||||||
new Thread(visualiserInput).start();
|
new Thread(visualiserInput).start();
|
||||||
|
startRaceNoScaling();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user