139 lines
3.5 KiB
Haskell
139 lines
3.5 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
|
|
module DND.Sheet.Content
|
|
( Character (..)
|
|
, Preamble (..)
|
|
, Trivia (..)
|
|
, Skill (..)
|
|
, Stat (..)
|
|
, ScoreMod(..)
|
|
, Spell(..)
|
|
, SpellComponent(..)
|
|
, Feature(..)
|
|
, FeatInfo(..)
|
|
, fiets
|
|
) where
|
|
|
|
import Data.Aeson ( FromJSON, ToJSON )
|
|
import GHC.Generics ( Generic )
|
|
|
|
instance FromJSON Character
|
|
instance ToJSON Character
|
|
|
|
instance FromJSON Preamble
|
|
instance ToJSON Preamble
|
|
|
|
instance FromJSON Trivia
|
|
instance ToJSON Trivia
|
|
|
|
instance FromJSON Stat
|
|
instance ToJSON Stat
|
|
|
|
instance FromJSON Skill
|
|
instance ToJSON Skill
|
|
|
|
instance FromJSON ScoreMod
|
|
instance ToJSON ScoreMod
|
|
|
|
instance FromJSON Spell
|
|
instance ToJSON Spell
|
|
|
|
instance FromJSON Feature
|
|
instance ToJSON Feature
|
|
|
|
instance FromJSON FeatInfo
|
|
instance ToJSON FeatInfo
|
|
|
|
instance FromJSON SpellComponent
|
|
instance ToJSON SpellComponent
|
|
|
|
data ScoreMod = None
|
|
| Proficient
|
|
| Expertise
|
|
deriving (Show, Eq, Ord, Generic, Enum)
|
|
|
|
data Character = Character
|
|
{ preamble :: Preamble
|
|
, trivia :: Trivia
|
|
, stats :: [Stat]
|
|
, skills :: [Skill]
|
|
, spells :: Maybe [Spell]
|
|
, feats :: Maybe [Feature]
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data Preamble = Preamble
|
|
{ charLevel :: Int
|
|
, charName :: String
|
|
, charRace :: String
|
|
, charClass :: String
|
|
, jackOfAllTrades :: Bool
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data Trivia = Trivia
|
|
{ background :: String
|
|
, personalityTrait :: String
|
|
, ideals :: String
|
|
, bonds :: String
|
|
, flaws :: String
|
|
, quirk :: String
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data Skill = Skill
|
|
{ skillName :: String
|
|
, skillMod :: ScoreMod
|
|
, relatedStat :: String
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
fiets = Skill { skillName = "Stuff"
|
|
, skillMod = None
|
|
, relatedStat = "Strength"
|
|
}
|
|
|
|
data Stat = Stat
|
|
{ statName :: String
|
|
, score :: Int
|
|
, proficient :: Bool
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data Spell = Spell
|
|
{ spellName :: String
|
|
, spellLevel :: Int
|
|
, castingTime :: String
|
|
, range :: Int
|
|
, components :: [SpellComponent]
|
|
, duration :: String
|
|
, attackSave :: String
|
|
, damageEffect :: String
|
|
, description :: String
|
|
, school :: String
|
|
, atHighLevel :: String
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data SpellComponent = Verbal
|
|
| Somatic
|
|
| Material
|
|
deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data FeatInfo = FeatInfo { featName :: String
|
|
, featDescription :: String
|
|
} deriving ( Show, Eq, Ord, Generic)
|
|
|
|
data Feature = StatIncrease
|
|
{ featInfo :: FeatInfo
|
|
, increase :: [Stat] }
|
|
| SetProficiency
|
|
{ featInfo :: FeatInfo
|
|
, changeModState :: [ScoreMod]
|
|
}
|
|
| SetExpertise
|
|
{ featInfo :: FeatInfo
|
|
, changeModState :: [ScoreMod]
|
|
}
|
|
| AddSpell
|
|
{ featInfo :: FeatInfo
|
|
, addSpell :: [Spell]
|
|
}
|
|
| Roleplay
|
|
{ featInfo :: FeatInfo }
|
|
deriving ( Show, Eq, Ord, Generic)
|