@ -72,6 +72,7 @@ public class RaceViewController extends Controller {
private int heartbeatDelay = 1000 ;
private long heartbeatTime = 0 ;
private GPSConverter gpsConverter ;
private ArrayList < FireParticle > fireParticleList = new ArrayList < > ( ) ;
/ * *
@ -239,18 +240,13 @@ public class RaceViewController extends Controller {
initialiseView3D ( this . visualiserRace ) ;
initialiseHealthPane ( ) ;
initialiseRaceClock ( ) ;
//initialiseFireEffect();
raceTimer ( ) ; // start the timer
new Sparkline ( this . raceState , this . sparklineChart ) ;
timeZone . setText ( this . raceState . getRaceClock ( ) . getTimeZone ( ) ) ;
arrowController . setWindProperty ( this . raceState . windProperty ( ) ) ;
}
private void initialiseFireEffect ( ) {
Image fire = new Image ( getClass ( ) . getClassLoader ( ) . getResourceAsStream ( "images/fire.gif" ) ) ;
imageView . setImage ( fire ) ;
//imageView.setVisible(false);
}
private void initialiseHealthPane ( ) {
InputStream tomato = this . getClass ( ) . getClassLoader ( ) . getResourceAsStream ( "visualiser/images/tomato.png" ) ;
@ -354,23 +350,14 @@ public class RaceViewController extends Controller {
//Create first fire
FireParticle fire = new FireParticle ( ) ;
FireParticle fire = new FireParticle ( boat . getSourceID ( ) , System . currentTimeMillis ( ) ) ;
viewSubjects . add ( fire ) ;
fire . rotateView ( ( double ) - 90 , fire . getPosition ( ) . getX ( ) , fire . getPosition ( ) . getY ( ) , fire . getPosition ( ) . getZ ( ) , Rotate . X_AXIS ) ;
//fire.setVisible(false);
fireParticleList . add ( fire ) ;
//Create second fire
FireParticle fireSecond = new FireParticle ( ) ;
viewSubjects . add ( fireSecond ) ;
fireSecond . rotateView ( ( double ) - 90 , fireSecond . getPosition ( ) . getX ( ) , fireSecond . getPosition ( ) . getY ( ) , fireSecond . getPosition ( ) . getZ ( ) , Rotate . X_AXIS ) ;
fireSecond . rotateView ( ( double ) 60 , fireSecond . getPosition ( ) . getX ( ) , fireSecond . getPosition ( ) . getY ( ) , fireSecond . getPosition ( ) . getZ ( ) , Rotate . Y_AXIS ) ;
//fire.rotateView((double) 90, fire.getPosition().getX(), fire.getPosition().getY(), fire.getPosition().getZ(), Rotate.X_AXIS);
//Create third fire
FireParticle fireThird = new FireParticle ( ) ;
viewSubjects . add ( fireThird ) ;
fireThird . rotateView ( ( double ) - 90 , fireThird . getPosition ( ) . getX ( ) , fireThird . getPosition ( ) . getY ( ) , fireThird . getPosition ( ) . getZ ( ) , Rotate . X_AXIS ) ;
fireThird . rotateView ( ( double ) 120 , fireThird . getPosition ( ) . getX ( ) , fireThird . getPosition ( ) . getY ( ) , fireThird . getPosition ( ) . getZ ( ) , Rotate . Y_AXIS ) ;
// Track this boat's movement with the new subject
@ -380,21 +367,13 @@ public class RaceViewController extends Controller {
boatModel . setHeading ( boat . getBearing ( ) . degrees ( ) ) ;
boatModel . setX ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getX ( ) ) ;
boatModel . setZ ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getY ( ) ) ;
boatModel . getMesh ( ) . toFront ( ) ;
//Fire follows boat
fire . setHeading ( boat . getBearing ( ) . degrees ( ) ) ;
fire . setX ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getX ( ) ) ;
fire . setZ ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getY ( ) ) ;
fireSecond . setHeading ( boat . getBearing ( ) . degrees ( ) ) ;
fireSecond . setX ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getX ( ) ) ;
fireSecond . setZ ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getY ( ) ) ;
fireThird . setHeading ( boat . getBearing ( ) . degrees ( ) ) ;
fireThird . setX ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getX ( ) ) ;
fireThird . setZ ( gpsConverter . convertGPS ( boat . getPosition ( ) ) . getY ( ) ) ;
fire . setY ( 0 ) ;
}
} ;
@ -718,6 +697,19 @@ public class RaceViewController extends Controller {
if ( raceState . getRaceStatusEnum ( ) = = RaceStatusEnum . FINISHED ) {
stop ( ) ; // stop the timer
} else {
for ( VisualiserBoat boat : raceState . getBoats ( ) ) {
for ( FireParticle fp : fireParticleList ) {
if ( fp . getSourceID ( ) = = boat . getSourceID ( ) ) {
if ( boat . getHealth ( ) < = 20 ) {
//fp.setVisible(true);
fp . flash ( System . currentTimeMillis ( ) , 200 ) ;
} else {
fp . setVisible ( false ) ;
}
break ;
}
}
}
try {
if ( raceState . getBoat ( raceState . getPlayerBoatID ( ) ) . getHealth ( ) < = 20 ) {
heartbeatDelay = 500 ;
@ -725,13 +717,6 @@ public class RaceViewController extends Controller {
heartbeatDelay = 1000 ;
}
if ( raceState . getBoat ( raceState . getPlayerBoatID ( ) ) . getHealth ( ) < = 40 ) {
imageView . setVisible ( true ) ;
imageView . setX ( gpsConverter . convertGPS ( raceState . getBoat ( raceState . getPlayerBoatID ( ) ) . getPosition ( ) ) . getX ( ) ) ;
imageView . setY ( gpsConverter . convertGPS ( raceState . getBoat ( raceState . getPlayerBoatID ( ) ) . getPosition ( ) ) . getY ( ) ) ;
System . out . println ( "Boat:" + gpsConverter . convertGPS ( raceState . getBoat ( raceState . getPlayerBoatID ( ) ) . getPosition ( ) ) . getX ( ) ) ;
System . out . println ( "Image:" + imageView . getX ( ) ) ;
//imageView.translateXProperty().setValue(raceState.getBoat(raceState.getPlayerBoatID()).getPosition().getLongitude());
if ( System . currentTimeMillis ( ) > heartbeatTime + heartbeatDelay ) {