diff --git a/Main.elm b/Main.elm index bca3fc9..01b26a3 100644 --- a/Main.elm +++ b/Main.elm @@ -13,31 +13,56 @@ main = App.program { init = init -- MODEL +-- type alias NatResource = { name : String +-- , growthBySec : Float +-- , minBound : Float +-- , maxBound : Float +-- , value : Float +-- } +-- +-- humanity : NatResource +-- humanity = { name = "sane people" +-- , minBound = 0 +-- , maxBound = 20000000000 +-- , value = 7000000000 +-- } +-- flu = { resourceName = "sane people" +-- , growthBySec = -0.00001 +-- } +-- type alias Model = { money : Float , mbs : Float , t : Time + , timeSpeed : Int + , relTime : Time } init : (Model,Cmd Msg) init = ({ money = 0 , mbs = 1 + , relTime = 0 , t = 0 + , timeSpeed = 1 }, Cmd.none) -- UPDATE -type Msg = Gain Int | Tick Time | Reset +type Msg = Gain Int | Tick Time | Reset | ChangeTimeSpeed Int update : Msg -> Model -> (Model, Cmd Msg) update msg model = let newmodel = case msg of Gain i -> { model | mbs = max 0 (model.mbs + (toFloat i)) } - Tick newTime -> { model | - money = model.money + - (if model.t > 0 - then model.mbs * (newTime - model.t) / 1000 - else 0) - , t = newTime } + ChangeTimeSpeed i -> { model | timeSpeed = max 0 i } + Tick newTime -> + { model | money = model.money + + (if model.t > 0 + then model.mbs * (toFloat model.timeSpeed) * (newTime - model.t) / 1000 + else 0) + , t = newTime + , relTime = (if model.t > 0 + then model.relTime + (toFloat model.timeSpeed) * (newTime - model.t) + else 0)} Reset -> { model | money = 0 } in (newmodel,Cmd.none) @@ -57,10 +82,47 @@ wdgStyle = style [ ("margin","1em auto") , ("width", "20em") , ("text-align", "center")] +oneDay : Int +oneDay = 24 * oneHour +oneHour : Int +oneHour = 60 * oneMinute +oneMinute : Int +oneMinute = 60 * oneSecond +oneSecond : Int +oneSecond = 1000 + +addZero : Int -> String +addZero i = if i < 10 then "0" else "" + +displayTime : Int -> String +displayTime t = + let days = t // oneDay + hours = (t % oneDay) // oneHour + minutes = (t % oneHour) // oneMinute + seconds = (t % oneMinute) // oneSecond + in toString days ++ " " + ++ (addZero hours) ++ toString hours ++ ":" + ++ (addZero minutes) ++ toString minutes ++ ":" + ++ (addZero seconds) ++ toString seconds + + view : Model -> Html Msg view model = div [ wdgStyle ] [ div [ style [("color","#888") - , ("font-size","12px")]] [text ("dbs: " ++ (toString model.mbs))] + , ("font-size","12px")]] + [text ("dbs: " ++ (toString model.mbs))] + , div [ style [("color","#888") + , ("font-size","12px")]] + [text ("time: " ++ (displayTime <| truncate <| model.relTime))] + + , div [ style [("color","#888") + , ("font-size","12px") + , ("display","inline")]] + [text "time speed: "] + , button [ onClick (ChangeTimeSpeed 1) ] [text "x1"] + , button [ onClick (ChangeTimeSpeed 60) ] [text "1min/s"] + , button [ onClick (ChangeTimeSpeed 3600) ] [text "1h/s"] + , button [ onClick (ChangeTimeSpeed (24*3600)) ] [text "1d/s"] , node "hr" [] [] , button [ onClick (Gain -1) ] [text "-1/s"] , button [ onClick (Gain 1) ] [text "+1/s"]