Simplify item composition structure
This commit is contained in:
+30
-30
@@ -50,7 +50,7 @@ gadgetEffect pt loc
|
||||
| UseHeld{} <- loc ^. locLDT . ldtValue . _1 . itUse =
|
||||
heldEffect
|
||||
pt
|
||||
(bimap _iatType (^. _1) (loc ^. locLDT))
|
||||
(bimap id (^. _1) (loc ^. locLDT))
|
||||
| DROPPER x <- loc ^. locLDT . ldtValue . _1 . itType
|
||||
, Just i <- loc ^? locLDT . ldtValue . _1 . itUse . uInt
|
||||
, pt == InitialPress =
|
||||
@@ -60,23 +60,23 @@ gadgetEffect pt loc
|
||||
useInventoryPath pt i x loc
|
||||
| otherwise = const id
|
||||
|
||||
heldEffect :: PressType -> LabelDoubleTree CLinkType Item -> Creature -> World -> World
|
||||
heldEffect :: PressType -> LabelDoubleTree ItemLink Item -> Creature -> World -> World
|
||||
heldEffect = useTimeCheck . hammerCheck heldEffectMuzzles
|
||||
|
||||
heldEffectNoHammerCheck :: LabelDoubleTree CLinkType Item -> Creature -> World -> World
|
||||
heldEffectNoHammerCheck :: LabelDoubleTree ItemLink Item -> Creature -> World -> World
|
||||
heldEffectNoHammerCheck = useTimeCheck heldEffectMuzzles
|
||||
|
||||
type ChainEffect =
|
||||
(LabelDoubleTree CLinkType Item -> Creature -> World -> World) ->
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
(LabelDoubleTree ItemLink Item -> Creature -> World -> World) ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Creature ->
|
||||
World ->
|
||||
World
|
||||
|
||||
hammerCheck ::
|
||||
(LabelDoubleTree CLinkType Item -> Creature -> World -> World) ->
|
||||
(LabelDoubleTree ItemLink Item -> Creature -> World -> World) ->
|
||||
PressType ->
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Creature ->
|
||||
World ->
|
||||
World
|
||||
@@ -142,7 +142,7 @@ useTimeCheck f item cr w = case useDelay $ item ^. ldtValue of
|
||||
-- will have problems elsewhere also
|
||||
itRef = item ^?! ldtValue . itLocation . ilInvID
|
||||
|
||||
heldEffectMuzzles :: LabelDoubleTree CLinkType Item -> Creature -> World -> World
|
||||
heldEffectMuzzles :: LabelDoubleTree ItemLink Item -> Creature -> World -> World
|
||||
heldEffectMuzzles t cr w =
|
||||
setusetime . doHeldUseEffect t cr
|
||||
. uncurry (applyCME (_ldtValue t) cr)
|
||||
@@ -336,7 +336,7 @@ vgunMuzzles i =
|
||||
-- <*> ZipList [0 .. i -1]
|
||||
)
|
||||
|
||||
doHeldUseEffect :: LabelDoubleTree CLinkType Item -> Creature -> World -> World
|
||||
doHeldUseEffect :: LabelDoubleTree ItemLink Item -> Creature -> World -> World
|
||||
doHeldUseEffect t cr w = case t ^. ldtValue . itType of
|
||||
HELD (VOLLEYGUN j) -> case itm ^? itParams . unfiredBarrels of
|
||||
Just [_] -> fromMaybe w $ do
|
||||
@@ -677,9 +677,9 @@ heldTorqueAmount = \case
|
||||
|
||||
-- (Muzzle,Int,Int) = (muzzle, amountloaded, id of mag taken from)
|
||||
loadMuzzle ::
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Muzzle ->
|
||||
(LabelDoubleTree CLinkType Item, Maybe (Muzzle, Int, LabelDoubleTree CLinkType Item))
|
||||
(LabelDoubleTree ItemLink Item, Maybe (Muzzle, Int, LabelDoubleTree ItemLink Item))
|
||||
loadMuzzle t@(LDT _ l _) mz = fromMaybe (t, Nothing) $ do
|
||||
-- guard $ mz ^? mzFrame == t ^? ldtValue . itUse . heldFrame
|
||||
let as = _mzAmmoSlot mz
|
||||
@@ -697,7 +697,7 @@ loadMuzzle t@(LDT _ l _) mz = fromMaybe (t, Nothing) $ do
|
||||
, Just (mz, usedammo, mag)
|
||||
)
|
||||
|
||||
makeMuzzleFlare :: Muzzle -> LabelDoubleTree CLinkType Item -> Creature -> World -> World
|
||||
makeMuzzleFlare :: Muzzle -> LabelDoubleTree ItemLink Item -> Creature -> World -> World
|
||||
makeMuzzleFlare mz itmtree cr = case mz ^. mzFlareType of
|
||||
NoFlare -> id
|
||||
BasicFlare -> basicMuzFlare pos dir
|
||||
@@ -746,13 +746,13 @@ flareCircleAt col alphax tranv =
|
||||
)
|
||||
|
||||
-- previous phaseV parameters: 0.2, 1, 5
|
||||
getLaserPhaseV :: LabelDoubleTree CLinkType Item -> Float
|
||||
getLaserPhaseV :: LabelDoubleTree ItemLink Item -> Float
|
||||
getLaserPhaseV = const 1
|
||||
|
||||
getLaserDamage :: LabelDoubleTree CLinkType Item -> LaserType
|
||||
getLaserDamage :: LabelDoubleTree ItemLink Item -> LaserType
|
||||
getLaserDamage = const (DamageLaser 11)
|
||||
|
||||
getLaserColor :: LabelDoubleTree CLinkType Item -> Color
|
||||
getLaserColor :: LabelDoubleTree ItemLink Item -> Color
|
||||
getLaserColor = const yellow
|
||||
|
||||
basicMuzFlare :: Point2 -> Float -> World -> World
|
||||
@@ -762,15 +762,15 @@ basicMuzFlare pos dir =
|
||||
. muzFlareAt (V4 10 10 1 3) (pos `v2z` 20) dir
|
||||
. muzFlareAt (V4 10 10 1 3) (pos `v2z` 20) dir
|
||||
|
||||
isAmmoIntLink :: Int -> CLinkType -> Bool
|
||||
isAmmoIntLink :: Int -> ItemLink -> Bool
|
||||
isAmmoIntLink i (AmmoInLink j _) = i == j
|
||||
isAmmoIntLink _ _ = False
|
||||
|
||||
useLoadedAmmo ::
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Creature ->
|
||||
(Bool, World) ->
|
||||
Maybe (Muzzle, Int, LabelDoubleTree CLinkType Item) ->
|
||||
Maybe (Muzzle, Int, LabelDoubleTree ItemLink Item) ->
|
||||
(Bool, World)
|
||||
useLoadedAmmo _ _ (cme, w) Nothing = (cme, w)
|
||||
useLoadedAmmo itmtree cr (_, w) (Just (mz, x, magtree)) = (,) True $
|
||||
@@ -808,7 +808,7 @@ useLoadedAmmo itmtree cr (_, w) (Just (mz, x, magtree)) = (,) True $
|
||||
|
||||
getAttachedSFLink ::
|
||||
ItemStructuralFunction ->
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Maybe (NewInt ItmInt)
|
||||
getAttachedSFLink sf = (^? ldtRight . folding (lookup (SFLink sf)) . ldtValue . itID)
|
||||
|
||||
@@ -869,7 +869,7 @@ tractorBeamAt pos outpos dir power =
|
||||
d = unitVectorAtAngle dir * power
|
||||
|
||||
creatureShootLaser ::
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Creature ->
|
||||
Muzzle ->
|
||||
World ->
|
||||
@@ -925,7 +925,7 @@ removeAmmoFromMag x mid cr = fromMaybe id $ do
|
||||
. _Just
|
||||
-~ x
|
||||
|
||||
getBulletType :: LabelDoubleTree CLinkType Item -> Maybe Bullet
|
||||
getBulletType :: LabelDoubleTree ItemLink Item -> Maybe Bullet
|
||||
getBulletType magtree =
|
||||
--magtree ^? ldtValue . itConsumables . magParams . ampBullet
|
||||
(magtree ^? ldtValue >>= magAmmoParams >>= (^? ampBullet))
|
||||
@@ -979,9 +979,9 @@ magAmmoParams itm = case itm ^. itType of
|
||||
-- _ -> 0
|
||||
|
||||
shootBullet ::
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Creature ->
|
||||
(Muzzle, Int, LabelDoubleTree CLinkType Item) ->
|
||||
(Muzzle, Int, LabelDoubleTree ItemLink Item) ->
|
||||
World ->
|
||||
World
|
||||
shootBullet itmtree cr (mz, x, magtree) w = fromMaybe w $ do
|
||||
@@ -1266,8 +1266,8 @@ shootTeslaArc itm cr mz w =
|
||||
dir = _crDir cr + mrot
|
||||
|
||||
determineProjectileTracking ::
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
RocketHoming
|
||||
determineProjectileTracking magtree itmtree =
|
||||
fromMaybe NoHoming $
|
||||
@@ -1283,8 +1283,8 @@ determineProjectileTracking magtree itmtree =
|
||||
return $ HomeUsingTargeting (targetingtree ^. ldtValue . itID)
|
||||
|
||||
createProjectileR ::
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Muzzle ->
|
||||
Creature ->
|
||||
World ->
|
||||
@@ -1302,7 +1302,7 @@ createProjectileR itmtree magtree =
|
||||
| isJust $ lookup SmokeReducerLink (magtree ^. ldtLeft) = Just ReducedRocketSmoke
|
||||
| otherwise = Nothing
|
||||
|
||||
getPJStabiliser :: LabelDoubleTree CLinkType Item -> Maybe PJStabiliser
|
||||
getPJStabiliser :: LabelDoubleTree ItemLink Item -> Maybe PJStabiliser
|
||||
getPJStabiliser ldt = case lookup ProjectileStabiliserLink (ldt ^. ldtRight) of
|
||||
Just ldt' -> case ldt' ^? ldtValue . itType . ibtAttach of
|
||||
Just GIMBAL -> Just StabOrthReduce
|
||||
@@ -1310,7 +1310,7 @@ getPJStabiliser ldt = case lookup ProjectileStabiliserLink (ldt ^. ldtRight) of
|
||||
_ -> Nothing
|
||||
_ -> Nothing
|
||||
|
||||
getGrenadeHitEffect :: LabelDoubleTree CLinkType Item -> GrenadeHitEffect
|
||||
getGrenadeHitEffect :: LabelDoubleTree ItemLink Item -> GrenadeHitEffect
|
||||
getGrenadeHitEffect t = case lookup GrenadeHitEffectLink (t ^. ldtRight) of
|
||||
Just ldt' -> case ldt' ^? ldtValue . itType of
|
||||
Just STICKYMOD -> GStick
|
||||
@@ -1319,7 +1319,7 @@ getGrenadeHitEffect t = case lookup GrenadeHitEffectLink (t ^. ldtRight) of
|
||||
|
||||
createProjectile ::
|
||||
ProjectileType ->
|
||||
LabelDoubleTree CLinkType Item ->
|
||||
LabelDoubleTree ItemLink Item ->
|
||||
Maybe PJStabiliser ->
|
||||
Muzzle ->
|
||||
Creature ->
|
||||
|
||||
Reference in New Issue
Block a user