comparison 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
comparison
equal deleted inserted replaced
795:2d60a14f4816 796:d876ac2ccfe1
15 cimport cython 15 cimport cython
16 16
17 from pytouhou.lib.gui cimport EXIT, PAUSE, SCREENSHOT, RESIZE, FULLSCREEN 17 from pytouhou.lib.gui cimport EXIT, PAUSE, SCREENSHOT, RESIZE, FULLSCREEN
18 18
19 from .window cimport Window, Runner 19 from .window cimport Window, Runner
20 from libtouhou import Audio 20 from libtouhou import Audio, DummyAudio
21 from pytouhou.game.game cimport Game 21 from pytouhou.game.game cimport Game
22 22
23 23
24 class DummyAudio:
25 def play(self, name):
26 pass
27
28 def play_bgm(self, track):
29 pass
30
31
32 cdef class GameRunner(Runner): 24 cdef class GameRunner(Runner):
33 cdef object background, con, resource_loader, keys, replay_level, common 25 cdef object audio, background, con, resource_loader, keys, replay_level, common
34 cdef Game game 26 cdef Game game
35 cdef Window window 27 cdef Window window
36 cdef list save_keystates 28 cdef list save_keystates
37 cdef bint skip, audio 29 cdef bint skip
38 30
39 # Since we want to support multiple renderers, don’t specify its type. 31 # Since we want to support multiple renderers, don’t specify its type.
40 #TODO: find a way to still specify its interface. 32 #TODO: find a way to still specify its interface.
41 cdef object renderer 33 cdef object renderer
42 34
43 def __init__(self, Window window, renderer, common, resource_loader, 35 def __init__(self, Window window, renderer, common, resource_loader, audio,
44 bint skip=False, con=None, bint audio=True): 36 bint skip=False, con=None):
45 self.renderer = renderer 37 self.renderer = renderer
46 self.common = common 38 self.common = common
47 self.resource_loader = resource_loader 39 self.resource_loader = resource_loader
48 40
49 self.window = window 41 self.window = window
72 game.players[0].bombs = self.replay_level.bombs 64 game.players[0].bombs = self.replay_level.bombs
73 game.difficulty = self.replay_level.difficulty 65 game.difficulty = self.replay_level.difficulty
74 66
75 self.save_keystates = save_keystates 67 self.save_keystates = save_keystates
76 68
77 if self.audio: 69 game.music = self.audio
78 game.music = Audio(self.resource_loader, bgms) 70 game.music.load_bgms(bgms)
79 else: 71 game.music.play_bgm(0)
80 game.music = DummyAudio()
81 if bgms is not None:
82 game.music.play_bgm(0)
83 72
84 game.sfx_player = game.music if not self.skip else DummyAudio() 73 game.sfx_player = game.music if not self.skip else DummyAudio()
85 74
86 75
87 cdef bint set_input(self, replay=None) except True: 76 cdef bint set_input(self, replay=None) except True: