;; Strobe effect - holds frames for choppy look
(require-primitives "core")

(define-effect strobe
  :params (
    (frame_rate :type int :default 12 :range [1 60])
  )
  (let* ((held (state-get 'held nil))
         (held-until (state-get 'held-until 0))
         (frame-duration (/ 1 frame_rate)))
    (if (or (core:is-nil held) (>= t held-until))
        (begin
          (state-set 'held (copy frame))
          (state-set 'held-until (+ t frame-duration))
          frame)
        held)))
