Auto create tree structure for held item ammo, add derive instances

This commit is contained in:
2024-09-13 17:34:29 +01:00
parent fb104a1719
commit 338d9e8422
10 changed files with 72 additions and 49 deletions
+5 -3
View File
@@ -8,14 +8,16 @@ module Dodge.Data.ComposedItem
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Dodge.Data.Item.Use.Consumption.Ammo
data ComposeLinkType = AmmoInLink
data ComposeLinkType
= AmmoInLink AmmoType
| AmmoModLink
data ComposedItem = WeaponCI
| WeaponScopeCI
| AmmoModifierCI
| BulletAmmoCI
| AmmoModifierCI AmmoType
| AmmoCI AmmoType
| UncomposableCI
deriving (Eq,Ord,Show,Read)
+9 -4
View File
@@ -60,7 +60,7 @@ data ItemUse
, _amagParams :: AmmoParams
, _amagType :: AmmoType
}
--deriving (Eq, Show, Read) --Generic, Flat)
deriving (Eq, Show, Read) --Generic, Flat)
data HeldParams
= DefaultHeldParams
@@ -73,11 +73,13 @@ data HeldParams
, _torqueAfter :: Float
, _randomOffset :: Float
}
deriving (Eq, Show, Read) --Generic, Flat)
data AttachParams
= ScrollAttachParams {_scrollAttachParams :: ScrollAttachParams}
| TargetAttachParams
| NoAttachParams
deriving (Eq, Show, Read) --Generic, Flat)
data AmmoParams = BulletParams {_ampBullet :: Bullet}
| ProjectileParams
@@ -86,6 +88,7 @@ data AmmoParams = BulletParams {_ampBullet :: Bullet}
, _ampPjCreation :: ProjectileCreate
}
| GasParams {_ampCreateGas :: GasCreate}
deriving (Eq, Show, Read) --Generic, Flat)
data ScrollAttachParams
= ZoomScrollParams
@@ -98,6 +101,7 @@ data ScrollAttachParams
}
| CharScrollParams
{ _scrollChar :: Seq.Seq Char}
deriving (Eq, Show, Read) --Generic, Flat)
data AimParams = AimParams
{ _aimWeight :: Int
@@ -108,13 +112,14 @@ data AimParams = AimParams
, _aimHandlePos :: V2 Float
, _aimMuzzles :: [Muzzle]
}
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data Muzzle = Muzzle
{ _mzPos :: V2 Float
, _mzRot :: Float
, _mzInaccuracy :: Float
}
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data AimStance
@@ -123,7 +128,7 @@ data AimStance
| TwoHandFlat
| OneHand
-- | LeaveHolstered
deriving (Eq)
deriving (Eq, Ord, Show, Read) --Generic, Flat)
--deriving (Eq, Show, Ord, Enum, Read) --Generic, Flat)
data ItZoom = ItZoom
@@ -131,7 +136,7 @@ data ItZoom = ItZoom
, _izMin :: Float
, _izFac :: Float
}
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
deriving (Eq, Ord, Show, Read) --Generic, Flat)
makeLenses ''ItemUse
makeLenses ''AimParams
@@ -37,6 +37,7 @@ data ProjectileUpdate
data AmmoType
= ProjectileAmmo
| BulletAmmo
| BeltBulletAmmo
| ElectricalAmmo
| DroneAmmo
| GasAmmo
+2 -2
View File
@@ -23,13 +23,13 @@ data EquipEffect = EquipEffect
, _eeViewDist :: Maybe Float
, _eeAttachPos :: Point3
}
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data EquipParams
= NoEquipParams
| EquipID {_eparamID :: Int}
| EquipCounter {_eparamInt :: Int}
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
deriving (Eq, Ord, Show, Read) --Generic, Flat)
makeLenses ''EquipEffect
makeLenses ''EquipParams
+1
View File
@@ -39,6 +39,7 @@ beltMag =
tinMag & itType . iyBase . ibtAmmoMag .~ BELTMAG
& itUse . amagLoadStatus . iaLoaded .~ 10000
& itUse . amagLoadStatus . iaMax .~ 20000
& itUse . amagType .~ BeltBulletAmmo
shellMag :: Item
shellMag =
+17 -7
View File
@@ -28,16 +28,26 @@ singleDT x = DT x [] []
singleLDT :: a -> LabelDoubleTree b a
singleLDT x = LDT x [] []
baseComposedItem' :: ItemBaseType -> CIL
baseComposedItem' ibt = case ibt of
HELD BURSTRIFLE -> (WeaponCI, [(AmmoInLink,BulletAmmoCI)], [])
AMMOMAG TINMAG -> (BulletAmmoCI, [(AmmoModLink,AmmoModifierCI)], [])
AMMOMAG DRUMMAG -> (BulletAmmoCI, [(AmmoModLink,AmmoModifierCI)], [])
ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI, [], [])
baseComposedItem :: ItemBaseType -> Item -> CIL
baseComposedItem ibt itm = case ibt of
HELD _ -> heldComposedItem itm
AMMOMAG _ -> ammoComposedItem itm
ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI BulletAmmo, [], [])
_ -> (UncomposableCI, [], [])
heldComposedItem :: Item -> CIL
heldComposedItem itm = (WeaponCI, map f ats, [])
where
ats = itm ^.. itUse . heldAmmoTypes . traverse
f atype = (AmmoInLink atype,AmmoCI atype)
ammoComposedItem :: Item -> CIL
ammoComposedItem itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do
atype <- itm ^? itUse . amagType
return (AmmoCI atype, [(AmmoModLink,AmmoModifierCI atype)], [])
baseCIS :: Item -> ComposedItemStructure
baseCIS itm = let (a,b,c) = baseComposedItem' (itm ^. itType . iyBase)
baseCIS itm = let (a,b,c) = baseComposedItem (itm ^. itType . iyBase) itm
in (itm, a, b, c)
type LDTTest a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe b
+1 -1
View File
@@ -101,7 +101,7 @@ miniGunUse i =
& heldAim . aimRange .~ 1
& heldAim . aimStance .~ TwoHandUnder
& heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5}
& heldAmmoTypes .~ [BulletAmmo]
& heldAmmoTypes .~ [BeltBulletAmmo]
miniGunX :: Int -> Item
miniGunX i =
+1
View File
@@ -353,6 +353,7 @@ picsToSelectable pics =
, _siPayload = ()
}
-- would be nice to add parameter to orient this with NSEW, cf cursor
selNumPos ::
Configuration ->
ListDisplayParams ->