aboutsummaryrefslogtreecommitdiff
path: root/src/Main.elm
blob: fda7c01ba19315bd4bd95205086ca2ffd204bcb4 (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
module Main
  ( main
  ) where

import Signal
import Html (Html)
import Time (..)
import Mouse
import Json.Encode (Value)
import Keyboard
import Char
import Dict
import List
import Keyboard (KeyCode)

import Model.Model (..)
import Model.Position (..)
import Model.TimerState (..)
import Model.Id (..)
import Update.Update (..)
import View.View (view)

main : Signal Html
main = Signal.map view model

model : Signal Model
model = Signal.foldp update (initialModel initialTime) input

input : Signal Action
input =
  Signal.mergeMany
    [ Signal.subscribe updates
    , Signal.map DeltaTime (fps 30)
    , Signal.map (\_ -> ClickAway) clickAway
    , Signal.map KeyPressed keyPress
    ]

port clickPosition : Signal Value
port clickPosition =
  Signal.sampleOn
    Mouse.clicks
    (Signal.map positionEncoder Mouse.position)

port ringingTimers : Signal Bool
port ringingTimers =
  Signal.map
    (\model ->
      model.timers
        |> Dict.toList
        |> List.map snd
        |> List.any (\timer -> timer.state == Ringing)
    )
    model
      |> Signal.dropRepeats

port keyPress : Signal KeyCode

port clickAway : Signal ()

port initialTime : Time