{-# 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