Mercurial > fife-parpg
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