diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index e9dc12b6b..b6d47c9c1 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -74,8 +74,9 @@ useLeftItem cid w | itmShouldBeUsed = useItem cr w | otherwise = fromMaybe w $ do invid <- _crLeftInvSel cr + itm <- cr ^? crInv . ix invid f <- cr ^? crInv . ix invid . itUse . lUse - return $ f cr invid w + return $ f itm cr w where cr = _creatures w IM.! cid itmShouldBeUsed = isJust (cr ^? crInv . ix (_crInvSel cr) . itUse . cUse) diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index 8d5746bad..2b4aaa840 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -316,7 +316,6 @@ data Intention = Intention , _mvToPoint :: Maybe Point2 , _viewPoint :: Maybe Point2 } - data CrMvType = NoMvType | MvWalking { _mvSpeed :: Float } @@ -374,7 +373,7 @@ data ItemUse , _useAim :: AimParams } | LeftUse - { _lUse :: Creature -> Int -> World -> World + { _lUse :: Item -> Creature -> World -> World , _useDelay :: UseDelay , _useHammer :: HammerType } diff --git a/src/Dodge/Default/Weapon.hs b/src/Dodge/Default/Weapon.hs index 15117cf55..d28bfd2f1 100644 --- a/src/Dodge/Default/Weapon.hs +++ b/src/Dodge/Default/Weapon.hs @@ -67,7 +67,7 @@ defaultlUse = LeftUse , _useHammer = NoHammer } -luseInstantNoH :: (Creature -> Int -> World -> World) -> ItemUse +luseInstantNoH :: (Item -> Creature -> World -> World) -> ItemUse luseInstantNoH f = LeftUse { _lUse = f , _useDelay = NoDelay diff --git a/src/Dodge/Item/Weapon/Booster.hs b/src/Dodge/Item/Weapon/Booster.hs index af9e028d8..ea6d1b786 100644 --- a/src/Dodge/Item/Weapon/Booster.hs +++ b/src/Dodge/Item/Weapon/Booster.hs @@ -30,14 +30,15 @@ boostPoint x cr w = case mayp2 of boostSelfL :: Float -- ^ boost amount + -> Item -> Creature - -> Int -- ^ item inventory id -> World -> World -boostSelfL x cr invid w = case boostPoint x cr w of +boostSelfL x itm cr w = case boostPoint x cr w of Left p -> crEff p (itConsumption . ammoLoaded .~ 0) Right p -> crEff p (itConsumption . ammoLoaded -~ 1) where + invid = fromJust $ _itInvPos itm cid = _crID cr cpos = _crPos cr r = _crRad cr diff --git a/src/Dodge/Item/Weapon/TriggerType.hs b/src/Dodge/Item/Weapon/TriggerType.hs index 3da556995..85c334e3d 100644 --- a/src/Dodge/Item/Weapon/TriggerType.hs +++ b/src/Dodge/Item/Weapon/TriggerType.hs @@ -79,7 +79,7 @@ import System.Random --import Control.Lens import Control.Monad.State import Data.Maybe -import qualified Data.IntMap.Strict as IM +--import qualified Data.IntMap.Strict as IM import Data.Foldable type ChainEffect @@ -331,33 +331,34 @@ ammoUseCheck f item cr w {- | Applies a world effect after a hammer position check. Arbitrary inventory position. -} hammerCheckL - :: (Creature -> Int -> World -> World) -- ^ Underlying effect - -> Creature -> Int -> World -> World -hammerCheckL f cr invid w = case (_crInv cr IM.! invid) ^? itUse . useHammer . hammerPosition of - Just HammerUp -> f cr invid $ setHammerDown w + :: (Item -> Creature -> World -> World) -- ^ Underlying effect + -> Item -> Creature -> World -> World +hammerCheckL f itm cr w = case itm ^? itUse . useHammer . hammerPosition of + Just HammerUp -> f itm cr $ setHammerDown w _ -> setHammerDown w where cid = _crID cr + invid = fromJust $ _itInvPos itm setHammerDown = creatures . ix cid . crInv . ix invid . itUse . useHammer . hammerPosition .~ HammerDown {- | Applies a world effect after an ammo check. Arbitrary inventory position. -} shootL - :: (Creature -> Int -> World -> World) + :: (Item -> Creature -> World -> World) -- ^ Underlying effect + -> Item -> Creature - -> Int -- ^ Inventory position -> World -> World -shootL f cr invid w - | fireCondition = f cr invid w & pointerToItem %~ +shootL f item cr w + | fireCondition = f item cr w & pointerToItem %~ ( itUseAmmo 1 . (itUse . useDelay . rateTime .~ _rateMax (_useDelay (_itUse item))) ) | reloadCondition = fromMaybe w $ startReloadingWeapon cr w | otherwise = w where cid = _crID cr - item = _crInv cr IM.! invid + invid = fromJust $ _itInvPos item pointerToItem = creatures . ix cid . crInv . ix invid fireCondition = _reloadState (_itConsumption item) == Nothing' && _rateTime (_useDelay (_itUse item)) == 0 diff --git a/src/Dodge/Item/Weapon/Utility.hs b/src/Dodge/Item/Weapon/Utility.hs index f2d2434a9..ca85ef2db 100644 --- a/src/Dodge/Item/Weapon/Utility.hs +++ b/src/Dodge/Item/Weapon/Utility.hs @@ -27,7 +27,7 @@ rewindGun = defaultGun , _wpCharge = 0 } , _itEffect = ItRewindEffect rewindEffect [] - , _itUse = defaultlUse {_lUse = \cr invid -> useRewindGun (_crInv cr IM.! invid) cr} + , _itUse = defaultlUse {_lUse = \itm cr -> useRewindGun itm cr} } rewindEffect :: Item -> Creature -> World -> World rewindEffect itm cr w @@ -77,12 +77,13 @@ shrinkGunPic _ = noPic $ colorSH violet $ upperPrismPoly 5 $ square 5 -- be careful changing this around; potential problems include updating the -- creature but using the old crInvSel value -useShrinkGun :: Creature -> Int -> World -> World -useShrinkGun cr invid w = if _itBool $ _itAttachment it +-- 22.05.23 this has been changed from using invids to items +useShrinkGun :: Item -> Creature -> World -> World +useShrinkGun it cr w = if _itBool $ _itAttachment it then tryResize 0.5 $ stripNoItems cr . f False UndroppableIdentified . dropExcept cr invid else tryResize 1 $ f True Uncursed . setMinInvSize defaultInvSize cr where - it = _crInv cr IM.! invid + invid = fromJust $ _itInvPos it tryResize x g = maybe w g $ sizeSelf x cr w f isInUse cstatus = creatures . ix (_crID cr) . crInv . ix invid %~ ( (itAttachment . itBool .~ isInUse) . (itCurseStatus .~ cstatus) ) @@ -107,8 +108,8 @@ blinkGun = defaultGun aSelf :: Creature -> World -> World aSelf = blinkAction -aSelfL :: Creature -> Int -> World -> World -aSelfL cr _ = blinkAction cr +aSelfL :: Item -> Creature -> World -> World +aSelfL _ cr = blinkAction cr effectGun :: String -> (Creature -> World -> World) -> Item effectGun name eff = defaultGun