packages feed

roguestar-engine-0.2.1: src/AttributeData.hs

module AttributeData
    (AttributeGenerator(..),
    percentAttribute,
    multipleAttribute)
    where

import Data.List

-- |
-- Used to randomly generate attributes for an entity.
-- AttributeAlways is a generator that always creates the specified attribute.
-- (AttributeSometimes attrib x $ otherwise) is a generator that generates
-- the the attribute "attrib" x-fraction of the time, and invokes the attribute
-- generator "otherwise" otherwise.
--

data AttributeGenerator a = AttributeAlways a
                          | AttributeSometimes a Rational (Maybe (AttributeGenerator a))
                            deriving (Show, Read)

-- |
-- Grants the entity the specified attribute x percent of the time, otherwise nothing
--
percentAttribute :: a -> Rational -> AttributeGenerator a
percentAttribute attr x = AttributeSometimes attr x $ Nothing

-- |
-- Grants the entity the specified attribute between minimum and maximum instances of the
-- attribute, on average the average of the two (as a binomial distribution).
--
multipleAttribute :: a -> (Integer,Integer) -> [AttributeGenerator a]
multipleAttribute attr (mini,maxi) | mini >= 0 && maxi >= mini = 
    (genericReplicate mini $ AttributeAlways attr) ++ (genericReplicate (maxi-mini) $ percentAttribute attr 50)
multipleAttribute _ _ = error "multipleAttribute: maximum < minimum badness"