diff --git a/src/engine/Engine.java b/src/engine/Engine.java index 013d0a1721656346eacb7e93e7a98cc37553a614..a5bea6350204060fc850860d63fdb57c1e14e2e3 100644 --- a/src/engine/Engine.java +++ b/src/engine/Engine.java @@ -4,6 +4,8 @@ import interfaces.ITickable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -81,6 +83,16 @@ public class Engine gameWindow.setSize(1000, 750); gameWindow.setResizable(false); gameWindow.setContentPane(new GamePanel(world)); + gameWindow.addWindowListener(new WindowAdapter() + { + @Override + public void windowClosing(WindowEvent e) + { + isGameRunning = false; + Sounds.StopAllSound(); + } + + }); isGameRunning = true; } diff --git a/src/view/Sounds.java b/src/view/Sounds.java index 537964edea3090788bda37454769330fd1f06aa6..e6fdadc711199613e9528c72b6455a9f3bcfe8fe 100644 --- a/src/view/Sounds.java +++ b/src/view/Sounds.java @@ -2,6 +2,7 @@ package view; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; @@ -10,6 +11,7 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; public class Sounds { + private static ArrayList<Clip> clips = new ArrayList<Clip>(); public static void LoopSound(String file) { AudioInputStream aStream = null; try { @@ -44,8 +46,17 @@ public class Sounds { clip.open(aStream); clip.setFramePosition(0); clip.start(); + clips.add(clip); } catch (LineUnavailableException | IOException e1) { e1.printStackTrace(); } } + + public static void StopAllSound() + { + for (Clip c : clips) { + c.stop(); + } + clips.clear(); + } } diff --git a/src/world/Tower.java b/src/world/Tower.java index 538bd1136839f7fea3612156d15ab1e13771ca98..1a33f3966f974f9dca138c82606ac6a44dfeea25 100644 --- a/src/world/Tower.java +++ b/src/world/Tower.java @@ -76,9 +76,15 @@ public class Tower extends Placeable implements ITickable, IEnemyObserver, for (Field field : visibleFields) { if (field == null) continue; - newVisible.addAll(field.getNeighbours()); + for (Field neigh : field.getNeighbours()) { + if(!newVisible.contains(neigh)) + newVisible.add(neigh); + } + } + for (Field neigh : newVisible) { + if(!visibleFields.contains(neigh)) + visibleFields.add(neigh); } - visibleFields.addAll(newVisible); getVisibleFields(visibleFields, iterations - 1); } @@ -86,7 +92,6 @@ public class Tower extends Placeable implements ITickable, IEnemyObserver, enemiesInRange.clear(); ArrayList<Field> visibleFields = new ArrayList<Field>(); visibleFields.add(field); - getVisibleFields(visibleFields, range); if (fogDescends) getVisibleFields(visibleFields, range - 1);