{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item ( module Dodge.Data.Item, module Dodge.Data.Item.Effect, module Dodge.Data.Item.Misc, module Dodge.Data.Item.Params, module Dodge.Data.Item.Use, module Dodge.Data.Item.Scope, module Dodge.Data.Item.Combine, module Dodge.Data.Item.Location, ) where import Geometry.Data import qualified Data.IntMap.Strict as IM import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Item.Combine import Dodge.Data.Item.Effect import Dodge.Data.Item.Location import Dodge.Data.Item.Misc import Dodge.Data.Item.Params import Dodge.Data.Item.Scope import Dodge.Data.Item.Use import NewInt data ItID = ItID deriving (Eq, Ord, Show, Read) data Consumables = NoConsumables | AmmoMag { _magLoadStatus :: ReloadStatus , _magParams :: AmmoParams , _magType :: AmmoType } deriving (Eq, Show, Read) data Item = Item { _itUse :: ItemUse , _itUseCondition :: UseCondition , _itUseFocus :: UseFocus , _itConsumables :: Consumables , _itType :: ItemType , _itID :: NewInt ItmInt , _itLocation :: ItemLocation , _itEffect :: ItEffect , _itTargeting :: ItemTargeting , _itAmmoSlots :: IM.IntMap AmmoType , _itParams :: ItemParams } data ItemTargeting = NoItTargeting | ItTargeting { _itTgPos :: Maybe Point2 , _itTgID :: Maybe Int , _itTgActive :: Bool } makeLenses ''ItemTargeting makeLenses ''Consumables makeLenses ''Item deriveJSON defaultOptions ''Consumables deriveJSON defaultOptions ''ItemTargeting deriveJSON defaultOptions ''ItID deriveJSON defaultOptions ''Item