comparison pytouhou/ui/gamerunner.pyx @ 783:ec1e06402a97

Replace SDL2_mixer with the kira crate
author Link Mauve <linkmauve@linkmauve.fr>
date Fri, 21 Nov 2025 10:21:59 +0100
parents 80687f258001
children
comparison
equal deleted inserted replaced
782:a30ce01b9154 783:ec1e06402a97
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 .music import BGMPlayer, SFXPlayer 20 from libtouhou import Audio
21 from pytouhou.game.game cimport Game 21 from pytouhou.game.game cimport Game
22 from pytouhou.game.music cimport MusicPlayer 22
23
24 class DummyAudio:
25 def play(self, name):
26 pass
27
28 def play_bgm(self, track):
29 pass
23 30
24 31
25 cdef class GameRunner(Runner): 32 cdef class GameRunner(Runner):
26 cdef object background, con, resource_loader, keys, replay_level, common 33 cdef object background, con, resource_loader, keys, replay_level, common
27 cdef Game game 34 cdef Game game
28 cdef Window window 35 cdef Window window
29 cdef list save_keystates 36 cdef list save_keystates
30 cdef bint skip 37 cdef bint skip, audio
31 38
32 # Since we want to support multiple renderers, don’t specify its type. 39 # Since we want to support multiple renderers, don’t specify its type.
33 #TODO: find a way to still specify its interface. 40 #TODO: find a way to still specify its interface.
34 cdef object renderer 41 cdef object renderer
35 42
36 def __init__(self, Window window, renderer, common, resource_loader, 43 def __init__(self, Window window, renderer, common, resource_loader,
37 bint skip=False, con=None): 44 bint skip=False, con=None, bint audio=True):
38 self.renderer = renderer 45 self.renderer = renderer
39 self.common = common 46 self.common = common
40 self.resource_loader = resource_loader 47 self.resource_loader = resource_loader
41 48
42 self.window = window 49 self.window = window
43 self.replay_level = None 50 self.replay_level = None
44 self.skip = skip 51 self.skip = skip
45 self.con = con 52 self.con = con
53 self.audio = audio
46 54
47 self.width = common.interface.width 55 self.width = common.interface.width
48 self.height = common.interface.height 56 self.height = common.interface.height
49 57
50 58
64 game.players[0].bombs = self.replay_level.bombs 72 game.players[0].bombs = self.replay_level.bombs
65 game.difficulty = self.replay_level.difficulty 73 game.difficulty = self.replay_level.difficulty
66 74
67 self.save_keystates = save_keystates 75 self.save_keystates = save_keystates
68 76
69 null_player = MusicPlayer() 77 if self.audio:
78 game.music = Audio(self.resource_loader, bgms)
79 else:
80 game.music = DummyAudio()
70 if bgms is not None: 81 if bgms is not None:
71 game.music = BGMPlayer(self.resource_loader, bgms) 82 game.music.play_bgm(0)
72 game.music.play(0)
73 else:
74 game.music = null_player
75 83
76 game.sfx_player = SFXPlayer(self.resource_loader) if not self.skip else null_player 84 game.sfx_player = game.music if not self.skip else DummyAudio()
77 85
78 86
79 cdef bint set_input(self, replay=None) except True: 87 cdef bint set_input(self, replay=None) except True:
80 if not replay or not replay.levels[self.game.stage-1]: 88 if not replay or not replay.levels[self.game.stage-1]:
81 self.replay_level = None 89 self.replay_level = None
142 except StopIteration: 150 except StopIteration:
143 keystate = 0 151 keystate = 0
144 if self.skip: 152 if self.skip:
145 self.set_input() 153 self.set_input()
146 self.skip = False 154 self.skip = False
147 self.game.sfx_player = SFXPlayer(self.resource_loader) 155 self.game.sfx_player = self.game.music
148 156
149 if self.save_keystates is not None: 157 if self.save_keystates is not None:
150 self.save_keystates.append(keystate) 158 self.save_keystates.append(keystate)
151 159
152 if self.con is not None: 160 if self.con is not None: