52 lines
1.4 KiB
Haskell
52 lines
1.4 KiB
Haskell
{-# 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 ) |]))
|