time acceleration
This commit is contained in:
parent
8e8e2bcfb6
commit
9d4ed240df
1 changed files with 70 additions and 8 deletions
78
Main.elm
78
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"]
|
||||
|
|
Loading…
Reference in a new issue