{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Effect where import Control.Lens import Data.Aeson import Data.Aeson.TH data ItEffect = NoItEffect | ItInvEffect { _ieInv :: ItInvEffect --Item -> Creature -> World -> World , _ieCounter :: Int } | ItRewindEffect { _ieInv :: ItInvEffect --Item -> Creature -> World -> World } | ItEffect { _ieInv :: ItInvEffect --Item -> Creature -> World -> World , _ieFloor :: ItFloorEffect --Int -> World -> World , _ieCounter :: Int } | ItInvEffectID { _ieInv :: ItInvEffect --Item -> Creature -> World -> World , _ieMID :: Maybe Int } -- the duplication of ieMID may cause errors... | ItInvEffectDrop { _ieInv :: ItInvEffect --Item -> Creature -> World -> World , _ieDrop :: ItDropEffect --Item -> Creature -> World -> World , _ieMID :: Maybe Int } deriving (Eq, Ord, Show, Read) data ItInvEffect = NoInvEffect | RewindEffect | ResetAttachmentEffect | OnOffHeldEffect ItInvEffect ItInvEffect | CreateHeldLight | CreateShieldWall | RemoveShieldWall deriving (Eq, Ord, Show, Read) data ItFloorEffect = NoFloorEffect deriving (Eq, Ord, Show, Read) data ItDropEffect = NoDropEffect deriving (Eq, Ord, Show, Read) makeLenses ''ItEffect deriveJSON defaultOptions ''ItEffect deriveJSON defaultOptions ''ItInvEffect deriveJSON defaultOptions ''ItFloorEffect deriveJSON defaultOptions ''ItDropEffect