diff 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
line wrap: on
line diff
--- a/python/src/main.rs
+++ b/python/src/main.rs
@@ -54,16 +54,6 @@ enum Backend {
     Sdl,
 }
 
-impl Backend {
-    const fn to_str(&self) -> &'static str {
-        match self {
-            Backend::OpenGL => "opengl",
-            Backend::Glide => "glide",
-            Backend::Sdl => "sdl",
-        }
-    }
-}
-
 #[derive(Debug, Clone, ValueEnum)]
 enum GlFlavor {
     Core,
@@ -248,6 +238,16 @@ fn main() -> PyResult<()> {
 
         let libtouhou = PyModule::import(py, "libtouhou").unwrap();
         let Prng = libtouhou.getattr("Prng").unwrap();
+        let Audio = libtouhou.getattr("Audio").unwrap();
+        let DummyAudio = libtouhou.getattr("DummyAudio").unwrap();
+
+        let audio;
+        if !args.no_sound {
+            let bgms = [Some(("赤より紅い夢", "th06_01.mid")), None, None, None];
+            audio = Audio.call1((resource_loader.clone(), bgms)).unwrap();
+        } else {
+            audio = DummyAudio.call0().unwrap();
+        }
 
         let mut stage_num;
         let story;
@@ -338,7 +338,7 @@ fn main() -> PyResult<()> {
         } else {
             None
         };
-        let runner = GameRunner.call1((window.clone(), renderer, common.clone(), resource_loader.clone(), args.skip_replay, con, args.no_sound)).unwrap();
+        let runner = GameRunner.call1((window.clone(), renderer, common.clone(), resource_loader.clone(), audio, args.skip_replay, con)).unwrap();
         let window_set_runner = window.getattr("set_runner").unwrap();
         window_set_runner.call1((runner.clone(),)).unwrap();