Files
loop/src/Dodge/Data/ComposedItem.hs
T

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