From cb1cbd96d05dc8978d95ca4685128e033f286c3d Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 9 Jul 2022 21:20:51 +0200 Subject: Playback: Factorise start-fixture-playback! and clock logic --- guile/starlet/clock.scm | 6 ++++-- guile/starlet/playback.scm | 32 ++++++++++++++++---------------- 2 files changed, 20 insertions(+), 18 deletions(-) (limited to 'guile') diff --git a/guile/starlet/clock.scm b/guile/starlet/clock.scm index c139d66..2e6e2ff 100644 --- a/guile/starlet/clock.scm +++ b/guile/starlet/clock.scm @@ -92,8 +92,10 @@ (define (clock-expired? clock) - (> (elapsed-time clock) - (expiration-time clock))) + (and + clock + (> (elapsed-time clock) + (expiration-time clock)))) (define-method (elapsed-time (clock )) diff --git a/guile/starlet/playback.scm b/guile/starlet/playback.scm index 28ad18e..e7beb84 100644 --- a/guile/starlet/playback.scm +++ b/guile/starlet/playback.scm @@ -341,23 +341,23 @@ (num-cues (get-playback-cue-list pb))) -(define-method (update-state! (pb )) - (when (and (get-pb-cue-clock pb) - (clock-expired? (get-pb-cue-clock pb)) - (eq? 'running (atomic-box-ref (state-box pb)))) - (when (eq? 'running (atomic-box-compare-and-swap! (state-box pb) - 'running - 'ready)) - (run-hook (state-change-hook pb) 'ready) - - ;; Pre-set fixtures - (let ((st (get-preset-state (get-running-cue pb)))) - (state-for-each - (lambda (fix attr val) - (set-in-state! pb fix attr (lambda () val))) - st)) +(define (start-fixture-preset! pb) + (let ((st (get-preset-state (get-running-cue pb)))) + (state-for-each + (lambda (fix attr val) + (set-in-state! pb fix attr (lambda () val))) + st))) - (set-running-cue! pb #f)))) + +(define-method (update-state! (pb )) + (when + (and (clock-expired? (get-pb-cue-clock pb)) + (eq? 'running (atomic-box-compare-and-swap! (state-box pb) + 'running + 'ready))) + (run-hook (state-change-hook pb) 'ready) + (start-fixture-preset! pb) + (set-running-cue! pb #f))) (define (next-cue-number pb) -- cgit v1.2.3