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 #-}
|
{-# OPTIONS -Wno-incomplete-uni-patterns #-}
|
||||||
--{-# LANGUAGE TupleSections #-}
|
|
||||||
{-# LANGUAGE LambdaCase #-}
|
{-# LANGUAGE LambdaCase #-}
|
||||||
|
|
||||||
module Dodge.HeldUse (
|
module Dodge.HeldUse (
|
||||||
@@ -633,9 +633,9 @@ heldTorqueAmount = \case
|
|||||||
BLINKERUNSAFE -> 0
|
BLINKERUNSAFE -> 0
|
||||||
|
|
||||||
loadMuzzle :: LocationDT OItem -> Creature -> (Bool, World) -> Muzzle -> (Bool, World)
|
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
|
case mz ^. mzAmmoSlot of
|
||||||
NoAmmoRequired -> return (True, doMuzzleEffect loc cr mz Nothing w)
|
NoAmmoRequired -> return (doMuzzleEffect loc cr mz Nothing w)
|
||||||
as -> do
|
as -> do
|
||||||
mag <- case as of
|
mag <- case as of
|
||||||
MagBelow mi _ -> find (isAmmoIntLink mi . (^. dtValue . _2)) (loc ^. locDT . dtLeft)
|
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
|
| x <= availableammo -> x
|
||||||
| otherwise -> 0
|
| otherwise -> 0
|
||||||
guard $ usedammo > 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 :: Muzzle -> LocationDT OItem -> Creature -> World -> World
|
||||||
makeMuzzleFlare mz loc cr = case mz ^. mzFlareType of
|
makeMuzzleFlare mz loc cr = case mz ^. mzFlareType of
|
||||||
@@ -723,22 +723,19 @@ basicMuzFlare pos dir =
|
|||||||
isAmmoIntLink :: Int -> ItemSF -> Bool
|
isAmmoIntLink :: Int -> ItemSF -> Bool
|
||||||
isAmmoIntLink i sf = Just i == sf ^? amsfLink
|
isAmmoIntLink i sf = Just i == sf ^? amsfLink
|
||||||
|
|
||||||
-- (AmmoMagSF j _) = i == j
|
|
||||||
--isAmmoIntLink _ _ = False
|
|
||||||
|
|
||||||
doMuzzleEffect :: LocationDT OItem -> Creature -> Muzzle
|
doMuzzleEffect :: LocationDT OItem -> Creature -> Muzzle
|
||||||
-> Maybe (LocationDT OItem, Item) -> World -> World
|
-> Maybe (Int, DTree OItem) -> World -> World
|
||||||
doMuzzleEffect _ _ _ _ = id
|
doMuzzleEffect _ _ _ _ = id
|
||||||
|
|
||||||
useLoadedAmmo ::
|
useLoadedAmmo ::
|
||||||
LocationDT OItem ->
|
LocationDT OItem ->
|
||||||
Creature ->
|
Creature ->
|
||||||
(Bool, World) ->
|
Muzzle ->
|
||||||
Maybe (Muzzle, Int, DTree OItem) ->
|
Maybe (Int, DTree OItem) ->
|
||||||
(Bool, World)
|
World ->
|
||||||
useLoadedAmmo _ _ (cme, w) Nothing = (cme, w)
|
World
|
||||||
useLoadedAmmo loc cr (_, w) (Just (mz, x, magtree)) = (,) True $
|
useLoadedAmmo loc cr mz m w =
|
||||||
removeAmmoFromMag x mid cr . makeMuzzleFlare mz loc cr $ case _mzEffect mz of
|
removeAmmoFromMag m cr . makeMuzzleFlare mz loc cr $ case _mzEffect mz of
|
||||||
MuzzleShootBullet -> shootBullets loc cr (mz, x, magtree) w
|
MuzzleShootBullet -> shootBullets loc cr (mz, x, magtree) w
|
||||||
MuzzleLaser -> creatureShootLaser loc cr mz w
|
MuzzleLaser -> creatureShootLaser loc cr mz w
|
||||||
MuzzlePulseLaser -> creatureShootPulseLaser 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
|
itmtree = loc ^. locDT
|
||||||
mid = magtree ^? dtValue . _1 . itLocation . ilInvID
|
mid = magtree ^? dtValue . _1 . itLocation . ilInvID
|
||||||
itm = itmtree ^. dtValue . _1
|
itm = itmtree ^. dtValue . _1
|
||||||
|
(x, magtree) = fromJust m
|
||||||
|
|
||||||
getAttachedSFLink :: ItemSF -> DTree OItem -> Maybe (NewInt ItmInt)
|
getAttachedSFLink :: ItemSF -> DTree OItem -> Maybe (NewInt ItmInt)
|
||||||
getAttachedSFLink sf = (^? dtRight . folding (find f) . dtValue . _1 . itID)
|
getAttachedSFLink sf = (^? dtRight . folding (find f) . dtValue . _1 . itID)
|
||||||
@@ -939,9 +937,11 @@ shootPulseBall p dir w =
|
|||||||
where
|
where
|
||||||
i = IM.newKey $ w ^. cWorld . lWorld . pulseBalls
|
i = IM.newKey $ w ^. cWorld . lWorld . pulseBalls
|
||||||
|
|
||||||
removeAmmoFromMag :: Int -> Maybe Int -> Creature -> World -> World
|
--removeAmmoFromMag :: Int -> Maybe Int -> Creature -> World -> World
|
||||||
removeAmmoFromMag x mid cr = fromMaybe id $ do
|
removeAmmoFromMag :: Maybe (Int, DTree OItem) -> Creature -> World -> World
|
||||||
magid <- mid
|
removeAmmoFromMag m cr = fromMaybe id $ do
|
||||||
|
(x, magtree) <- m
|
||||||
|
magid <- magtree ^? dtValue . _1 . itLocation . ilInvID
|
||||||
return $
|
return $
|
||||||
cWorld . lWorld . creatures
|
cWorld . lWorld . creatures
|
||||||
. ix (_crID cr)
|
. ix (_crID cr)
|
||||||
|
|||||||
Reference in New Issue
Block a user