From d70f5567418d1abf9c8da96b5bf5d4654bcc5098 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Thu, 14 Sep 2017 16:36:17 +1200 Subject: [PATCH] Changed arrow to next mark appearance #story[1195] --- .../Controllers/RaceController.java | 43 ++++++++++++++++-- .../main/resources/assets/arrow V1.0.4.stl | Bin 0 -> 1684 bytes 2 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 racevisionGame/src/main/resources/assets/arrow V1.0.4.stl diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java index 05a922e3..cb4d1275 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java @@ -111,11 +111,25 @@ public class RaceController extends Controller { @FXML private TableColumn boatSpeedColumn; @FXML private LineChart sparklineChart; + private AnimationTimer arrowToNextMark; + /** * Ctor. */ public RaceController() { - this.nextMarkArrow = new Annotation3D(new Box(1,3,0)); + + // Import arrow mesh + URL asset = HostController.class.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); + } @Override @@ -370,7 +384,27 @@ public class RaceController 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 = (o, prev, curr) -> { @@ -386,18 +420,19 @@ public class RaceController extends Controller { boat.positionProperty().addListener(pointToMark); } catch (BoatNotFoundException e) { e.printStackTrace(); - } + }*/ } private void removeThirdPersonAnnotations(Subject3D subject3D) { viewSubjects.remove(nextMarkArrow); - + arrowToNextMark.stop(); +/* try { VisualiserBoat boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID()); boat.positionProperty().removeListener(pointToMark); } catch (BoatNotFoundException e) { e.printStackTrace(); - } + }*/ } /** 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 0000000000000000000000000000000000000000..3b7d1a6ff7cd4223192160b58340f350654b13b0 GIT binary patch literal 1684 zcmb7EyKWOv5Iuf?A|x7qfGsE>5|4z9O<{2*B$6-44_Gk`k3ia!V?atCr; zSy{TI2o<8F;R|>qfI{rc%-+3w&$?r!^{#g2oHKJ~t{=YI*&e(5{IqdPb7UsojAS+=y|KxqzqxZA)R^YQq2s^89Sa-i=GAU`YL>j;jV zS$oi|(9HC9wEVu*F!GG8-BXR86$Bij*Ak5rr_pn{`fF`s>XFyuCQ_|RvnnRdP0i-! z=kW!MC&GKbuhFcZ)~D$XUQfv78RaxqMe z(ZI|mu{x}39AUjWQ%f`yA$@dt26ab+9w43+h?(8%ENo&`Av0+$dZp$fzU{L=+^tkj zyXz56L2yJIskV=qfYE4q)uR^FtEzbZF4rSC!gH=O?PghZ2H79??lw^w{doj-v!&uh z$rR<(awIs)Ou+B0(Exyp`+%a3a}1<-Wb%mrV@*uy4!+d~dIr zUxh}$Bd1ih#nsN+&U%3G8`b#o_;Qyc%*#yLt6r(>?oo&RVRu>2*)=ha~~S_Ou*bGey?)gSI$~QI|b<_=LpYZk*Pw+EW&>jZ#YjD RkW=e7Q5+64=h-k5@DDPY-2VUo literal 0 HcmV?d00001