diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index 20976cba..c459279f 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -698,7 +698,13 @@ public class RaceViewController extends Controller { } else { for(VisualiserBoat boat : raceState.getBoats()){ for (HealthEffect fp : healthEffectList){ + if(fp.getSourceID()==boat.getSourceID()){ + if(boat.getHealth()<=0){ + fp.displayDeath(); + fp.setSourceID(0); + } + else if(boat.getHealth()<=10){ fp.flash(System.currentTimeMillis(), 300, boat.getSourceID()==raceState.getPlayerBoatID()); } @@ -713,25 +719,6 @@ public class RaceViewController extends Controller { } } } -// try { -// if(raceState.getBoat(raceState.getPlayerBoatID()).getHealth()<=10){ -// heartbeatDelay = 300; -// } else if (raceState.getBoat(raceState.getPlayerBoatID()).getHealth()<=20){ -// heartbeatDelay = 500; -// } -// if(raceState.getBoat(raceState.getPlayerBoatID()).getHealth()<=20){ -// -// //imageView.translateXProperty().setValue(raceState.getBoat(raceState.getPlayerBoatID()).getPosition().getLongitude()); -// if(System.currentTimeMillis() > heartbeatTime+heartbeatDelay) { -// AudioClip sound = new AudioClip(this.getClass().getResource("/visualiser/sounds/warning.mp3").toExternalForm()); -// sound.setVolume(0.3); -// sound.play(); -// heartbeatTime = System.currentTimeMillis() + heartbeatDelay; -// } -// } -// } catch (BoatNotFoundException e) { -// e.printStackTrace(); -// } } } }.start(); diff --git a/racevisionGame/src/main/java/visualiser/layout/HealthEffect.java b/racevisionGame/src/main/java/visualiser/layout/HealthEffect.java index 6b61d5e1..a00b40d3 100644 --- a/racevisionGame/src/main/java/visualiser/layout/HealthEffect.java +++ b/racevisionGame/src/main/java/visualiser/layout/HealthEffect.java @@ -16,7 +16,8 @@ public class HealthEffect extends Subject3D { private int sourceID; private long currentTime; private long flashInterval; - private AudioClip sound = new AudioClip(this.getClass().getResource("/visualiser/sounds/warning.mp3").toExternalForm()); + private AudioClip warningSound = new AudioClip(this.getClass().getResource("/visualiser/sounds/warning.mp3").toExternalForm()); + private AudioClip deadSound = new AudioClip(this.getClass().getResource("/visualiser/sounds/dead1.wav").toExternalForm()); public HealthEffect(int sourceID, long currentTime){ super(createEffect(), 0); @@ -66,6 +67,21 @@ public class HealthEffect extends Subject3D { return sourceID; } + public void setSourceID(int id){ + this.sourceID = id; + } + + public void displayDeath(){ + Image image = new Image(HealthEffect.class.getClassLoader().getResourceAsStream("images/warning2.png")); + PhongMaterial material = (PhongMaterial) this.getMesh().getMaterial(); + material.setDiffuseColor(Color.web("#FFFFFF")); + material.setSpecularColor(Color.web("#000000")); + material.setDiffuseMap(image); + this.getMesh().setMaterial(material); + deadSound.play(); + } + + /** * Flash the mesh view at a certain interval * @param checkTime The current time of flash @@ -78,8 +94,8 @@ public class HealthEffect extends Subject3D { this.setVisible(false); } else { if(playerBoat) { - sound.setVolume(0.1); - sound.play(); + warningSound.setVolume(0.1); + warningSound.play(); } this.setVisible(true); } diff --git a/racevisionGame/src/main/resources/images/warning2.png b/racevisionGame/src/main/resources/images/warning2.png new file mode 100644 index 00000000..d8920c34 Binary files /dev/null and b/racevisionGame/src/main/resources/images/warning2.png differ diff --git a/racevisionGame/src/main/resources/visualiser/sounds/dead1.wav b/racevisionGame/src/main/resources/visualiser/sounds/dead1.wav new file mode 100644 index 00000000..78e4d5ac Binary files /dev/null and b/racevisionGame/src/main/resources/visualiser/sounds/dead1.wav differ