I had accidentally broken the raceXML construction - fixed it.
Fixed a few issues where boat didn't have nextMark/previousMark times under certain circumstances. LatestMessages wasn't actually notifying properly - fixed. The various XML readers now treat a string constructor as containing file contents, not file name - this was how it was mostly already used. Fixed some issues in RaceXMLReader, including where element.getChildNodes() was used instead of element.getElementsByName(...). Boat: changes speed to a doubleProperty. Changed leg to a Property<Leg>. Race.lastFps is now an IntegerProperty. Added breaks to the case statements in VisualiserInput. Whoops. ResizableRaceCanvas now handles drawing the race boundary. Tidied up code a bit. Removed ResizableRaceMap. Started refactoring Sparkline. Currently doesn't work.
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package mock.model;
|
||||
|
||||
import javafx.animation.AnimationTimer;
|
||||
import mock.app.MockOutput;
|
||||
import network.Messages.BoatLocation;
|
||||
import network.Messages.BoatStatus;
|
||||
import network.Messages.Enums.BoatStatusEnum;
|
||||
@@ -14,6 +13,9 @@ import network.Messages.Enums.RaceStatusEnum;
|
||||
import shared.dataInput.RegattaDataSource;
|
||||
import shared.model.*;
|
||||
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.time.temporal.TemporalUnit;
|
||||
import java.util.*;
|
||||
|
||||
import static java.lang.Math.cos;
|
||||
@@ -239,8 +241,8 @@ public class MockRace extends Race {
|
||||
*/
|
||||
private void updateRaceStatusEnum() {
|
||||
|
||||
//The amount of milliseconds until the race starts.
|
||||
long timeToStart = this.raceClock.getDurationMilli();
|
||||
//The millisecond duration of the race. Negative means it hasn't started, so we flip sign.
|
||||
long timeToStart = - this.raceClock.getDurationMilli();
|
||||
|
||||
|
||||
if (timeToStart > Constants.RacePreStartTime) {
|
||||
@@ -279,7 +281,7 @@ public class MockRace extends Race {
|
||||
boat.getSourceID(),
|
||||
boat.getStatus(),
|
||||
boat.getCurrentLeg().getLegNumber(),
|
||||
boat.getEstimatedTime() );
|
||||
boat.getEstimatedTimeAtNextMark().toInstant().toEpochMilli() );
|
||||
|
||||
boatStatuses.add(boatStatus);
|
||||
}
|
||||
@@ -318,6 +320,18 @@ public class MockRace extends Race {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the estimated time at next mark for each boat to a specified time. This is used during the countdown timer to provide this value to boat before the race starts.
|
||||
* @param time The time to provide to each boat.
|
||||
*/
|
||||
private void setBoatsTimeNextMark(ZonedDateTime time) {
|
||||
|
||||
for (MockBoat boat : this.boats) {
|
||||
boat.setEstimatedTimeAtNextMark(time);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Countdown timer until race starts.
|
||||
*/
|
||||
@@ -335,6 +349,9 @@ public class MockRace extends Race {
|
||||
//Update the race status based on the current time.
|
||||
updateRaceStatusEnum();
|
||||
|
||||
//Provide boat's with an estimated time at next mark until the race starts.
|
||||
setBoatsTimeNextMark(raceClock.getCurrentTime());
|
||||
|
||||
//Parse the boat locations.
|
||||
parseBoatLocations();
|
||||
|
||||
@@ -910,8 +927,13 @@ public class MockRace extends Race {
|
||||
double velocityToMark = boat.getCurrentSpeed() * cos(boat.getBearing().radians() - boat.calculateBearingToNextMarker().radians()) / Constants.KnotsToMMPerSecond;
|
||||
|
||||
if (velocityToMark > 0) {
|
||||
|
||||
//Calculate milliseconds until boat reaches mark.
|
||||
long timeFromNow = (long) (1000 * boat.calculateDistanceToNextMarker() / velocityToMark);
|
||||
boat.setEstimatedTime(this.raceClock.getCurrentTimeMilli() + timeFromNow);
|
||||
|
||||
//Calculate time at which it will reach mark.
|
||||
ZonedDateTime timeAtMark = this.raceClock.getCurrentTime().plus(timeFromNow, ChronoUnit.MILLIS);
|
||||
boat.setEstimatedTimeAtNextMark(timeAtMark);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user