Cleanup item muzzle loading/usage

Have introduced quite a few unsafe functions
This commit is contained in:
2025-08-10 09:05:23 +01:00
parent aa412f1911
commit 71c269667d
+17 -17
View File
@@ -1,5 +1,5 @@
{-# LANGUAGE TupleSections #-}
{-# OPTIONS -Wno-incomplete-uni-patterns #-}
--{-# LANGUAGE TupleSections #-}
{-# LANGUAGE LambdaCase #-}
module Dodge.HeldUse (
@@ -633,9 +633,9 @@ heldTorqueAmount = \case
BLINKERUNSAFE -> 0
loadMuzzle :: LocationDT OItem -> Creature -> (Bool, World) -> Muzzle -> (Bool, World)
loadMuzzle loc cr (b, w) mz = fromMaybe (b, w) $ do
loadMuzzle loc cr (b, w) mz = maybe (b, w) (True,) $ do
case mz ^. mzAmmoSlot of
NoAmmoRequired -> return (True, doMuzzleEffect loc cr mz Nothing w)
NoAmmoRequired -> return (doMuzzleEffect loc cr mz Nothing w)
as -> do
mag <- case as of
MagBelow mi _ -> find (isAmmoIntLink mi . (^. dtValue . _2)) (loc ^. locDT . dtLeft)
@@ -652,7 +652,7 @@ loadMuzzle loc cr (b, w) mz = fromMaybe (b, w) $ do
| x <= availableammo -> x
| otherwise -> 0
guard $ usedammo > 0
return $ useLoadedAmmo loc cr (b, w) (Just (mz, usedammo, mag))
return $ useLoadedAmmo loc cr mz (Just (usedammo, mag)) w
makeMuzzleFlare :: Muzzle -> LocationDT OItem -> Creature -> World -> World
makeMuzzleFlare mz loc cr = case mz ^. mzFlareType of
@@ -723,22 +723,19 @@ basicMuzFlare pos dir =
isAmmoIntLink :: Int -> ItemSF -> Bool
isAmmoIntLink i sf = Just i == sf ^? amsfLink
-- (AmmoMagSF j _) = i == j
--isAmmoIntLink _ _ = False
doMuzzleEffect :: LocationDT OItem -> Creature -> Muzzle
-> Maybe (LocationDT OItem, Item) -> World -> World
-> Maybe (Int, DTree OItem) -> World -> World
doMuzzleEffect _ _ _ _ = id
useLoadedAmmo ::
LocationDT OItem ->
Creature ->
(Bool, World) ->
Maybe (Muzzle, Int, DTree OItem) ->
(Bool, World)
useLoadedAmmo _ _ (cme, w) Nothing = (cme, w)
useLoadedAmmo loc cr (_, w) (Just (mz, x, magtree)) = (,) True $
removeAmmoFromMag x mid cr . makeMuzzleFlare mz loc cr $ case _mzEffect mz of
Muzzle ->
Maybe (Int, DTree OItem) ->
World ->
World
useLoadedAmmo loc cr mz m w =
removeAmmoFromMag m cr . makeMuzzleFlare mz loc cr $ case _mzEffect mz of
MuzzleShootBullet -> shootBullets loc cr (mz, x, magtree) w
MuzzleLaser -> creatureShootLaser loc cr mz w
MuzzlePulseLaser -> creatureShootPulseLaser loc cr mz w
@@ -773,6 +770,7 @@ useLoadedAmmo loc cr (_, w) (Just (mz, x, magtree)) = (,) True $
itmtree = loc ^. locDT
mid = magtree ^? dtValue . _1 . itLocation . ilInvID
itm = itmtree ^. dtValue . _1
(x, magtree) = fromJust m
getAttachedSFLink :: ItemSF -> DTree OItem -> Maybe (NewInt ItmInt)
getAttachedSFLink sf = (^? dtRight . folding (find f) . dtValue . _1 . itID)
@@ -939,9 +937,11 @@ shootPulseBall p dir w =
where
i = IM.newKey $ w ^. cWorld . lWorld . pulseBalls
removeAmmoFromMag :: Int -> Maybe Int -> Creature -> World -> World
removeAmmoFromMag x mid cr = fromMaybe id $ do
magid <- mid
--removeAmmoFromMag :: Int -> Maybe Int -> Creature -> World -> World
removeAmmoFromMag :: Maybe (Int, DTree OItem) -> Creature -> World -> World
removeAmmoFromMag m cr = fromMaybe id $ do
(x, magtree) <- m
magid <- magtree ^? dtValue . _1 . itLocation . ilInvID
return $
cWorld . lWorld . creatures
. ix (_crID cr)