packages feed

roguestar-engine-0.2.1: src/Attribute.hs

module Attribute
    (generateAttributes)
    where

import AttributeData
import DB
import Dice
import Data.Maybe
import Data.Ratio

-- |
-- Randomly generate 1 attribute from an attribute generator.
--
generate1Attribute :: AttributeGenerator a -> DB (Maybe a)
generate1Attribute (AttributeAlways someAttrib) = do return (Just someAttrib)
generate1Attribute (AttributeSometimes someAttrib chance maybeNextGen) = 
     do good <- roll $ map (<= numerator chance) [1..denominator chance]
        if good
           then return (Just someAttrib)
           else case maybeNextGen of
                    Just nextGen -> generate1Attribute nextGen
                    Nothing -> return Nothing

-- |
-- Randomly generate attributes from a list of AttributeGenerators.
--
generateAttributes :: [AttributeGenerator a] -> DB [a]
generateAttributes attribGens = 
    do maybeAttribs <- mapM generate1Attribute attribGens
       return $ map fromJust $ filter isJust maybeAttribs