From 9b579b16ebee76e6151ba27e329c9be7a303db07 Mon Sep 17 00:00:00 2001
From: Sabvente <sabvente@mail.com>
Date: Fri, 9 May 2014 19:43:44 +0200
Subject: [PATCH] =?UTF-8?q?hangok=20meg=C3=A1ll=C3=ADt=C3=A1sa=20kil=C3=A9?=
 =?UTF-8?q?p=C3=A9sn=C3=A9l;=20Tower=20range=20fix=20#2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/engine/Engine.java | 12 ++++++++++++
 src/view/Sounds.java   | 11 +++++++++++
 src/world/Tower.java   | 11 ++++++++---
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/src/engine/Engine.java b/src/engine/Engine.java
index 013d0a1..a5bea63 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 537964e..e6fdadc 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 538bd11..1a33f39 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);
-- 
GitLab