52 lines
1.3 KiB
Haskell
52 lines
1.3 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE DeriveAnyClass #-}
|
|
{-# LANGUAGE StrictData #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Dodge.Data.ComposedItem
|
|
where
|
|
import Control.Lens
|
|
import Data.Aeson
|
|
import Data.Aeson.TH
|
|
import Dodge.Data.Item.Use.Consumption.Ammo
|
|
-- it would be nice not to have to import the following...
|
|
import Dodge.Data.Item
|
|
|
|
data ComposeLinkType
|
|
= AmmoInLink Int AmmoType
|
|
| AmmoModLink
|
|
| AmmoTargetingLink
|
|
| WeaponScopeLink
|
|
| WeaponTargetingLink
|
|
| RemoteScreenLink
|
|
deriving (Eq,Ord,Show,Read)
|
|
|
|
data ItemStructuralFunction
|
|
= WeaponPlatformSF
|
|
| WeaponScopeSF
|
|
| WeaponTargetingSF
|
|
| AmmoMagSF AmmoType
|
|
| RemoteScreenSF
|
|
| UncomposableIsolateSF
|
|
| AmmoModifierSF AmmoType
|
|
| AmmoTargetingSF AmmoType
|
|
deriving (Eq,Ord,Show,Read)
|
|
|
|
type PartiallyComposedItem = (Item, ItemStructuralFunction, LinkTest)
|
|
|
|
data LinkTest = LinkTest
|
|
{ _tryLeftLink :: PartiallyComposedItem -> Maybe LinkUpdate
|
|
, _tryRightLink :: PartiallyComposedItem -> Maybe LinkUpdate
|
|
}
|
|
|
|
data LinkUpdate = LinkUpdate
|
|
{ _luLinkType :: ComposeLinkType
|
|
, _luParentUpdate :: PartiallyComposedItem -> PartiallyComposedItem
|
|
, _luChildUpdate :: PartiallyComposedItem -> PartiallyComposedItem
|
|
}
|
|
|
|
|
|
makeLenses ''LinkTest
|
|
makeLenses ''LinkUpdate
|
|
deriveJSON defaultOptions ''ComposeLinkType
|