module Model.Level ( currentLevel , progressiveColor ) where import Time exposing (Time) import Debug import Model.Color exposing (..) levelScoreDuration : Int levelScoreDuration = 20 type alias Level = { color : Color } currentLevel : Int -> Level currentLevel currentScore = levels |> List.drop (currentScore // levelScoreDuration) |> List.head |> Maybe.withDefault lastLevel nextLevel : Int -> Level nextLevel currentScore = currentLevel (currentScore + levelScoreDuration) progressiveColor : Int -> Color progressiveColor currentScore = let reminder = currentScore `rem` levelScoreDuration ratio = progressiveRatio reminder levelScoreDuration currentColor = (currentLevel currentScore).color nextColor = (nextLevel currentScore).color in mergeColors ratio nextColor currentColor progressiveRatio : Int -> Int -> Float progressiveRatio a b = (toFloat a ^ 7) / (toFloat b ^ 7) -- Hue + 35 with gimp each time from the first color levels : List Level levels = [ { color = { red = 156, green = 168, blue = 233 } } , { color = { red = 190, green = 156, blue = 233 } } , { color = { red = 233, green = 156, blue = 232 } } , { color = { red = 233, green = 156, blue = 187 } } , { color = { red = 233, green = 171, blue = 156 } } , { color = { red = 233, green = 215, blue = 156 } } , { color = { red = 206, green = 233, blue = 156 } } , { color = { red = 162, green = 233, blue = 156 } } , { color = { red = 156, green = 233, blue = 196 } } , { color = { red = 156, green = 225, blue = 233 } } ] lastLevel : Level lastLevel = { color = { red = 156, green = 225, blue = 233 } }