From 97e494a7c5a105bba6a48f5025e71a376fc8673d Mon Sep 17 00:00:00 2001 From: Joris Guyonvarch Date: Sun, 8 Mar 2015 13:26:52 +0100 Subject: Save round durations --- src/Model/Game.elm | 5 +++-- src/Model/Round.elm | 19 +++++++++++++++++++ src/Update/Update.elm | 3 ++- src/View/Page.elm | 21 +++++++++++++-------- src/View/Time.elm | 10 ++++++++++ 5 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 src/Model/Round.elm create mode 100644 src/View/Time.elm diff --git a/src/Model/Game.elm b/src/Model/Game.elm index 705841d..6a9020f 100644 --- a/src/Model/Game.elm +++ b/src/Model/Game.elm @@ -10,6 +10,7 @@ import Model.Player (..) import Model.Cloud (..) import Model.Vec2 (Vec2) import Model.Config (..) +import Model.Round (Round) type alias Game = { time : Float @@ -17,7 +18,7 @@ type alias Game = , currentScore : Int , player : Player , cloud : Cloud - , scores : List Int + , rounds : List Round , seed : Seed } @@ -28,6 +29,6 @@ initialGame seed = , currentScore = 0 , player = initPlayer , cloud = initCloud - , scores = [] + , rounds = [] , seed = seed } diff --git a/src/Model/Round.elm b/src/Model/Round.elm new file mode 100644 index 0000000..d5210d5 --- /dev/null +++ b/src/Model/Round.elm @@ -0,0 +1,19 @@ +module Model.Round + ( Round + , roundOrder + ) where + +import Time (Time) + +type alias Round = + { duration : Time + , score : Int + } + +roundOrder : Round -> Round -> Order +roundOrder round1 round2 = + if round1.score == round2.score + then + compare round2.duration round1.duration + else + compare round1.score round2.score diff --git a/src/Update/Update.elm b/src/Update/Update.elm index ef85670..7cf4dee 100644 --- a/src/Update/Update.elm +++ b/src/Update/Update.elm @@ -13,6 +13,7 @@ import Model.Vec2 (..) import Model.Config (otherConfig) import Model.Cloud (..) import Model.Game (..) +import Model.Round (Round) import Utils.Geometry (..) import Utils.Physics (getNewPosAndSpeed) @@ -30,7 +31,7 @@ update input game = | time <- 0 , currentScore <- 0 , cloud <- initCloud - , scores <- game.currentScore :: game.scores + , rounds <- (Round game.time game.currentScore) :: game.rounds } else let newTime = game.time + input.delta diff --git a/src/View/Page.elm b/src/View/Page.elm index 4dd54b5..3aa29a2 100644 --- a/src/View/Page.elm +++ b/src/View/Page.elm @@ -10,8 +10,10 @@ import Html.Attributes as A import Json.Encode (string) import Model.Game (Game) +import Model.Round (roundOrder) import View.Game (gameView) +import View.Time (timeView) pageView : Game -> Html pageView game = @@ -27,14 +29,17 @@ pageView game = , p [] [ text "Use the arrow keys to move and 'e' to change your color." ] - , ( if List.isEmpty game.scores - then - div [ class "bestScore" ] [] - else - let bestScore = List.maximum game.scores - in p - [ class "bestScore isDefined" ] - [ text <| "Best score: " ++ (toString bestScore) ] + , ( let orderedRounds = + game.rounds + |> List.sortWith roundOrder + |> List.reverse + in case orderedRounds of + [] -> + div [ class "bestScore" ] [] + bestRound :: _ -> + p + [ class "bestScore isDefined" ] + [ text <| "Best score: " ++ (toString bestRound.score) ++ " hits within " ++ (timeView bestRound.duration) ] ) , a [ href "https://github.com/guyonvarch/catchvoid" ] diff --git a/src/View/Time.elm b/src/View/Time.elm new file mode 100644 index 0000000..363a0b6 --- /dev/null +++ b/src/View/Time.elm @@ -0,0 +1,10 @@ +module View.Time + ( timeView + ) where + +import Time (Time) + +timeView : Time -> String +timeView time = + let s = truncate (time / 1000) + in (toString s) ++ " seconds" -- cgit v1.2.3