Mercurial > touhou
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: |
