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]
This commit is contained in:
@@ -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,24 +350,15 @@ 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
|
||||||
AnimationTimer trackBoat = new AnimationTimer() {
|
AnimationTimer trackBoat = new AnimationTimer() {
|
||||||
@@ -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 |
Reference in New Issue
Block a user