aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoris Guyonvarch2015-03-08 13:26:52 +0100
committerJoris Guyonvarch2015-03-08 13:29:01 +0100
commit97e494a7c5a105bba6a48f5025e71a376fc8673d (patch)
tree9cd83b9fedfa4787e6237fadce4dfd2d43faa0d6
parent6c1f5e10631a3f66f4c85a45b6f28ffd366105c5 (diff)
downloadcatchvoid-97e494a7c5a105bba6a48f5025e71a376fc8673d.tar.gz
catchvoid-97e494a7c5a105bba6a48f5025e71a376fc8673d.tar.bz2
catchvoid-97e494a7c5a105bba6a48f5025e71a376fc8673d.zip
Save round durations
-rw-r--r--src/Model/Game.elm5
-rw-r--r--src/Model/Round.elm19
-rw-r--r--src/Update/Update.elm3
-rw-r--r--src/View/Page.elm21
-rw-r--r--src/View/Time.elm10
5 files changed, 47 insertions, 11 deletions
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"