Auto create tree structure for held item ammo, add derive instances
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -39,6 +39,7 @@ beltMag =
|
||||
tinMag & itType . iyBase . ibtAmmoMag .~ BELTMAG
|
||||
& itUse . amagLoadStatus . iaLoaded .~ 10000
|
||||
& itUse . amagLoadStatus . iaMax .~ 20000
|
||||
& itUse . amagType .~ BeltBulletAmmo
|
||||
|
||||
shellMag :: Item
|
||||
shellMag =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -353,6 +353,7 @@ picsToSelectable pics =
|
||||
, _siPayload = ()
|
||||
}
|
||||
|
||||
-- would be nice to add parameter to orient this with NSEW, cf cursor
|
||||
selNumPos ::
|
||||
Configuration ->
|
||||
ListDisplayParams ->
|
||||
|
||||
Reference in New Issue
Block a user