diff pytouhou/ui/gamerunner.pyx @ 796:d876ac2ccfe1 default tip

Pass audio only once to GameRunner This prevents it being recreated every stage change, and playing music over the previous stages’ music.
author Link Mauve <linkmauve@linkmauve.fr>
date Sun, 28 Jun 2026 14:27:03 +0200
parents ec1e06402a97
children
line wrap: on
line diff
--- a/pytouhou/ui/gamerunner.pyx
+++ b/pytouhou/ui/gamerunner.pyx
@@ -17,31 +17,23 @@ cimport cython
 from pytouhou.lib.gui cimport EXIT, PAUSE, SCREENSHOT, RESIZE, FULLSCREEN
 
 from .window cimport Window, Runner
-from libtouhou import Audio
+from libtouhou import Audio, DummyAudio
 from pytouhou.game.game cimport Game
 
 
-class DummyAudio:
-    def play(self, name):
-        pass
-
-    def play_bgm(self, track):
-        pass
-
-
 cdef class GameRunner(Runner):
-    cdef object background, con, resource_loader, keys, replay_level, common
+    cdef object audio, background, con, resource_loader, keys, replay_level, common
     cdef Game game
     cdef Window window
     cdef list save_keystates
-    cdef bint skip, audio
+    cdef bint skip
 
     # Since we want to support multiple renderers, don’t specify its type.
     #TODO: find a way to still specify its interface.
     cdef object renderer
 
-    def __init__(self, Window window, renderer, common, resource_loader,
-                 bint skip=False, con=None, bint audio=True):
+    def __init__(self, Window window, renderer, common, resource_loader, audio,
+                 bint skip=False, con=None):
         self.renderer = renderer
         self.common = common
         self.resource_loader = resource_loader
@@ -74,12 +66,9 @@ cdef class GameRunner(Runner):
 
         self.save_keystates = save_keystates
 
-        if self.audio:
-            game.music = Audio(self.resource_loader, bgms)
-        else:
-            game.music = DummyAudio()
-        if bgms is not None:
-            game.music.play_bgm(0)
+        game.music = self.audio
+        game.music.load_bgms(bgms)
+        game.music.play_bgm(0)
 
         game.sfx_player = game.music if not self.skip else DummyAudio()