Mercurial > touhou
comparison python/src/main.rs @ 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 | 2d60a14f4816 |
| children |
comparison
equal
deleted
inserted
replaced
| 795:2d60a14f4816 | 796:d876ac2ccfe1 |
|---|---|
| 52 OpenGL, | 52 OpenGL, |
| 53 Glide, | 53 Glide, |
| 54 Sdl, | 54 Sdl, |
| 55 } | 55 } |
| 56 | 56 |
| 57 impl Backend { | |
| 58 const fn to_str(&self) -> &'static str { | |
| 59 match self { | |
| 60 Backend::OpenGL => "opengl", | |
| 61 Backend::Glide => "glide", | |
| 62 Backend::Sdl => "sdl", | |
| 63 } | |
| 64 } | |
| 65 } | |
| 66 | |
| 67 #[derive(Debug, Clone, ValueEnum)] | 57 #[derive(Debug, Clone, ValueEnum)] |
| 68 enum GlFlavor { | 58 enum GlFlavor { |
| 69 Core, | 59 Core, |
| 70 Es, | 60 Es, |
| 71 Compatibility, | 61 Compatibility, |
| 246 std::process::exit(1); | 236 std::process::exit(1); |
| 247 } | 237 } |
| 248 | 238 |
| 249 let libtouhou = PyModule::import(py, "libtouhou").unwrap(); | 239 let libtouhou = PyModule::import(py, "libtouhou").unwrap(); |
| 250 let Prng = libtouhou.getattr("Prng").unwrap(); | 240 let Prng = libtouhou.getattr("Prng").unwrap(); |
| 241 let Audio = libtouhou.getattr("Audio").unwrap(); | |
| 242 let DummyAudio = libtouhou.getattr("DummyAudio").unwrap(); | |
| 243 | |
| 244 let audio; | |
| 245 if !args.no_sound { | |
| 246 let bgms = [Some(("赤より紅い夢", "th06_01.mid")), None, None, None]; | |
| 247 audio = Audio.call1((resource_loader.clone(), bgms)).unwrap(); | |
| 248 } else { | |
| 249 audio = DummyAudio.call0().unwrap(); | |
| 250 } | |
| 251 | 251 |
| 252 let mut stage_num; | 252 let mut stage_num; |
| 253 let story; | 253 let story; |
| 254 let mut continues; | 254 let mut continues; |
| 255 if let Some(stage) = args.stage { | 255 if let Some(stage) = args.stage { |
| 336 let renderer = if !GameRenderer.is_none() { | 336 let renderer = if !GameRenderer.is_none() { |
| 337 Some(GameRenderer.call1((resource_loader.clone(), window.clone())).unwrap()) | 337 Some(GameRenderer.call1((resource_loader.clone(), window.clone())).unwrap()) |
| 338 } else { | 338 } else { |
| 339 None | 339 None |
| 340 }; | 340 }; |
| 341 let runner = GameRunner.call1((window.clone(), renderer, common.clone(), resource_loader.clone(), args.skip_replay, con, args.no_sound)).unwrap(); | 341 let runner = GameRunner.call1((window.clone(), renderer, common.clone(), resource_loader.clone(), audio, args.skip_replay, con)).unwrap(); |
| 342 let window_set_runner = window.getattr("set_runner").unwrap(); | 342 let window_set_runner = window.getattr("set_runner").unwrap(); |
| 343 window_set_runner.call1((runner.clone(),)).unwrap(); | 343 window_set_runner.call1((runner.clone(),)).unwrap(); |
| 344 | 344 |
| 345 loop { | 345 loop { |
| 346 let prng; | 346 let prng; |
