@ -323,16 +323,16 @@ public class RaceViewController extends Controller {
Material markColor = new PhongMaterial ( new Color ( 0.15 , 0.9 , 0.2 , 1 ) ) ;
CompoundMark nextMark = boat . getCurrentLeg ( ) . getEndCompoundMark ( ) ;
view3D . getShape ( nextMark . getMark1 ( ) . getSourceID ( ) ) . setMaterial( markColor ) ;
view3D . getShape ( nextMark . getMark1 ( ) . getSourceID ( ) ) . getMesh( ) . setMaterial( markColor ) ;
if ( nextMark . getMark2 ( ) ! = null ) {
view3D . getShape ( nextMark . getMark2 ( ) . getSourceID ( ) ) . setMaterial( markColor ) ;
view3D . getShape ( nextMark . getMark2 ( ) . getSourceID ( ) ) . getMesh( ) . setMaterial( markColor ) ;
}
Subject3D shockwave = new Shockwave ( 10 ) ;
viewSubjects . add ( shockwave ) ;
boat . legProperty ( ) . addListener ( ( o , prev , curr ) - > swapColours ( curr ) ) ;
boat . hasCollidedProperty ( ) . addListener ( ( o , prev , curr ) - > showCollision ( boat Model , shockwave ) ) ;
boat . hasCollidedProperty ( ) . addListener ( ( o , prev , curr ) - > showCollision ( boat , shockwave ) ) ;
}
// Fix initial bird's-eye position
view3D . updatePivot ( new Translate ( 250 , 0 , 210 ) ) ;
@ -341,7 +341,7 @@ public class RaceViewController extends Controller {
if ( curr ! = null & & visualiserRace . getVisualiserRaceState ( ) . isVisualiserBoat ( curr . getSourceID ( ) ) ) {
addThirdPersonAnnotations ( curr ) ;
} else {
removeThirdPersonAnnotations ( prev ) ;
removeThirdPersonAnnotations ( ) ;
}
} ) ;
@ -390,18 +390,20 @@ public class RaceViewController extends Controller {
} ) ;
}
private void showCollision ( Subject3D boat , Subject3D shockwave ) {
private void showCollision ( VisualiserBoat boat , Subject3D shockwave ) {
Subject3D boatModel = view3D . getShape ( boat . getSourceID ( ) ) ;
AnimationTimer shockFront = new AnimationTimer ( ) {
double opacity = 1 ;
@Override
public void handle ( long now ) {
shockwave . setX ( boat . getPosition ( ) . getX ( ) ) ;
shockwave . setY ( boat . getPosition ( ) . getY ( ) ) ;
shockwave . setZ ( boat . getPosition ( ) . getZ ( ) ) ;
shockwave . setX ( boat Model . getPosition ( ) . getX ( ) ) ;
shockwave . setY ( boat Model . getPosition ( ) . getY ( ) ) ;
shockwave . setZ ( boat Model . getPosition ( ) . getZ ( ) ) ;
if ( opacity < = 0 ) {
shockwave . getMesh ( ) . setMaterial ( new PhongMaterial ( new Color ( 1 , 0 , 0 , 0 ) ) ) ;
boat . setHasCollided ( false ) ;
this . stop ( ) ;
}
else {
@ -435,38 +437,11 @@ public class RaceViewController extends Controller {
}
} ;
arrowToNextMark . start ( ) ;
/ *
try {
VisualiserBoat boat = visualiserRace . getVisualiserRaceState ( ) . getBoat ( subject3D . getSourceID ( ) ) ;
this . pointToMark = 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 ( ) + 10 ) ;
nextMarkArrow . setHeading ( headingToMark . degrees ( ) ) ;
}
} ;
pointToMark . start ( ) ;
} catch ( BoatNotFoundException e ) {
e . printStackTrace ( ) ;
} * /
}
private void removeThirdPersonAnnotations ( Subject3D subject3D ) {
private void removeThirdPersonAnnotations ( ) {
viewSubjects . remove ( nextMarkArrow ) ;
arrowToNextMark . stop ( ) ;
/ *
try {
VisualiserBoat boat = visualiserRace . getVisualiserRaceState ( ) . getBoat ( subject3D . getSourceID ( ) ) ;
boat . positionProperty ( ) . removeListener ( pointToMark ) ;
} catch ( BoatNotFoundException e ) {
e . printStackTrace ( ) ;
} * /
//pointToMark.stop();
}
/ * *
@ -477,21 +452,21 @@ public class RaceViewController extends Controller {
CompoundMark start = leg . getStartCompoundMark ( ) ;
CompoundMark end = leg . getEndCompoundMark ( ) ;
Shape3D start1 = view3D . getShape ( start . getMark1 ( ) . getSourceID ( ) ) ;
Shape3D end1 = view3D . getShape ( end . getMark1 ( ) . getSourceID ( ) ) ;
Shape3D start1 = view3D . getShape ( start . getMark1 ( ) . getSourceID ( ) ) .getMesh ( ) ;
Shape3D end1 = view3D . getShape ( end . getMark1 ( ) . getSourceID ( ) ) .getMesh ( ) ;
Material nextMark = start1 . getMaterial ( ) ;
Material lastMark = end1 . getMaterial ( ) ;
start1 . setMaterial ( lastMark ) ;
if ( start . getMark2 ( ) ! = null ) {
Shape3D start2 = view3D . getShape ( start . getMark2 ( ) . getSourceID ( ) ) ;
Shape3D start2 = view3D . getShape ( start . getMark2 ( ) . getSourceID ( ) ) .getMesh ( ) ;
start2 . setMaterial ( lastMark ) ;
}
end1 . setMaterial ( nextMark ) ;
if ( end . getMark2 ( ) ! = null ) {
Shape3D end2 = view3D . getShape ( end . getMark2 ( ) . getSourceID ( ) ) ;
Shape3D end2 = view3D . getShape ( end . getMark2 ( ) . getSourceID ( ) ) .getMesh ( ) ;
end2 . setMaterial ( nextMark ) ;
}
}