Fix space leak in inventory display.

This is done by wrapping values in what seems to be an unnecessary list.
I do not know exactly why this works, lazyness/compiler optimisations?
This commit is contained in:
2025-01-06 00:30:31 +00:00
parent 2dd0d14b8c
commit 76fc8d968d
2 changed files with 117 additions and 81 deletions
+43 -6
View File
@@ -49,15 +49,31 @@ invSelectionItem w indent loc =
pics = itemDisplay w cr ci
itemDisplay :: World -> Creature -> ComposedItem -> [String]
itemDisplay w cr ci =
zipWithDefaults
id
(leftPad 15 ' ')
itemDisplayPad
itemDisplay w cr ci = f
(basicItemDisplay itm)
(itemNumberDisplay w cr ci)
`g` anyhotkey
where
itm = ci ^. _1
NInt itid = itm ^. itID
f (x:xs) (y:_) = itemDisplayPad x y : xs
f xs _ = xs
g (x:xs) (y:_) = (rightPad 15 ' ' x ++ y) : xs
g xs _ = xs
-- anyhotkey = [" [E]"]
anyhotkey = maybe [] ((:[]) . hotkeyToString)
(w ^? cWorld . lWorld . imHotkeys . unNIntMap . ix itid)
--itemDisplay :: World -> Creature -> ComposedItem -> [String]
--itemDisplay w cr ci =
-- zipWithDefaults
-- id
-- (leftPad 15 ' ')
-- itemDisplayPad
-- (basicItemDisplay itm)
-- (itemNumberDisplay w cr ci)
-- where
-- itm = ci ^. _1
zipWithDefaults :: (a -> c) -> (b -> c) -> (a -> b -> c) -> [a] -> [b] -> [c]
zipWithDefaults f g h = go
@@ -74,6 +90,28 @@ itemDisplayPad ls rs
-- this can change, but probably won't when (say) dropped and then picked up
-- again
-- that is to say, it should not change based on functional positioning
--itemNumberDisplay :: World -> Creature -> ComposedItem -> String
--itemNumberDisplay w cr ci
-- | Just x <- ci ^? _1 . itUse . uInt = show x
-- | Just x <- ci ^? _1 . itUse . useToggle = show x
-- | ITEMSCAN <- ci ^. _1 . itType
-- , Just ExamineInventory <- w ^? hud . hudElement . subInventory
-- = "ACTIVE"
-- | EQUIP WRIST_ECG <- ci ^. _1 . itType =
-- displayPulse $ cr ^?! crType . avatarPulse . pulseProgress
-- | HELD ALTERIFLE <- ci ^. _1 . itType =
-- case ci ^? _1 . itUse . heldAim . aimMuzzles . ix 0 . mzAmmoSlot of
-- Just 0 -> "/"
-- _ -> "\\"
-- | isJust $ ci ^? _1 . itTargeting . itTgPos . _Just =
-- "!TARG!"
-- | Just x <- ci ^? _1 . itConsumables . magLoadStatus . iaLoaded = shortShow x
-- | UseAttach (APInt i) <- ci ^. _1 . itUse = show i
-- | UseAttach (APProjectiles x) <- ci ^. _1 . itUse = show x
-- | UseScope OpticScope{_opticZoom = x} <- ci ^. _1 . itUse = shortShow x
-- | Just t <- ci ^? _1 . itType . ibtIntroScanType = introScanDisplay cr t
-- | otherwise = mempty
itemNumberDisplay :: World -> Creature -> ComposedItem -> [String]
itemNumberDisplay w cr ci
| Just x <- ci ^? _1 . itUse . uInt = [show x]
@@ -91,7 +129,6 @@ itemNumberDisplay w cr ci
["!TARG!"]
| Just x <- ci ^? _1 . itConsumables . magLoadStatus . iaLoaded = [shortShow x]
| UseAttach (APInt i) <- ci ^. _1 . itUse = [show i]
-- | UseAttach (APLinkProjectile i) <- ci ^. _1 . itUse = [show i]
| UseAttach (APProjectiles x) <- ci ^. _1 . itUse = [show x]
| UseScope OpticScope{_opticZoom = x} <- ci ^. _1 . itUse = [shortShow x]
| Just t <- ci ^? _1 . itType . ibtIntroScanType = [introScanDisplay cr t]