{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Effect where import TH.Derive import Data.Store import Data.Binary import Flat import Control.Lens import Data.Aeson import Data.Aeson.TH data ItEffect = ItEffect { _ieInv :: ItInvEffect --Item -> Creature -> World -> World , _ieOnInsert :: ItInvEffect , _ieOnDrop :: ItInvEffect --Item -> Creature -> World -> World , _ieOnHeld :: ItInvEffect , _ieOnStash :: ItInvEffect } deriving (Eq, Ord, Show, Read, Generic, Flat) data ItInvEffect = NoInvEffect | RewindEffect | EffectIfHeld ItInvEffect ItInvEffect | CreateHeldLight | CreateShieldWall | RemoveShieldWall | EffectWhileHeld ItInvEffect deriving (Eq, Ord, Show, Read, Generic, Flat) $($(derive [d| instance Deriving (Store ItInvEffect) |])) data ItFloorEffect = NoFloorEffect | HackItFloorEffect deriving (Eq, Ord, Show, Read, Generic, Flat) data ItDropEffect = NoDropEffect | HackItDropEffect deriving (Eq, Ord, Show, Read, Generic, Flat) makeLenses ''ItEffect deriveJSON defaultOptions ''ItEffect deriveJSON defaultOptions ''ItInvEffect deriveJSON defaultOptions ''ItFloorEffect deriveJSON defaultOptions ''ItDropEffect $($(derive [d| instance Deriving (Store ItEffect ) |])) $($(derive [d| instance Deriving (Store ItDropEffect ) |])) $($(derive [d| instance Deriving (Store ItFloorEffect ) |]))