From 6233cb8aaebe552b82a1911482929db9e0716650 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 3 May 2021 21:00:03 -0400 Subject: scene: Improve background music handling. --- starling/scene.scm | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/starling/scene.scm b/starling/scene.scm index cda1e4e..16630ba 100644 --- a/starling/scene.scm +++ b/starling/scene.scm @@ -55,21 +55,33 @@ (define-class () (background-music-source #:getter background-music-source - #:init-form (make-source #:loop? #t)) + #:init-thunk make-source) (background-music #:accessor background-music #:init-form #f - #:init-keyword #:music) + #:init-keyword #:music #:asset? #t #:watch? #t) (background-music-volume #:accessor background-music-volume #:init-form 1.0 - #:init-keyword #:music-volume) + #:init-keyword #:music-volume #:watch? #t) (background-music-loop? #:accessor background-music-loop? #:init-form #t - #:init-keyword #:music-loop?)) + #:init-keyword #:music-loop? #:watch? #t)) + +(define-method (refresh-background-music (scene )) + (let ((source (background-music-source scene))) + (if (audio? (background-music scene)) + (begin + (set-source-volume! source (background-music-volume scene)) + (set-source-loop! source (background-music-loop? scene)) + (set-source-audio! source (background-music scene)) + (source-play source)) + (source-stop (background-music-source scene))))) + +(define-method (on-change (scene ) slot-name old new) + (case slot-name + ((background-music background-music-volume background-music-loop?) + (refresh-background-music scene)) + (else + (next-method)))) (define-method (on-enter (scene )) - (when (audio? (background-music scene)) - (set-source-volume! (background-music-source scene) - (background-music-volume scene)) - (set-source-audio! (background-music-source scene) - (background-music scene)) - (source-play (background-music-source scene)))) + (refresh-background-music scene)) (define-method (on-exit (scene )) (source-stop (background-music-source scene))) -- cgit v1.2.3