Make use hammers and item positions slightly more logical
This commit is contained in:
@@ -40,11 +40,11 @@ import qualified SDL
|
||||
autoEffect :: (Item -> Creature -> World -> World) -> Int -> SoundID -> Item -> Creature -> World -> World
|
||||
autoEffect eff t sid itm cr w
|
||||
| _eparamInt (_eqParams (_eqEq $ _itUse itm)) < 1 = eff itm cr w
|
||||
& creatures . ix (_crID cr) . crInv . ix (fromJust $ _itInvPos itm)
|
||||
& creatures . ix (_crID cr) . crInv . ix (_ipInvID $ _itPos itm)
|
||||
. itUse . eqEq . eqParams . eparamInt .~ t
|
||||
& soundStart OnceSound (_crPos cr) sid Nothing
|
||||
| otherwise = w
|
||||
& creatures . ix (_crID cr) . crInv . ix (fromJust $ _itInvPos itm)
|
||||
& creatures . ix (_crID cr) . crInv . ix (_ipInvID $ _itPos itm)
|
||||
. itUse . eqEq . eqParams . eparamInt -~ 1
|
||||
|
||||
{- | Automatically send out radar pulses that detect walls. -}
|
||||
|
||||
@@ -121,10 +121,10 @@ throwArmReset x = ItInvEffect {_ieInv = f ,_ieCounter = x }
|
||||
where
|
||||
f itm cr = creatures . ix (_crID cr) . crInv %~ IM.adjust counterDown i
|
||||
where
|
||||
i = fromJust $ _itInvPos itm
|
||||
i = _ipInvID $ _itPos itm
|
||||
counterDown it
|
||||
| _ieCounter (_itEffect it) == 0 = it
|
||||
& itUse . useHammer . hammerPosition .~ HammerUp
|
||||
& itUse . useHammer' .~ HammerUp
|
||||
& itEquipPict .~ pictureWeaponAim (\_ -> grenadePic 50)
|
||||
| otherwise = it & itEffect . ieCounter -~ 1
|
||||
|
||||
|
||||
@@ -322,7 +322,7 @@ moveRemoteShell cid itid pj w
|
||||
newPos = oldPos +.+ vel
|
||||
newdir
|
||||
| SDL.ButtonRight `M.member` _mouseButtons w
|
||||
&& w ^? creatures . ix cid . crInvSel . iselPos == w ^? itemPositions . ix itid . ipInvId
|
||||
&& w ^? creatures . ix cid . crInvSel . iselPos == w ^? itemPositions . ix itid . ipInvID
|
||||
= _cameraRot w + argV (_mousePos w)
|
||||
| otherwise = _pjDir pj
|
||||
accel = rotateV newdir (V2 2 0)
|
||||
|
||||
@@ -137,14 +137,14 @@ ammoHammerCheck :: ChainEffect
|
||||
ammoHammerCheck eff it cr w
|
||||
| _laLoaded ic <= 0 || not (_laPrimed ic) = w -- fromMaybe w (startReloadingWeapon cr w)
|
||||
& setHammerDown
|
||||
| otherwise = case it ^? itUse . useHammer . hammerPosition of
|
||||
| otherwise = case it ^? itUse . useHammer' of
|
||||
Just HammerUp -> eff it cr $ setHammerDown w & creatures . ix (_crID cr) %~ crCancelReloading
|
||||
_ -> setHammerDown w
|
||||
where
|
||||
ic = _itConsumption it
|
||||
cid = _crID cr
|
||||
setHammerDown = creatures . ix cid . crInv . ix (crSel cr) . itUse
|
||||
. useHammer . hammerPosition .~ HammerDown
|
||||
. useHammer' .~ HammerDown
|
||||
|
||||
itUseCharge :: Int -> Item -> Item
|
||||
itUseCharge x = itConsumption . arLoaded %~ (max 0 . subtract x)
|
||||
@@ -307,13 +307,13 @@ useTimeCheck f item cr w = case item ^? itUse . useDelay . rateTime of
|
||||
userate = fromMaybe 0 $ item ^? itUse . useDelay . rateMax
|
||||
{- | Applies a world effect after a hammer position check. -}
|
||||
hammerCheckI :: ChainEffect
|
||||
hammerCheckI f it cr w = case it ^? itUse . useHammer . hammerPosition of
|
||||
hammerCheckI f it cr w = case it ^? itUse . useHammer' of
|
||||
Just HammerUp | _laPrimed (_itConsumption it) -> f it cr $ setHammerDown w
|
||||
_ -> setHammerDown w
|
||||
where
|
||||
cid = _crID cr
|
||||
setHammerDown = creatures . ix cid . crInv . ix (crSel cr) . itUse
|
||||
. useHammer . hammerPosition .~ HammerDown
|
||||
. useHammer' .~ HammerDown
|
||||
{- | Applies a world effect after an ammo check. -}
|
||||
-- this should be made "safe" incase there is no _rateTime
|
||||
ammoUseCheck :: ChainEffect
|
||||
@@ -336,14 +336,14 @@ Arbitrary inventory position. -}
|
||||
hammerCheckL
|
||||
:: (Item -> Creature -> World -> World) -- ^ Underlying effect
|
||||
-> Item -> Creature -> World -> World
|
||||
hammerCheckL f itm cr w = case itm ^? itUse . useHammer . hammerPosition of
|
||||
hammerCheckL f itm cr w = case itm ^? itUse . useHammer' of
|
||||
Just HammerUp -> f itm cr $ setHammerDown w
|
||||
_ -> setHammerDown w
|
||||
where
|
||||
cid = _crID cr
|
||||
invid = fromJust $ _itInvPos itm
|
||||
invid = _ipInvID $ _itPos itm
|
||||
setHammerDown = creatures . ix cid . crInv . ix invid
|
||||
. itUse . useHammer . hammerPosition .~ HammerDown
|
||||
. itUse . useHammer' .~ HammerDown
|
||||
{- | Applies a world effect after an ammo check.
|
||||
Arbitrary inventory position -- cannot be replaced with ammoUseCheck. -}
|
||||
shootL
|
||||
@@ -361,7 +361,7 @@ shootL f item cr w
|
||||
| otherwise = w
|
||||
where
|
||||
cid = _crID cr
|
||||
invid = fromJust $ _itInvPos item
|
||||
invid = _ipInvID $ _itPos item
|
||||
pointerToItem = creatures . ix cid . crInv . ix invid
|
||||
fireCondition = _rateTime (_useDelay (_itUse item)) == 0
|
||||
&& _arLoaded (_itConsumption item) > 0
|
||||
|
||||
@@ -41,7 +41,7 @@ rewindEffect itm cr w
|
||||
| otherwise = w & rewindWorlds .~ []
|
||||
& ptrWpCharge .~ 0
|
||||
where
|
||||
invid = fromJust $ _itInvPos itm
|
||||
invid = _ipInvID $ _itPos itm
|
||||
ptrWpCharge = creatures . ix (_crID cr) . crInv . ix invid . itConsumption . wpCharge
|
||||
maxcharge = _wpMaxCharge . _itConsumption $ itm
|
||||
w' = w & rewindWorlds .~ []
|
||||
@@ -65,7 +65,6 @@ useRewindGun _ _ w = case _rewindWorlds w of
|
||||
shrinkGun :: Item
|
||||
shrinkGun = defaultLeftItem
|
||||
{_itUse = defaultlUse {_lUse = hammerCheckL useShrinkGun}
|
||||
& useHammer .~ upHammer
|
||||
-- , _itFloorPict = shrinkGunPic
|
||||
, _itAttachment = AttachBool True
|
||||
}
|
||||
@@ -82,7 +81,7 @@ useShrinkGun it cr w = if _atBool $ _itAttachment it
|
||||
then tryResize 0.5 $ stripNoItems cr . f False UndroppableIdentified . dropExcept cr invid
|
||||
else tryResize 1 $ f True Uncursed . setMinInvSize defaultInvSize cr
|
||||
where
|
||||
invid = fromJust $ _itInvPos it
|
||||
invid = _ipInvID $ _itPos it
|
||||
tryResize x g = maybe w g $ sizeSelf x cr w
|
||||
f isInUse cstatus = creatures . ix (_crID cr) . crInv . ix invid %~
|
||||
( (itAttachment . atBool .~ isInUse) . (itCurseStatus .~ cstatus) )
|
||||
@@ -92,7 +91,6 @@ blinkGun = defaultLeftItem
|
||||
{ _itInvColor = cyan
|
||||
, _itUse = defaultlUse
|
||||
& lUse .~ hammerCheckL (shootL $ const blinkAction)
|
||||
& useHammer .~ upHammer
|
||||
& eqEq . eqSite .~ GoesOnWrist
|
||||
-- , _itFloorPict = const . noPic . colorSH chartreuse $ upperPrismPoly 2 $ square 2
|
||||
}
|
||||
@@ -137,7 +135,7 @@ useForceFieldGun itm cr w = fromMaybe w $ do
|
||||
wlline = (a,b)
|
||||
return $ w
|
||||
& walls %~ IM.insertWith (\_ x -> x) i forceField {_wlID = i}
|
||||
& creatures . ix (_crID cr) . crInv . ix (fromJust (_itInvPos itm)) . itParams . paramMID ?~ i
|
||||
& creatures . ix (_crID cr) . crInv . ix (_ipInvID (_itPos itm)) . itParams . paramMID ?~ i
|
||||
& moveWallIDUnsafe i wlline
|
||||
where
|
||||
i = fromMaybe (IM.newKey (_walls w)) $ itm ^? itParams . paramMID . _Just
|
||||
|
||||
Reference in New Issue
Block a user