Tweak close item usage code

This commit is contained in:
2023-02-17 19:14:10 +00:00
parent 90370e5487
commit 56f2dc04cf
3 changed files with 20 additions and 62 deletions
+14 -58
View File
@@ -8,28 +8,26 @@ module Dodge.Inventory (
firstPosSelectionSections,
checkInvSlotsYou,
rmSelectedInvItem,
invSelSize,
--invSelSize,
selNumPos,
selNumTextEndPos,
selNumCol,
selSecSelCol,
selNumEndMidHeight,
augmentedInvSizes,
rmInvItem,
updateCloseObjects,
updateRBList,
updateTerminal,
closeObjScrollDir,
closeObjectCol,
changeSwapInvSel,
changeAugInvSel,
crNumFreeSlots,
crInvSize,
selectedCloseObject,
invDimColor,
trimapAugmentInv,
setInvPosFromSS,
) where
import Control.Applicative
import Dodge.Data.SelectionList
import Color
import qualified Data.Map.Strict as M
@@ -41,7 +39,6 @@ import Dodge.Euse
import Dodge.Inventory.CheckSlots
import Dodge.Inventory.CloseObject
import Dodge.Inventory.Color
import Dodge.Inventory.ItemSpace
import Dodge.ItEffect
import Dodge.Reloading
import Geometry
@@ -112,42 +109,9 @@ rmSelectedInvItem cid w = case w ^? cWorld . lWorld . creatures . ix cid . crMan
Just i -> rmInvItem cid i w
Nothing -> w
augmentedInvSizes :: World -> IM.IntMap Int
augmentedInvSizes = trimapAugmentInv itSlotsTaken 1 closeObjectSize
trimapAugmentInv :: (Item -> a) -> a -> (Either FloorItem Button -> a) -> World -> IM.IntMap a
{-# INLINE trimapAugmentInv #-}
trimapAugmentInv f x g w =
IM.insert n x $
IM.union
(f <$> yourInv w)
(IM.fromAscList $ zip [n + 1 ..] $ map g $ w ^. hud . closeObjects)
where
n = length $ yourInv w
selSecSelSize :: Int -> Int -> SelectionSections a -> Maybe Int
selSecSelSize i j sss = fmap length $ sss ^? sssSections . ix i . ssItems . ix j . siPictures
invSelSize :: ManipulatedObject -> World -> Int
invSelSize mo w = case mo of
InInventory (SelItem i _) -> fromMaybe 1 $ fmap itSlotsTaken
$ w ^? cWorld . lWorld . creatures . ix 0 . crInv . ix i
InNearby (SelCloseObject i) -> fromMaybe 1 $ fmap closeObjectSize
$ w ^? hud . closeObjects . ix i
InInventory SortInventory -> 1
InNearby SortNearby -> 1
SelNothing -> 1
closeObjectSize :: Either FloorItem Button -> Int
closeObjectSize e = case e of
Left flit -> itSlotsTaken $ _flIt flit
Right _ -> 1
closeObjectCol :: Either FloorItem Button -> Color
closeObjectCol e = case e of
Left flit -> _itInvColor $ _flIt flit
Right _ -> yellow
selSecSelPos :: Int -> Int -> SelectionSections a -> Maybe Int
selSecSelPos i j sss = do
ss <- sss ^? sssSections . ix i
@@ -192,11 +156,8 @@ selNumEndMidHeight cfig ldp sss i j = do
hh = halfHeight cfig
hw = halfWidth cfig
selNumCol :: Int -> World -> Color
selNumCol i w = fromMaybe white $ trimapAugmentInv _itInvColor invDimColor closeObjectCol w IM.!? i
--invSelPos :: World -> Int
--invSelPos w = sum . fst $ IM.split (yourInvSel w) (augmentedInvSizes w)
selSecSelCol :: Int -> Int -> SelectionSections a -> Maybe Color
selSecSelCol i j sss = sss ^? sssSections . ix i . ssItems . ix j . siColor
updateTerminal :: World -> World
updateTerminal = checkTermDist
@@ -219,7 +180,10 @@ updateCloseObjects w =
newcloseobjects = unionBy closeObjEq oldCloseFiltered currentClose
updatecursorposifnecessary
= case w ^? cWorld . lWorld . creatures . ix 0 . crManipulation . manObject. inNearby . ispCloseObject of
Just i | i >= length newcloseobjects -> changeAugInvSel 1
Just i
| i >= length newcloseobjects -> changeAugInvSel 1
| isNothing (w ^? hud . hudElement . diSections . sssSections . ix 3 . ssItems . ix i)
-> changeAugInvSel (-1)
_ -> id
filt = filter $ \obj -> dist ypos (closeObjPos obj) < 40 && hasButtonLOS ypos (closeObjPos obj) w
ypos = _crPos $ you w
@@ -533,17 +497,9 @@ ssLookupGE' i sss = do
-- where
-- ninv = length (yourInv w)
bestCloseObjectIndex :: World -> Maybe Int
bestCloseObjectIndex w = findIndex f $ w ^. hud . closeObjects
where
f (Right _) = True
f (Left flit) = itSlotsTaken (_flIt flit) <= _crInvCapacity ycr - crInvSize ycr
ycr = you w
selectedCloseObject :: World -> Maybe (Either FloorItem Button)
selectedCloseObject w = do
i <- you w ^? crManipulation . manObject . inNearby . ispCloseObject
<|> fmap fst (IM.lookupMin =<< w ^? hud . hudElement . diSections . sssSections . ix 3 . ssItems)
w ^? hud . closeObjects . ix i
selectedCloseObject :: World -> Maybe (Int, Either FloorItem Button)
selectedCloseObject w = case you w ^? crManipulation . manObject . inNearby . ispCloseObject of
Just i -> selectNthCloseObject w i
Nothing -> selectNthCloseObject w =<< bestCloseObjectIndex w
selectNthCloseObject :: World -> Int -> Maybe (Int, Either FloorItem Button)
selectNthCloseObject w n = (length (yourInv w) + n + 1,) <$> (_closeObjects (_hud w) !? n)