Reworked visual displays for low hp boats. There is now a warning indication under boats that drop below 20hp. TODO: Create sfx and different display when boat is in critical hp/dead. #story[1292]

main
David Wu 8 years ago
parent 45b2f0b6db
commit 3a966fa6b8

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

@ -5,8 +5,7 @@ import javafx.scene.image.Image;
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.MeshView; import javafx.scene.shape.*;
import javafx.scene.shape.Shape3D;
import javafx.scene.transform.Rotate; import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate; import javafx.scene.transform.Translate;
@ -15,14 +14,21 @@ import javafx.scene.transform.Translate;
*/ */
public class FireParticle extends Subject3D { public class FireParticle extends Subject3D {
public FireParticle(){ private int sourceID;
super(createFire(), 0); private long currentTime;
private long flashInterval;
public FireParticle(int sourceID, long currentTime){
super(createFire(), 0);
this.sourceID = sourceID;
this.currentTime = currentTime;
} }
private static Shape3D createFire(){ private static Shape3D createFire(){
Image fire = new Image(FireParticle.class.getClassLoader().getResourceAsStream("images/fire.gif")); Image fire = new Image(FireParticle.class.getClassLoader().getResourceAsStream("images/warning.png"));
Plane3D plane = new Plane3D(20, 20, 10, 10); Plane3D plane = new Plane3D(20, 20, 10, 10);
@ -31,17 +37,12 @@ public class FireParticle extends Subject3D {
material.setSpecularColor(Color.web("#000000")); material.setSpecularColor(Color.web("#000000"));
material.setDiffuseMap(fire); material.setDiffuseMap(fire);
//material.setDiffuseMap(fire);
MeshView fireSurface = new MeshView(plane); MeshView fireSurface = new MeshView(plane);
fireSurface.setTranslateZ(15);
fireSurface.setTranslateY(10);
fireSurface.setMaterial(material); fireSurface.setMaterial(material);
fireSurface.setMouseTransparent(true); fireSurface.setMouseTransparent(true);
fireSurface.toFront(); //fireSurface.toFront(); this.flashInterval = flashInterval;
return fireSurface; return fireSurface;
} }
@ -54,5 +55,24 @@ public class FireParticle extends Subject3D {
this.getMesh().getTransforms().add(rotate); this.getMesh().getTransforms().add(rotate);
} }
public void setVisible(boolean bool){
this.getMesh().setVisible(bool);
}
public int getSourceID(){
return sourceID;
}
public void flash(long checkTime, long flashInterval){
if(checkTime >= (currentTime+flashInterval)){
this.currentTime = checkTime;
if(this.getMesh().isVisible()){
this.setVisible(false);
} else {
this.setVisible(true);
}
}
}
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Loading…
Cancel
Save