From 4710e5ac30c44ca8b48a0b2b60ea74b1573b084b Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 15 Nov 2015 19:20:42 +0100 Subject: Add levels which only change the board color every 20 points --- src/Model/Color.elm | 22 ++++++++++++++++++ src/Model/Level.elm | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Model/Point.elm | 4 ++++ 3 files changed, 93 insertions(+) create mode 100644 src/Model/Color.elm create mode 100644 src/Model/Level.elm (limited to 'src/Model') diff --git a/src/Model/Color.elm b/src/Model/Color.elm new file mode 100644 index 0000000..8452efa --- /dev/null +++ b/src/Model/Color.elm @@ -0,0 +1,22 @@ +module Model.Color + ( Color + , htmlOutput + , mergeColors + ) where + +type alias Color = + { red : Int + , green : Int + , blue : Int + } + +htmlOutput : Color -> String +htmlOutput color = "rgb(" ++ (toString color.red) ++ ", " ++ (toString color.green) ++ ", " ++ (toString color.blue) ++ ")" + +mergeColors : Float -> Color -> Color -> Color +mergeColors ratio c1 c2 = + let mergePart x y = truncate (ratio * (toFloat x) + (1 - ratio) * (toFloat y)) + in { red = mergePart c1.red c2.red + , green = mergePart c1.green c2.green + , blue = mergePart c1.blue c2.blue + } diff --git a/src/Model/Level.elm b/src/Model/Level.elm new file mode 100644 index 0000000..8b28ad3 --- /dev/null +++ b/src/Model/Level.elm @@ -0,0 +1,67 @@ +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 } + } diff --git a/src/Model/Point.elm b/src/Model/Point.elm index a465e40..c0daeaf 100644 --- a/src/Model/Point.elm +++ b/src/Model/Point.elm @@ -4,6 +4,7 @@ module Model.Point , pointSize , pointSpeed , pointSpawnDist + , pointAwayDist ) where import Model.Vec2 exposing (..) @@ -28,3 +29,6 @@ pointSpeed dt = dt / 20 pointSpawnDist : Vec2 -> Float pointSpawnDist boardSize = (boardDiagonal boardSize) * 2.5 / 5 + pointSize + +pointAwayDist : Vec2 -> Float +pointAwayDist boardSize = (boardDiagonal boardSize) * 3 / 5 + pointSize -- cgit v1.2.3