Allow for more complex item composition

This commit is contained in:
2024-09-26 00:00:46 +01:00
parent 61f07be08b
commit 772886c8c6
8 changed files with 285 additions and 191 deletions
+21 -2
View File
@@ -9,6 +9,8 @@ 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
@@ -21,10 +23,11 @@ data ComposeLinkType
data ItemStructuralFunction
= WeaponPlatformSF
| WeaponScopeSF
| WeaponBarrelAttachmentSF
| AmmoMagazineSF
| WeaponTargetingSF
| AmmoMagSF
| RemoteScreenSF
| UncomposableIsolateSF
| AmmoModifierSF AmmoType
deriving (Eq,Ord,Show,Read)
data ComposedItem = WeaponCI
@@ -36,6 +39,22 @@ data ComposedItem = WeaponCI
| RocketRemoteScreenCI
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
makeLenses ''ComposedItem
deriveJSON defaultOptions ''ComposedItem
deriveJSON defaultOptions ''ComposeLinkType