aboutsummaryrefslogtreecommitdiff
path: root/src/Update/Update.elm
blob: aa31a841d817e663e7a7d3fc0af0ace50ebdff4a (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
module Update.Update
  ( Action(..)
  , updates
  , update
  ) where

import Signal
import Dict
import Time (Time)
import Maybe

import Model.Model (..)
import Model.Timer (..)
import Model.Id (..)
import Model.IdGenerator (..)

import Update.UpdateTimer (..)

type Action =
  NoOp
  | AddNewTimer
  | DeltaTime Time
  | UpdateTimer Id TimerAction
  | RemoveTimer Id

updates : Signal.Channel Action
updates = Signal.channel NoOp

update : Action -> Model -> Model
update action model =
  case action of
    NoOp -> model
    AddNewTimer ->
      let (id, newTimerIdGenerator) = getId model.timerIdGenerator
          timerName = "Timer " ++ (toString id)
      in  { model
          | timers <- Dict.insert id (initialTimer model.currentTime timerName) model.timers
          , timerIdGenerator <- newTimerIdGenerator
          }
    DeltaTime delta ->
      { model
      | currentTime <- model.currentTime + delta
      , timers <- substractTimersTime delta model.timers
      }
    UpdateTimer id action ->
      { model | timers <- Dict.update id (Maybe.map (updateTimer action)) model.timers }
    RemoveTimer id ->
      { model | timers <- Dict.remove id model.timers }