|
|
|
|
@ -13,6 +13,7 @@ import javafx.scene.PointLight;
|
|
|
|
|
import javafx.scene.chart.LineChart;
|
|
|
|
|
import javafx.scene.control.*;
|
|
|
|
|
import javafx.scene.image.Image;
|
|
|
|
|
import javafx.scene.image.ImageView;
|
|
|
|
|
import javafx.scene.input.KeyCode;
|
|
|
|
|
import javafx.scene.input.KeyEvent;
|
|
|
|
|
import javafx.scene.layout.AnchorPane;
|
|
|
|
|
@ -69,6 +70,7 @@ public class RaceViewController extends Controller {
|
|
|
|
|
private boolean mapToggle = true;
|
|
|
|
|
private int heartbeatDelay = 1000;
|
|
|
|
|
private long heartbeatTime = 0;
|
|
|
|
|
private GPSConverter gpsConverter;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -100,6 +102,7 @@ public class RaceViewController extends Controller {
|
|
|
|
|
private @FXML AnchorPane infoWrapper;
|
|
|
|
|
private @FXML AnchorPane lineChartWrapper;
|
|
|
|
|
private @FXML GridPane playerHealthContainer;
|
|
|
|
|
private @FXML ImageView imageView;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Displays a specified race.
|
|
|
|
|
@ -114,7 +117,6 @@ public class RaceViewController extends Controller {
|
|
|
|
|
this.controllerClient = controllerClient;
|
|
|
|
|
this.isHost = isHost;
|
|
|
|
|
keyFactory.load();
|
|
|
|
|
|
|
|
|
|
tutorialCheck();
|
|
|
|
|
initKeypressHandler();
|
|
|
|
|
initialiseRaceVisuals();
|
|
|
|
|
@ -235,12 +237,19 @@ 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");
|
|
|
|
|
HealthSlider healthSlider = new HealthSlider(new Image(tomato));
|
|
|
|
|
@ -294,7 +303,7 @@ public class RaceViewController extends Controller {
|
|
|
|
|
|
|
|
|
|
// Set up projection from GPS to view
|
|
|
|
|
RaceDataSource raceData = visualiserRace.getVisualiserRaceState().getRaceDataSource();
|
|
|
|
|
final GPSConverter gpsConverter = new GPSConverter(raceData, 450, 450);
|
|
|
|
|
gpsConverter = new GPSConverter(raceData, 450, 450);
|
|
|
|
|
|
|
|
|
|
SkyBox skyBox = new SkyBox(750, 200, 250, 0, 210);
|
|
|
|
|
viewSubjects.addAll(skyBox.getSkyBoxPlanes());
|
|
|
|
|
@ -675,6 +684,15 @@ 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) {
|
|
|
|
|
AudioClip sound = new AudioClip(this.getClass().getResource("/visualiser/sounds/heartbeat.mp3").toExternalForm());
|
|
|
|
|
sound.play();
|
|
|
|
|
|