diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index 78f5e736..e37f1ff2 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -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(); } /** diff --git a/racevisionGame/src/main/resources/assets/arrow V1.0.4.stl b/racevisionGame/src/main/resources/assets/arrow V1.0.4.stl new file mode 100644 index 00000000..3b7d1a6f Binary files /dev/null and b/racevisionGame/src/main/resources/assets/arrow V1.0.4.stl differ