{-# LANGUAGE DeriveGeneric #-}
module BattlePlace.Skill.Glicko.Types
( Skill(..)
, ratingFromSkill
) where
import qualified Data.Aeson as J
import Data.Default
import GHC.Generics(Generic)
import BattlePlace.Rating
import BattlePlace.Util
data Skill = Skill
{ skill_rating :: {-# UNPACK #-} !Double
, skill_deviation :: {-# UNPACK #-} !Double
, skill_volatility :: {-# UNPACK #-} !Double
} deriving Generic
instance Default (Skill) where
def = Skill
{ skill_rating = 1500
, skill_deviation = 350
, skill_volatility = 0.06
}
instance J.FromJSON (Skill) where
parseJSON = J.genericParseJSON jsonOptions
instance J.ToJSON (Skill) where
toJSON = J.genericToJSON jsonOptions
toEncoding = J.genericToEncoding jsonOptions
ratingFromSkill :: Skill -> Rating
ratingFromSkill Skill
{ skill_rating = rating
, skill_deviation = deviation
} = Rating $ rating - deviation * 2