Cleanup item muzzle loading/usage
Have introduced quite a few unsafe functions
This commit is contained in:
+17
-17
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user