about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2020-04-12 17:51:12 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2020-04-12 17:51:12 +0700
commit2813a0856f1de3e0f9e0beed280e29e06a78c3ee (patch)
tree180e9abaf54506459ea47b9c32d5dcc516303c62
parent600c72d0d4c4a64d452eb6bf4e96ac9436eb57e7 (diff)
downloadbrutalmaze-2813a0856f1de3e0f9e0beed280e29e06a78c3ee.tar.gz
Switch audio plane to Oxy
Also clean up sources properly
-rw-r--r--brutalmaze/game.py12
-rw-r--r--brutalmaze/misc.py14
2 files changed, 15 insertions, 11 deletions
diff --git a/brutalmaze/game.py b/brutalmaze/game.py
index 2b7d331..f088b7d 100644
--- a/brutalmaze/game.py
+++ b/brutalmaze/game.py
@@ -16,7 +16,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with Brutal Maze.  If not, see <https://www.gnu.org/licenses/>.
 
-__version__ = '0.9.0'
+__version__ = '0.9.1'
 
 import re
 from argparse import ArgumentParser, FileType, RawTextHelpFormatter
@@ -32,7 +32,7 @@ from threading import Thread
 with redirect_stdout(StringIO()): import pygame
 from pygame import KEYDOWN, MOUSEBUTTONUP, QUIT, VIDEORESIZE
 from pygame.time import Clock, get_ticks
-from palace import free, use_context, Device, Context
+from palace import free, use_context, Device, Context, Buffer
 from appdirs import AppDirs
 
 from .constants import SETTINGS, ICON, SFX, SFX_NOISE, HERO_SPEED, MIDDLE
@@ -136,9 +136,10 @@ class Game:
     def __enter__(self):
         if self.actx is not None:
             use_context(self.actx)
-            self.actx.listener.position = MIDDLE, 0, MIDDLE
+            self.actx.listener.position = MIDDLE, -MIDDLE, 0
             self.actx.listener.gain = not self._mute
-            play(SFX_NOISE)
+            self._source = Buffer(SFX_NOISE).play()
+            self._source.looping = True
         return self
 
     def __exit__(self, exc_type, exc_value, traceback):
@@ -146,7 +147,8 @@ class Game:
         if not self.hero.dead: self.maze.dump_records()
         if self.actx is not None:
             free(SFX)
-            clean_sources()
+            clean_sources(stopped=False)
+            self._source.destroy()
             use_context(None)
             self.actx.destroy()
             self.actx.device.close()
diff --git a/brutalmaze/misc.py b/brutalmaze/misc.py
index 92000a4..e5d1016 100644
--- a/brutalmaze/misc.py
+++ b/brutalmaze/misc.py
@@ -93,20 +93,22 @@ def json_rec(directory):
 def play(sound: str, x: float = MIDDLE, y: float = MIDDLE,
          gain: float = 1.0) -> None:
     """Play a sound at the given position."""
-    buffer = Buffer(sound)
-    source = buffer.play()
+    source = Buffer(sound).play()
     source.spatialize = True
-    source.position = x, 0, y
+    source.position = x, -y, 0
     source.gain = gain
     sources.append(source)
 
 
-def clean_sources() -> None:
-    """Destroyed stopped sources."""
+def clean_sources(stopped=True) -> None:
+    """Destroyed stopped sources.
+
+    If stopped is set to False, clean all sources.
+    """
     global sources
     sources, tmp = [], sources
     for source in tmp:
-        if source.playing:
+        if stopped and source.playing:
             sources.append(source)
         else:
             source.destroy()