module Game.LambdaHack.Content.ActorKind
( ActorKind(..), avalidate
) where
import qualified Data.List as L
import qualified Data.Ord as Ord
import Game.LambdaHack.Ability
import Game.LambdaHack.Color
import qualified Game.LambdaHack.Random as Random
import Game.LambdaHack.Misc
import Game.LambdaHack.Time
data ActorKind = ActorKind
{ asymbol :: !Char
, aname :: !String
, afreq :: !Freqs
, acolor :: !Color
, aspeed :: !Speed
, ahp :: !Random.RollDice
, asight :: !Bool
, asmell :: !Bool
, aiq :: !Int
, aregen :: !Int
, acanDo :: ![Ability]
}
deriving Show
avalidate :: [ActorKind] -> [ActorKind]
avalidate l =
let cmp = Ord.comparing (\ ka -> (asymbol ka, acolor ka))
eq ka1 ka2 = cmp ka1 ka2 == Ord.EQ
sorted = L.sortBy cmp l
nubbed = L.nubBy eq sorted
in L.deleteFirstsBy eq sorted nubbed