Added "arrow" pointing to next mark on third person view

#story[1195]
main
Connor Taylor-Brown 8 years ago
parent e657a0cc99
commit 5f96526fcc

@ -3,6 +3,7 @@ package visualiser.Controllers;
import com.interactivemesh.jfx.importer.stl.StlMeshImporter; import com.interactivemesh.jfx.importer.stl.StlMeshImporter;
import javafx.animation.AnimationTimer; import javafx.animation.AnimationTimer;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener; import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
@ -20,6 +21,7 @@ import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.paint.Material; import javafx.scene.paint.Material;
import javafx.scene.paint.PhongMaterial; import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.shape.MeshView; import javafx.scene.shape.MeshView;
import javafx.scene.shape.Shape3D; import javafx.scene.shape.Shape3D;
import javafx.scene.shape.Sphere; import javafx.scene.shape.Sphere;
@ -79,6 +81,9 @@ public class RaceController extends Controller {
private View3D view3D; private View3D view3D;
private ObservableList<Subject3D> viewSubjects; private ObservableList<Subject3D> viewSubjects;
private Subject3D nextMarkArrow;
private ChangeListener<? super GPSCoordinate> pointToMark;
/** /**
* The arrow controller. * The arrow controller.
*/ */
@ -110,6 +115,7 @@ public class RaceController extends Controller {
* Ctor. * Ctor.
*/ */
public RaceController() { public RaceController() {
this.nextMarkArrow = new Annotation3D(new Box(1,3,0));
} }
@Override @Override
@ -307,7 +313,7 @@ public class RaceController extends Controller {
if(curr != null && visualiserRace.getVisualiserRaceState().isVisualiserBoat(curr.getSourceID())) { if(curr != null && visualiserRace.getVisualiserRaceState().isVisualiserBoat(curr.getSourceID())) {
addThirdPersonAnnotations(curr); addThirdPersonAnnotations(curr);
} else { } else {
removeThirdPersonAnnotations(); removeThirdPersonAnnotations(prev);
} }
}); });
@ -357,19 +363,35 @@ public class RaceController extends Controller {
} }
private void addThirdPersonAnnotations(Subject3D subject3D) { private void addThirdPersonAnnotations(Subject3D subject3D) {
viewSubjects.add(nextMarkArrow);
try { try {
VisualiserBoat boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID()); VisualiserBoat boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID());
boat.bearingProperty().addListener((o, prev, curr) -> { this.pointToMark = (o, prev, curr) -> {
CompoundMark target = boat.getCurrentLeg().getEndCompoundMark(); CompoundMark target = boat.getCurrentLeg().getEndCompoundMark();
Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate()); Bearing headingToMark = GPSCoordinate.calculateBearing(boat.getPosition(), target.getAverageGPSCoordinate());
System.out.println(headingToMark.degrees() - boat.getBearing().degrees());
}); nextMarkArrow.setY(10);
nextMarkArrow.setX(subject3D.getPosition().getX());
nextMarkArrow.setZ(subject3D.getPosition().getZ());
nextMarkArrow.setHeading(headingToMark.degrees());
};
boat.positionProperty().addListener(pointToMark);
} catch (BoatNotFoundException e) { } catch (BoatNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private void removeThirdPersonAnnotations() { private void removeThirdPersonAnnotations(Subject3D subject3D) {
viewSubjects.remove(nextMarkArrow);
try {
VisualiserBoat boat = visualiserRace.getVisualiserRaceState().getBoat(subject3D.getSourceID());
boat.positionProperty().removeListener(pointToMark);
} catch (BoatNotFoundException e) {
e.printStackTrace();
}
} }
/** /**

@ -0,0 +1,24 @@
package visualiser.layout;
import javafx.scene.shape.Shape3D;
/**
* Created by connortaylorbrown on 13/09/17.
*/
public class Annotation3D extends Subject3D {
/**
* Constructor for view subject wrapper
*
* @param mesh to be rendered
*/
public Annotation3D(Shape3D mesh) {
super(mesh, 0);
}
/**
* Prevent rescaling of this subject
* @param scale ignored
*/
@Override
public void setScale(double scale) {}
}
Loading…
Cancel
Save