diff engine/python/fife/extensions/soundmanager.py @ 651:2851e232a113

* Modified the sound manager to better take care of sound clips. (Hope this fixes the crash at the end of the shooter demo)
author prock@33b003aa-7bff-0310-803a-e67f0ece8222
date Thu, 14 Oct 2010 15:52:43 +0000
parents 872a7a94563e
children 99e3ef63495b
line wrap: on
line diff
--- a/engine/python/fife/extensions/soundmanager.py	Thu Oct 14 15:32:09 2010 +0000
+++ b/engine/python/fife/extensions/soundmanager.py	Thu Oct 14 15:52:43 2010 +0000
@@ -93,6 +93,9 @@
 
 		self._position = None
 		self._rolloff = 0
+
+	def __del__(self):
+		self._soundmanager.unregisterClip(self)
 
 	def play(self):
 		self._soundmanager.playClip(self)
@@ -201,6 +204,9 @@
 		#A dict of fife emitters
 		self._loadedclips = {}
 		
+		#A list of created clips
+		self._soundclips = []
+		
 		#A tuple representing the listener position (x,y)
 		self._listenerposition = None
 
@@ -245,7 +251,9 @@
 		if position is not None:
 			clip.position = position
 			clip.rolloff = self.rolloff
-			
+		
+		self._soundclips.append(clip)
+		
 		return clip
 
 	def playClip(self, clip):
@@ -330,6 +338,12 @@
 		else:
 			clip = self.createSoundEmitter(clip.name)
 			self.playClip(clip)
+
+	def unregisterClip(self, clip):
+		self.stopClip(clip)
+		
+		if clip in self._soundclips:
+			self._soundclips.remove(clip)
 
 	def stopClip(self, clip):
 		"""
@@ -347,9 +361,8 @@
 			clip.timer = None
 
 	def stopAllSounds(self):
-		for emitterlist in self._loadedclips.values():
-			for emitter in emitterlist:
-				emitter.stop()
+		for clip in self._soundclips:
+			self.stopClip(clip)
 
 	def destroy(self):
 		"""
@@ -364,7 +377,7 @@
 				self._fifesoundmanager.releaseEmitter(emitter.getId())
 				emitter = None
 
-		self._loadedclips.clear()
+		self._loadedclips.clear()
 
	def _getRolloff(self):
 		return self._rolloff