blob: 4fab1e939a9f7a2f2e1482b45c5027c0b4a25047 (
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
|
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 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 Keyboard.lastPressed
]
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 clickAway : Signal ()
port initialTime : Time
|