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;