Allow shadow fidelity option, fix bug in rendering box shadows
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
module Dodge.Creature.Impulse.UseItem (
|
||||
useItem,
|
||||
useLeftItem,
|
||||
doTopInvLeftClick,
|
||||
itemEffect,
|
||||
) where
|
||||
|
||||
@@ -106,7 +106,7 @@ toggleEquipmentAt rbops invid cr w = case rbops ^? opAllocateEquipment of
|
||||
& crpoint . crEquipment . at oldp .~ Nothing
|
||||
& crpoint . crInvEquipped . at invid .~ Nothing
|
||||
& onremove itm cr
|
||||
Nothing -> error "tried to toggle equipment whilst not prepared"
|
||||
Nothing -> error "tried to toggle equipment when not prepared"
|
||||
where
|
||||
crpoint = cWorld . lWorld . creatures . ix (_crID cr)
|
||||
itmat i = _crInv cr IM.! i
|
||||
@@ -115,27 +115,40 @@ toggleEquipmentAt rbops invid cr w = case rbops ^? opAllocateEquipment of
|
||||
onequip itm' = useE ((_eeOnEquip . _equipEffect . _itUse) itm') itm'
|
||||
onremove itm' = useE ((_eeOnRemove . _equipEffect . _itUse) itm') itm'
|
||||
|
||||
useLeftItem :: Int -> World -> World
|
||||
useLeftItem cid w = fromMaybe w $ do
|
||||
cr <- w ^? cWorld . lWorld . creatures . ix cid
|
||||
doTopInvLeftClick :: Creature -> World -> World
|
||||
doTopInvLeftClick cr w = fromMaybe w $ do
|
||||
guard . not $ _crInvLock cr
|
||||
let mitRef = cr ^? crManipulation . manObject . inInventory . ispItem
|
||||
itmIsConsumable = isJust $ do
|
||||
itRef <- mitRef
|
||||
cr ^? crInv . ix itRef . itUse . cUse
|
||||
itmIsEquipable = isJust $ do
|
||||
itRef <- mitRef
|
||||
guard $ cr ^. crLeftInvSel . lisMPos == Just itRef
|
||||
cr ^? crInv . ix itRef . itUse . equipEffect . eeUse
|
||||
if itmIsConsumable || itmIsEquipable
|
||||
then return $ useItem cr w -- I believe this ONLY sets equipment options
|
||||
else do
|
||||
invid <- cr ^. crLeftInvSel . lisMPos
|
||||
itm <- cr ^? crInv . ix invid
|
||||
f <- cr ^? crInv . ix invid . itUse . leftUse
|
||||
return
|
||||
. (runIdentity . pointerToItemLocation (_itLocation itm) (return . (itUse . leftHammer .~ HammerDown)))
|
||||
. useL f itm cr
|
||||
$ w
|
||||
return $ doTopInvLeftClick' cr w
|
||||
|
||||
doTopInvLeftClick' :: Creature -> World -> World
|
||||
doTopInvLeftClick' cr w = fromMaybe (doTopInvLeftClickSearch cr w) $ do
|
||||
invid <- cr ^? crManipulation . manObject . inInventory . ispItem
|
||||
ituse <- cr ^? crInv . ix invid . itUse
|
||||
case ituse of
|
||||
ConsumeUse{} -> return $ useItem cr w
|
||||
EquipUse{} -> return $ useItem cr w
|
||||
LeftUse{} -> return $ equipAndUse (_leftUseOnEquip ituse) invid cr w
|
||||
_ -> Nothing
|
||||
|
||||
equipAndUse :: Bool -> Int -> Creature -> World -> World
|
||||
equipAndUse useonequip invid cr w = case cr ^? crInvEquipped . ix invid of
|
||||
Nothing | useonequip -> tryUseL (_crID cr) invid $ useItem cr w
|
||||
| otherwise -> useItem cr w
|
||||
_ -> tryUseL (_crID cr) invid w
|
||||
|
||||
doTopInvLeftClickSearch :: Creature -> World -> World
|
||||
doTopInvLeftClickSearch cr w = fromMaybe w $ do
|
||||
invid <- cr ^. crLeftInvSel . lisMPos
|
||||
return $ tryUseL (_crID cr) invid w
|
||||
|
||||
tryUseL :: Int -> Int -> World -> World
|
||||
tryUseL crid invid w = fromMaybe w $ do
|
||||
cr <- w ^? cWorld . lWorld . creatures . ix crid
|
||||
itm <- cr ^? crInv . ix invid
|
||||
luse <- itm ^? itUse . leftUse
|
||||
return $
|
||||
w
|
||||
& cWorld . lWorld . creatures . ix crid . crInv . ix invid . itUse . leftHammer .~ HammerDown
|
||||
& useL luse itm cr
|
||||
|
||||
-- TODO determine itmShouldBeUsed with reference to config options
|
||||
|
||||
Reference in New Issue
Block a user