From 0c14567501831d5e772edb0d778f46aed4ba8cff Mon Sep 17 00:00:00 2001 From: s-ol Date: Sun, 12 Apr 2020 19:36:34 +0200 Subject: time/every: allow specifying event e.g. (print (every 0.5 "hello")) (print (every 0.5 (switch (tick 1) "hello" "world"))) --- lib/time.moon | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/time.moon b/lib/time.moon index 5380657..344b5fa 100644 --- a/lib/time.moon +++ b/lib/time.moon @@ -187,24 +187,28 @@ tick = ValueStream.meta every = ValueStream.meta meta: name: 'every' - description: "Emits a bang once every `period` seconds. + summary: "Emit events regularly." + examples: { '(every [clock] period [evt])' } + description: "Emits `evt` as an event once every `period` seconds. - `clock` should be a `time/clock` event stream. This argument can be omitted and the stream be passed as a dynamic definition in `*clock*` instead. - `period` should be a num-value. -- the return type will be a stream of bang-events." +- `evt` can be a value of any type. It defaults to `bang`. +- the return type will be an event stream with the same type as `evt`." value: class extends Op new: (...) => super ... @state or= 0 - @out or= EventStream 'bang' - pattern = -evt.clock + val.num + pattern = -evt.clock + val.num + -val! setup: (inputs, scope) => - { clock, period } = pattern\match inputs + { clock, period, evt } = pattern\match inputs super clock: Input.hot clock or scope\get '*clock*' period: Input.cold period + evt: Input.cold evt or ValueStream 'bang', true + @out = EventStream @inputs.evt\type! tick: => for tick in *@inputs.clock! @@ -212,7 +216,7 @@ every = ValueStream.meta while @state >= 1 @state -= 1 - @out\add true + @out\add @inputs.evt! sequence = ValueStream.meta meta: -- cgit v1.2.3