aboutsummaryrefslogtreecommitdiff
path: root/guile
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2022-10-30 21:58:27 +0100
committerThomas White <taw@physics.org>2022-10-30 21:58:27 +0100
commit797b616c66ab514880cf5a4fd8cb6837b43b52a1 (patch)
treedd0e4cf7ebf1c9f3cf0d03d99f8657138d2426ec /guile
parent83130ff9f6768e6b139eabdbd184571cc3c3d32c (diff)
Add flash-chase
Diffstat (limited to 'guile')
-rw-r--r--guile/starlet/effects.scm26
1 files changed, 25 insertions, 1 deletions
diff --git a/guile/starlet/effects.scm b/guile/starlet/effects.scm
index c14f5a0..b6bfd2a 100644
--- a/guile/starlet/effects.scm
+++ b/guile/starlet/effects.scm
@@ -20,8 +20,10 @@
;;
(define-module (starlet effects)
#:use-module (starlet clock)
+ #:use-module (starlet state)
#:export (flash
- sinewave))
+ sinewave
+ flash-chase))
(define pi (* 2 (acos 0)))
@@ -45,3 +47,25 @@
(+ range-min
(* (/ (- range-max range-min) 2)
(+ 1 (sin (* 2 pi hz (elapsed-time clock)))))))))
+
+
+(define (hump t on-time)
+ (cond
+ ((< t 0.0) 0.0)
+ ((> t on-time) 0.0)
+ (else (* 100 (sin (* pi (/ t on-time)))))))
+
+
+(define* (flash-chase group
+ #:key (repeat-time 2) (offset-time 0.3) (on-time 0.5))
+ (let ((clock (make-clock)))
+ (for-each
+ (lambda (fix idx)
+ (at fix 'intensity
+ (lambda ()
+ (hump (- (euclidean-remainder (elapsed-time clock)
+ repeat-time)
+ (* idx offset-time))
+ on-time))))
+ group
+ (iota (length group)))))