-- | A game requires the engine provided by the library, perhaps customized, -- and game content, defined completely afresh for the particular game. -- The general type of the content is @ContentDef@ and it has instances -- for all content kinds, such as items kinds -- ("Game.LambdaHack.Content.ItemKind"). -- -- The possible kinds are fixed in the library and all defined within -- the library source code directory. On the other hand, game content, -- that is the values whose types are @ContentDef@ instances, -- are defined in the directory hosting the particular game definition. module Game.LambdaHack.Common.ContentDef ( ContentDef(..), contentFromList ) where import Prelude () import Game.LambdaHack.Common.Prelude import qualified Data.Vector as V import Game.LambdaHack.Common.Misc -- | The general type of a particular game content, e.g., item kinds. data ContentDef a = ContentDef { getSymbol :: a -> Char -- ^ symbol, e.g., to print on the map , getName :: a -> Text -- ^ name, e.g., to show to the player , getFreq :: a -> Freqs a -- ^ frequency within groups , validateSingle :: a -> [Text] -- ^ validate a content item and list all offences , validateAll :: [a] -> [Text] -- ^ validate the whole defined content of this type and list all offences , content :: V.Vector a -- ^ all content of this type } contentFromList :: [a] -> V.Vector a contentFromList = V.fromList