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