packages feed

roguestar-engine-0.2.1: src/StatsData.hs

module StatsData
    (Stats(..),
     StatisticsBlock(..),
     Statistic(..),
     stats,
     getStatistic,
     setStatistic)
    where

class StatisticsBlock a where
    str :: a -> Integer
    dex :: a -> Integer
    con :: a -> Integer
    int :: a -> Integer
    per :: a -> Integer
    cha :: a -> Integer
    mind :: a -> Integer

-- |
-- Represents the seven roguestar creature statistics:
-- Strength (str)
-- Dexterity (dex)
-- Constitution (con)
-- Intelligence (int)
-- Perception (per)
-- Charisma (cha)
-- Mindfulness (min)
--

data Stats = Stats {strength, dexterity, constitution, intelligence, perception, charisma, mindfulness :: Integer} deriving (Show, Read)

instance StatisticsBlock Stats where
    str = strength
    dex = dexterity
    con = constitution
    int = intelligence
    per = perception
    cha = charisma
    mind = mindfulness
    
data Statistic = Strength
	       | Dexterity
	       | Constitution
	       | Intelligence
	       | Perception
	       | Charisma
	       | Mindfulness
	       deriving (Eq,Read,Show)

getStatistic :: StatisticsBlock a => Statistic -> a -> Integer
getStatistic Strength = str
getStatistic Dexterity = dex
getStatistic Constitution = con
getStatistic Intelligence = int
getStatistic Perception = per
getStatistic Charisma = cha
getStatistic Mindfulness = mind

setStatistic :: Statistic -> Integer -> Stats -> Stats
setStatistic Strength = setStr
setStatistic Dexterity = setDex
setStatistic Constitution = setCon
setStatistic Intelligence = setInt
setStatistic Perception = setPer
setStatistic Charisma = setCha
setStatistic Mindfulness = setMind

-- |
-- Used to generate a Stats object with all the same stats (i.e. stats 1 => Stats 1 1 1 1 1 1 1)
--

stats :: Integer -> Stats
stats x = (Stats {strength=x, dexterity=x, constitution=x, intelligence=x, perception=x, charisma=x, mindfulness=x})

-- |
-- Functions to modify a single stat in a Stats block.
--
setStr :: Integer -> Stats -> Stats
setStr x st = st { strength = x }

setDex :: Integer -> Stats -> Stats
setDex x st = st { dexterity = x }

setCon :: Integer -> Stats -> Stats
setCon x st = st { constitution = x }

setInt :: Integer -> Stats -> Stats
setInt x st = st { intelligence = x }

setPer :: Integer -> Stats -> Stats
setPer x st = st { perception = x }

setCha :: Integer -> Stats -> Stats
setCha x st = st { charisma = x }

setMind :: Integer -> Stats -> Stats
setMind x st = st { mindfulness = x }