|
|
|
|
@ -138,9 +138,8 @@ public class RaceViewController extends Controller {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Sets up the listener and actions that occur when a key is pressed.
|
|
|
|
|
*/
|
|
|
|
|
private AnimationTimer arrowToNextMark;
|
|
|
|
|
|
|
|
|
|
private void initKeypressHandler() {
|
|
|
|
|
racePane.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
|
|
|
|
|
String codeString = event.getCode().toString();
|
|
|
|
|
@ -206,7 +205,19 @@ public class RaceViewController extends Controller {
|
|
|
|
|
* Initialises the various UI components to listen to the {@link #visualiserRace}.
|
|
|
|
|
*/
|
|
|
|
|
private void initialiseRaceVisuals() {
|
|
|
|
|
this.nextMarkArrow = new Annotation3D(new Box(1,3,0));
|
|
|
|
|
|
|
|
|
|
// Import arrow mesh
|
|
|
|
|
URL asset = this.getClass().getClassLoader().getResource("assets/arrow V1.0.4.stl");
|
|
|
|
|
StlMeshImporter importer = new StlMeshImporter();
|
|
|
|
|
importer.read(asset);
|
|
|
|
|
|
|
|
|
|
MeshView arrow = new MeshView(importer.getImport());
|
|
|
|
|
PhongMaterial arrowMat = new PhongMaterial(Color.RED);
|
|
|
|
|
arrow.setMaterial(arrowMat);
|
|
|
|
|
|
|
|
|
|
this.nextMarkArrow = new Annotation3D(arrow);
|
|
|
|
|
this.nextMarkArrow.setScale(0.1);
|
|
|
|
|
|
|
|
|
|
// initialise displays
|
|
|
|
|
initialiseFps();
|
|
|
|
|
initialiseInfoTable();
|
|
|
|
|
@ -404,7 +415,27 @@ public class RaceViewController extends Controller {
|
|
|
|
|
|
|
|
|
|
private void addThirdPersonAnnotations(Subject3D subject3D) {
|
|
|
|
|
viewSubjects.add(nextMarkArrow);
|
|
|
|
|
final VisualiserBoat boat;
|
|
|
|
|
try {
|
|
|
|
|
boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID());
|
|
|
|
|
} catch (BoatNotFoundException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
arrowToNextMark = new AnimationTimer() {
|
|
|
|
|
@Override
|
|
|
|
|
public void handle(long now) {
|
|
|
|
|
CompoundMark target = boat.getCurrentLeg().getEndCompoundMark();
|
|
|
|
|
Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate());
|
|
|
|
|
|
|
|
|
|
nextMarkArrow.setX(view3D.getPivot().getX());
|
|
|
|
|
nextMarkArrow.setY(view3D.getPivot().getY());
|
|
|
|
|
nextMarkArrow.setZ(view3D.getPivot().getZ() + 15);
|
|
|
|
|
nextMarkArrow.setHeading(headingToMark.degrees());
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
arrowToNextMark.start();
|
|
|
|
|
/*
|
|
|
|
|
try {
|
|
|
|
|
VisualiserBoat boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID());
|
|
|
|
|
this.pointToMark = new AnimationTimer() {
|
|
|
|
|
@ -422,12 +453,20 @@ public class RaceViewController extends Controller {
|
|
|
|
|
pointToMark.start();
|
|
|
|
|
} catch (BoatNotFoundException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void removeThirdPersonAnnotations(Subject3D subject3D) {
|
|
|
|
|
viewSubjects.remove(nextMarkArrow);
|
|
|
|
|
pointToMark.stop();
|
|
|
|
|
arrowToNextMark.stop();
|
|
|
|
|
/*
|
|
|
|
|
try {
|
|
|
|
|
VisualiserBoat boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID());
|
|
|
|
|
boat.positionProperty().removeListener(pointToMark);
|
|
|
|
|
} catch (BoatNotFoundException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}*/
|
|
|
|
|
//pointToMark.stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|