@ -14,6 +14,7 @@ import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.layout.GridPane ;
import javafx.scene.layout.GridPane ;
import javafx.scene.layout.StackPane ;
import javafx.scene.layout.StackPane ;
import javafx.scene.shape.Box ;
import javafx.scene.shape.MeshView ;
import javafx.scene.shape.MeshView ;
import javafx.scene.shape.Sphere ;
import javafx.scene.shape.Sphere ;
import javafx.scene.transform.Translate ;
import javafx.scene.transform.Translate ;
@ -26,6 +27,7 @@ import visualiser.app.App;
import visualiser.gameController.ControllerClient ;
import visualiser.gameController.ControllerClient ;
import visualiser.gameController.Keys.ControlKey ;
import visualiser.gameController.Keys.ControlKey ;
import visualiser.gameController.Keys.KeyFactory ;
import visualiser.gameController.Keys.KeyFactory ;
import visualiser.layout.BoatArrow ;
import visualiser.layout.MarkRadius ;
import visualiser.layout.MarkRadius ;
import visualiser.layout.Subject3D ;
import visualiser.layout.Subject3D ;
import visualiser.layout.View3D ;
import visualiser.layout.View3D ;
@ -206,16 +208,17 @@ public class RaceController extends Controller {
view3D . setItems ( viewSubjects ) ;
view3D . setItems ( viewSubjects ) ;
// Position and add each mark to view
// Position and add each mark to view
for ( Mark mark : race . getVisualiserRaceState ( ) . getMarks ( ) ) {
for ( Mark mark : race . getVisualiserRaceState ( ) . getMarks ( ) ) {
Subject3D subject = new Subject3D ( new Sphere ( 2 ) ) ;
subject . setX ( gpsConverter . convertGPS ( mark . getPosition ( ) ) . getX ( ) ) ;
subject . setZ ( gpsConverter . convertGPS ( mark . getPosition ( ) ) . getY ( ) ) ;
MeshView mesh = new MeshView ( importerMark . getImport ( ) ) ;
MeshView mesh = new MeshView ( importerMark . getImport ( ) ) ;
Subject3D markModel = new Subject3D ( mesh ) ;
Subject3D markModel = new Subject3D ( mesh ) ;
Subject3D markRadius = new MarkRadius ( 3 ) ;
Subject3D markRadius = new MarkRadius ( 3 ) ;
double x = gpsConverter . convertGPS ( mark . getPosition ( ) ) . getX ( ) ;
double x = gpsConverter . convertGPS ( mark . getPosition ( ) ) . getX ( ) ;
double z = gpsConverter . convertGPS ( mark . getPosition ( ) ) . getY ( ) ;
double z = gpsConverter . convertGPS ( mark . getPosition ( ) ) . getY ( ) ;
markModel . setX ( x ) ;
markModel . setX ( x ) ;
markModel . setZ ( z ) ;
markModel . setZ ( z ) ;
markModel . setScale ( 0.1 ) ;
markRadius . setX ( x ) ;
markRadius . setX ( x ) ;
markRadius . setZ ( z ) ;
markRadius . setZ ( z ) ;
@ -230,16 +233,29 @@ public class RaceController extends Controller {
} else {
} else {
mesh = new MeshView ( importerBurgerBoat . getImport ( ) ) ;
mesh = new MeshView ( importerBurgerBoat . getImport ( ) ) ;
}
}
Subject3D subject = new Subject3D ( mesh ) ;
Subject3D boatModel = new Subject3D ( mesh ) ;
viewSubjects . add ( subject ) ;
Subject3D boatArrow = new BoatArrow ( 12 ) ;
boatModel . setScale ( 0.1 ) ;
viewSubjects . add ( boatModel ) ;
viewSubjects . add ( boatArrow ) ;
// Track this boat's movement with the new subject
// Track this boat's movement with the new subject
AnimationTimer trackBoat = new AnimationTimer ( ) {
AnimationTimer trackBoat = new AnimationTimer ( ) {
@Override
@Override
public void handle ( long now ) {
public void handle ( long now ) {
subject . setHeading ( boat . getBearing ( ) . degrees ( ) ) ;
double heading = boat . getBearing ( ) . degrees ( ) ;
subject . setX ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getX ( ) ) ;
double x = gpsConverter . convertGPS ( boat . getPosition ( ) ) . getX ( ) ;
subject . setZ ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getY ( ) ) ;
double z = gpsConverter . convertGPS ( boat . getPosition ( ) ) . getY ( ) ;
boatModel . setHeading ( heading ) ;
boatModel . setX ( x ) ;
boatModel . setZ ( z ) ;
boatArrow . setHeading ( heading ) ;
boatArrow . setX ( x ) ;
boatArrow . setZ ( z ) ;
}
}
} ;
} ;
trackBoat . start ( ) ;
trackBoat . start ( ) ;