;; Crossfade with Zoom Transition
;;
;; Macro for transitioning between two frames with a zoom effect.
;; Active frame zooms out while next frame zooms in.
;;
;; Required context:
;;   - zoom effect must be loaded
;;   - blend effect must be loaded
;;
;; Parameters:
;;   active-frame: current frame
;;   next-frame: frame to transition to
;;   fade-amt: transition progress (0 = all active, 1 = all next)
;;
;; Usage:
;;   (include :path "../templates/crossfade-zoom.sexp")
;;   ...
;;   (crossfade-zoom active-frame next-frame 0.5)

(defmacro crossfade-zoom (active-frame next-frame fade-amt)
  (let [active-zoom (+ 1.0 fade-amt)
        active-zoomed (zoom active-frame :amount active-zoom)
        next-zoom (+ 0.1 (* fade-amt 0.9))
        next-zoomed (zoom next-frame :amount next-zoom)]
    (blend active-zoomed next-zoomed :opacity fade-amt)))
