diff options
Diffstat (limited to 'src/Xanthous/Entities/Raws.hs')
-rw-r--r-- | src/Xanthous/Entities/Raws.hs | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/Xanthous/Entities/Raws.hs b/src/Xanthous/Entities/Raws.hs index 4a4cba8c9a19..e1bb429a0f0d 100644 --- a/src/Xanthous/Entities/Raws.hs +++ b/src/Xanthous/Entities/Raws.hs @@ -1,17 +1,23 @@ {-# LANGUAGE TemplateHaskell #-} - +-------------------------------------------------------------------------------- module Xanthous.Entities.Raws ( raws , raw + , RawType(..) + , rawsWithType + , entityFromRaw ) where - +-------------------------------------------------------------------------------- import Data.FileEmbed import qualified Data.Yaml as Yaml import Xanthous.Prelude import System.FilePath.Posix - +-------------------------------------------------------------------------------- import Xanthous.Entities.RawTypes - +import Xanthous.Entities +import qualified Xanthous.Entities.Creature as Creature +import qualified Xanthous.Entities.Item as Item +-------------------------------------------------------------------------------- rawRaws :: [(FilePath, ByteString)] rawRaws = $(embedDir "src/Xanthous/Entities/Raws") @@ -26,3 +32,27 @@ raws raw :: Text -> Maybe EntityRaw raw n = raws ^. at n + +class RawType (a :: Type) where + _RawType :: Prism' EntityRaw a + +instance RawType CreatureType where + _RawType = prism' Creature $ \case + Creature c -> Just c + _ -> Nothing + +instance RawType ItemType where + _RawType = prism' Item $ \case + Item i -> Just i + _ -> Nothing + +rawsWithType :: forall a. RawType a => HashMap Text a +rawsWithType = mapFromList . itoListOf (ifolded . _RawType) $ raws + +-------------------------------------------------------------------------------- + +entityFromRaw :: EntityRaw -> SomeEntity +entityFromRaw (Creature creatureType) + = SomeEntity $ Creature.newWithType creatureType +entityFromRaw (Item itemType) + = SomeEntity $ Item.newWithType itemType |