packages feed

boomslang-0.0.1: src/Game/Level.hs

module Game.Level
  ( -- * Types
    Level(..)
    -- * Utilities
  , number
  , next
  , numDots
  , numDotsRequired
  )
  where

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

data Level
  = Level1 | Level2 | Level3 | Level4  | Level5  | Level6
  | Level7 | Level8 | Level9 | Level10 | Level11 | Level12
  deriving (Bounded, Enum, Eq, Show)

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

number :: Level -> Integer
number = succ . fromIntegral . fromEnum

next :: Level -> Maybe Level
next c =
    if c == maxLevel
      then Nothing
      else (Just . toEnum . succ . fromEnum) c
  where
    maxLevel = maxBound :: Level

numDots :: Level -> Integer
numDots = (5 *) . succ . fromIntegral . fromEnum

numDotsRequired :: Level -> Integer
numDotsRequired level =
    case level of
      Level1  -> 1
      Level2  -> 2
      Level3  -> 3
      Level4  -> 5
      Level5  -> 7
      Level6  -> 10
      Level7  -> 15
      Level8  -> 21
      Level9  -> 27
      Level10 -> 33
      Level11 -> 44
      Level12 -> 55