aboutsummaryrefslogtreecommitdiff
path: root/lib/elements/timer.ml
blob: 60872db8fabc947912221e762c713fc9137b6d87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
open Note_brr_kit

type t = {
    mutable id : Brr.G.timer_id
  ; send : float Note.E.send
  ; mutable counter : Time.counter
}

let create : unit -> t * Note_brr_kit.Time.span Note.E.t =
 fun () ->
  let event, send = Note.E.create () and counter = Time.counter () in
  ({ id = -1; send; counter }, event)

let stop : t -> unit = fun { id; _ } -> Brr.G.stop_timer id

let start : t -> float -> unit =
 fun t d ->
  let { id; send; _ } = t in
  t.counter <- Time.counter ();

  Brr.G.stop_timer id;
  let timer_id =
    Brr.G.set_interval
      ~ms:(int_of_float @@ (d *. 1000.))
      (fun () ->
        let span = Time.counter_value t.counter in
        send span)
  in
  t.id <- timer_id

let delay : t -> float = fun t -> Time.counter_value t.counter