From e69abf1715214c3d3f07d79dfc532ea182a1437c Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 12 Sep 2024 18:14:52 +0100 Subject: [PATCH] Implement simple indenting in selection menu --- ghcidOutput | 51 +-------- src/Dodge/Data/DoubleTree.hs | 15 +++ src/Dodge/DisplayInventory.hs | 11 +- src/Dodge/DoubleTree.hs | 36 ++++++ src/Dodge/Inventory/SelectionList.hs | 23 +++- src/Dodge/Item/Grammar.hs | 159 +++++++++++++-------------- src/Dodge/Render/List.hs | 4 - tags | 144 ++++++++++++------------ 8 files changed, 226 insertions(+), 217 deletions(-) diff --git a/ghcidOutput b/ghcidOutput index 8b77f4f16..df65d6901 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1,50 +1 @@ -/home/justin/Haskell/loop/src/Dodge/Render/List.hs:80:1-21: warning: [-Wunused-top-binds] - Defined but not used: ‘drawTreeYgapScaleYoff’ - | -80 | drawTreeYgapScaleYoff ygap s i = undefined - | ^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/Render/List.hs:80:23-26: warning: [-Wunused-matches] - Defined but not used: ‘ygap’ - | -80 | drawTreeYgapScaleYoff ygap s i = undefined - | ^^^^ -/home/justin/Haskell/loop/src/Dodge/Render/List.hs:80:28: warning: [-Wunused-matches] - Defined but not used: ‘s’ - | -80 | drawTreeYgapScaleYoff ygap s i = undefined - | ^ -/home/justin/Haskell/loop/src/Dodge/Render/List.hs:80:30: warning: [-Wunused-matches] - Defined but not used: ‘i’ - | -80 | drawTreeYgapScaleYoff ygap s i = undefined - | ^ -/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:12:1-28: warning: [-Wunused-imports] - The import of ‘Dodge.Data.DoubleTree’ is redundant - | -12 | import Dodge.Data.DoubleTree - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:15:1-48: warning: [-Wunused-imports] - The qualified import of ‘Data.IntMap.Merge.Strict’ is redundant - | -15 | import qualified Data.IntMap.Merge.Strict as MIM - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:27:1-25: warning: [-Wunused-imports] - The import of ‘Dodge.Item.Grammar’ is redundant - | -27 | import Dodge.Item.Grammar - | ^^^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:119:5-13: warning: [-Wunused-local-binds] - Defined but not used: ‘addindent’ - | -119 | addindent x y = y & siPictures %~ map (x ++) - | ^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:254:1-23: warning: [-Wunused-top-binds] - Defined but not used: ‘displaySelectionSection’ - | -254 | displaySelectionSection ss = undefined - | ^^^^^^^^^^^^^^^^^^^^^^^ -/home/justin/Haskell/loop/src/Dodge/DisplayInventory.hs:254:25-26: warning: [-Wunused-matches] - Defined but not used: ‘ss’ - | -254 | displaySelectionSection ss = undefined - | ^^ +All good (615 modules, at 18:14:34) diff --git a/src/Dodge/Data/DoubleTree.hs b/src/Dodge/Data/DoubleTree.hs index bf812a6c4..2efd4c361 100644 --- a/src/Dodge/Data/DoubleTree.hs +++ b/src/Dodge/Data/DoubleTree.hs @@ -17,9 +17,24 @@ data DoubleTreeNodeType | DTMidBelowNode | DTBottomNode +-- for each child, records the link type to the father node +data LabelDoubleTreeNodeType a + = LDTRootNode + | LDTTopNode a + | LDTMidAboveNode a + | LDTMidBelowNode a + | LDTBottomNode a + data DoubleTree a = DT {_dtValue :: a,_dtLeft :: [DoubleTree a],_dtRight :: [DoubleTree a]} deriving (Eq,Ord,Show,Read) +--data FLatLabelDoubleTreeNode b a = FLDT +-- {_fldtValue :: a +-- ,_fldtType :: +-- ,_fldtIndentation :: Int +-- ,_fldtID :: Int +-- ,_fldtChildren = + data LabelDoubleTree b a = LDT {_ldtValue :: a, _ldtLeft :: [(b,LabelDoubleTree b a)] ,_ldtRight :: [(b,LabelDoubleTree b a)]} deriving (Eq,Ord,Show,Read) diff --git a/src/Dodge/DisplayInventory.hs b/src/Dodge/DisplayInventory.hs index 6f6765734..c98cef857 100644 --- a/src/Dodge/DisplayInventory.hs +++ b/src/Dodge/DisplayInventory.hs @@ -9,10 +9,9 @@ module Dodge.DisplayInventory ( updateCombinePositioning, ) where -import Dodge.Data.DoubleTree import Control.Monad import qualified Data.IntMap.Strict as IM -import qualified Data.IntMap.Merge.Strict as MIM +--import qualified Data.IntMap.Merge.Strict as MIM import Data.Maybe import Dodge.Base.You import Dodge.Combine @@ -116,9 +115,8 @@ updateDisplaySections w cfig sss = map closeObjectToSelectionItem (w ^. hud . closeObjects) --invitems' = MIM.merge MIM.dropMissing MIM.dropMissing (MIM.zipWithMatched $ const addindent) indents $ IM.mapWithKey (invSelectionItem cr) inv invitems' = IM.mapWithKey (invSelectionItem cr) inv - addindent x y = y & siPictures %~ map (x ++) cr = you w - inv = _crInv (you w) + inv = invIndentIM $ _crInv (you w) --indents = indentInv inv --inv = indentInv $ _crInv (you w) nfreeslots = crNumFreeSlots cr @@ -150,7 +148,7 @@ updateInventorySectionItems w = where f olditems = fromMaybe olditems $ do cr <- w ^? cWorld . lWorld . creatures . ix 0 - invitms <- IM.mapWithKey (invSelectionItem cr) <$> cr ^? crInv + invitms <- IM.mapWithKey (invSelectionItem' cr) <$> cr ^? crInv return $ case w ^? hud . hudElement . diSections . sssExtra . sssFilters . ix (-1) . _Just of Just str -> IM.filter (plainRegex str) invitms _ -> invitms @@ -250,9 +248,6 @@ updateSection sis mcsel availablelines ss = h (_, str) = translate (fromIntegral (_ssIndent ss) * 100) 0 str theindent = replicate (_ssIndent ss) ' ' -displaySelectionSection :: SelectionSection a -> Picture -displaySelectionSection ss = undefined - listSelectionColorPicture :: Foldable t => t (SelectionItem a) -> [(Color,Picture)] listSelectionColorPicture = foldMap f where diff --git a/src/Dodge/DoubleTree.hs b/src/Dodge/DoubleTree.hs index 8758106f9..3b8f36d4d 100644 --- a/src/Dodge/DoubleTree.hs +++ b/src/Dodge/DoubleTree.hs @@ -2,6 +2,9 @@ module Dodge.DoubleTree where import Dodge.Data.DoubleTree +ldtToDT :: LabelDoubleTree b a -> DoubleTree a +ldtToDT (LDT x l r) = DT x (map (ldtToDT . snd) l) (map (ldtToDT . snd) r) + -- conceptually, in a tree growing from left to right, -- bottom -> top is equated with left -> right. -- this does not match with thinking of a list as top -> bottom, so take care @@ -15,6 +18,30 @@ dtIL nt (DT x l r) = map doindent (concat (headMap (dtIL DTBottomNode) (dtIL DTM where doindent (a,b,c) = (a,b+1,c) +ldtToIndentList :: LabelDoubleTree b a -> [(a,Int,LabelDoubleTreeNodeType b)] +ldtToIndentList = ldtIL LDTRootNode + +ldtIL :: LabelDoubleTreeNodeType b -> LabelDoubleTree b a -> [(a,Int,LabelDoubleTreeNodeType b)] +ldtIL nt (LDT x l r) = map doindent + (concat + (headMap + (\(lab,c) -> ldtIL (LDTBottomNode lab) c) + (\(lab,c) -> ldtIL (LDTMidBelowNode lab) c) + l + ) + ) + ++ [(x,0,nt)] + ++ map doindent + (concat + (lastMap + (\(lab,c) -> ldtIL (LDTTopNode lab) c) + (\(lab,c) -> ldtIL (LDTMidAboveNode lab) c) + r + ) + ) + where + doindent (a,b,c) = (a,b+1,c) + headMap :: (a -> b) -> (a -> b) -> [a] -> [b] headMap f g (x:xs) = f x : map g xs headMap _ _ [] = [] @@ -24,3 +51,12 @@ lastMap _ _ [] = [] lastMap f _ (x:[]) = [f x] lastMap f g (x:xs) = g x : lastMap f g xs +prettyDT :: (a -> String) -> DoubleTree a -> [String] +prettyDT f (DT x l r) = concatMap (map ('/':) . prettyDT f) r + ++ (f x : concatMap (map ('\\':) . prettyDT f) l) + +prettyLDT :: (a -> String) -> LabelDoubleTree b a -> [String] +prettyLDT f (LDT x l r) = concatMap (map ('/':) . prettyLDT f . snd) r + ++ (f x : concatMap (map ('\\':) . prettyLDT f . snd) l) + + diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index de16cdac1..2e4a14dbf 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -1,5 +1,6 @@ module Dodge.Inventory.SelectionList ( invSelectionItem, + invSelectionItem', closeObjectToSelectionItem, ) where @@ -13,8 +14,8 @@ import Dodge.Item.InventoryColor import LensHelp import Picture.Base -invSelectionItem :: Creature -> Int -> Item -> SelectionItem () -invSelectionItem cr i it = +invSelectionItem' :: Creature -> Int -> Item -> SelectionItem () +invSelectionItem' cr i it = SelectionItem { _siPictures = pics & ix 0 %~ (++ anyequippos ++ anyhotkey) , _siHeight = itSlotsTaken it @@ -31,6 +32,24 @@ invSelectionItem cr i it = UndroppableIdentified -> itemDisplay cr it _ -> itemDisplay cr it +invSelectionItem :: Creature -> Int -> (Item,Int,a) -> SelectionItem () +invSelectionItem cr i (it,indent,_) = + SelectionItem + { _siPictures = pics & ix 0 %~ (++ anyequippos ++ anyhotkey) + , _siHeight = itSlotsTaken it + , _siIsSelectable = True + , _siColor = col + , _siOffX = indent + , _siPayload = () + } + where + anyhotkey = maybe [] ((' ':) .hotkeyToString) (cr ^? crInvHotkeys . ix i) + anyequippos = maybe [] (rightPad 8 ' ' . (' ':) . eqPosText) (cr ^? crInvEquipped . ix i) + col = itemInvColor it + pics = case _itCurseStatus it of + UndroppableIdentified -> itemDisplay cr it + _ -> itemDisplay cr it + hotkeyToString :: Hotkey -> String hotkeyToString x = case x of HotkeyQ -> "[Q]" diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index 20e380f0a..83be871d6 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -14,28 +14,20 @@ import qualified Data.IntMap.Strict as IM import Control.Lens import Dodge.DoubleTree -type PCI = (ComposedItem, [ComposedItem], [ComposedItem]) - -type PCI' = (Item,ComposedItem,[ComposedItem], [ComposedItem]) - -type PCI'' = (Item,ComposedItem,[(ComposeLinkType,ComposedItem)], [(ComposeLinkType,ComposedItem)]) +type ComposedItemStructure + = (Item,ComposedItem,[(ComposeLinkType,ComposedItem)], [(ComposeLinkType,ComposedItem)]) type CIL = (ComposedItem,[(ComposeLinkType,ComposedItem)], [(ComposeLinkType,ComposedItem)]) +cisToItem :: ComposedItemStructure -> Item +cisToItem (x,_,_,_) = x + singleDT :: a -> DoubleTree a singleDT x = DT x [] [] singleLDT :: a -> LabelDoubleTree b a singleLDT x = LDT x [] [] -baseComposedItem :: ItemBaseType -> PCI -baseComposedItem ibt = case ibt of - HELD BURSTRIFLE -> (WeaponCI, [BulletAmmoCI], []) - AMMOMAG TINMAG -> (BulletAmmoCI, [AmmoModifierCI], []) - AMMOMAG DRUMMAG -> (BulletAmmoCI, [AmmoModifierCI], []) - ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI, [], []) - _ -> (UncomposableCI, [], []) - baseComposedItem' :: ItemBaseType -> CIL baseComposedItem' ibt = case ibt of HELD BURSTRIFLE -> (WeaponCI, [(AmmoInLink,BulletAmmoCI)], []) @@ -44,31 +36,24 @@ baseComposedItem' ibt = case ibt of ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI, [], []) _ -> (UncomposableCI, [], []) -basePCI :: Item -> PCI'' -basePCI itm = let (a,b,c) = baseComposedItem' (itm ^. itType . iyBase) +baseCIS :: Item -> ComposedItemStructure +baseCIS itm = let (a,b,c) = baseComposedItem' (itm ^. itType . iyBase) in (itm, a, b, c) -baseCI :: Item -> PCI' -baseCI itm = let (a,b,c) = baseComposedItem (itm ^. itType . iyBase) - in (itm, a, b, c) - -combineMaybe :: (a -> a -> Maybe b) -> (a -> a -> b -> a) -> a -> a -> Maybe a -combineMaybe t f x y = fmap (f x y) (t x y) - type LDTTest a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe b type LDTCombine a b = LabelDoubleTree b a -> LabelDoubleTree b a -> b -> LabelDoubleTree b a type LDTComb a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDoubleTree b a) -- the following imposes a strict ordering on the possible attachments -leftIsParentCombine :: LDTComb PCI'' ComposeLinkType +leftIsParentCombine :: LDTComb ComposedItemStructure ComposeLinkType leftIsParentCombine (LDT (itm,p,lc,rc) lt rt) t'@(LDT (_,p',_,_) _ _) = do let f (_,x) = p' == x (_,ys) = break f rc (linktype,_) <- safeHead ys return $ LDT (itm,p,lc,tail ys) lt (rt ++ [(linktype,t')]) -rightIsParentCombine :: LDTComb PCI'' ComposeLinkType +rightIsParentCombine :: LDTComb ComposedItemStructure ComposeLinkType rightIsParentCombine t'@(LDT (_,p',_,_) _ _) (LDT (itm,p,lc,rc) lt rt) = do let f (_,x) = p' == x (_,ys) = break f lc @@ -86,19 +71,6 @@ leftRightCombine f f' t1 t2 = f t1 t2 return $ Just $ LDT x ((lab,tx):tail ls) rs checktop t t' = f' t t' -joinItems :: DoubleTree PCI' -> DoubleTree PCI' -> Maybe (DoubleTree PCI') -joinItems t@(DT (itm,px,lc',rc') ls' rs') s@(DT (_,py,_,_) _ _) - | py `elem` rc' = Just (DT (itm,px,lc', delete py rc') ls' (rs' ++ [s])) - | otherwise = checkdepth t s - where - checkdepth a a'@(DT b ls rs) = fromMaybe (checktop a a') $ do - c <- safeHead ls - d <- checkdepth a c - return $ Just $ DT b (d:tail ls) rs - checktop a@(DT (_,pa,_,_) _ _) (DT (itm2,pb,lc,rc) ls rs) - | pa `elem` lc = Just (DT (itm2,pb, delete pa lc,rc) (a:ls) rs) - | otherwise = Nothing - joinItemsInList :: (a -> a -> Maybe a) -> [a] -> [a] joinItemsInList f xs = snd $ h (xs,[]) where @@ -108,52 +80,79 @@ joinItemsInList f xs = snd $ h (xs,[]) Nothing -> h (ys, (y:z:zs)) Just w -> h ((w:ys),zs) -indentDoubleTreeWith :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a -indentDoubleTreeWith f g h (DT x l r) = DT x - (headMap (iDTL f g h) (iDTboth f g h) l) - (lastMap (iDTR f g h) (iDTboth f g h) r) - -iDTL :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a -iDTL fspace fline flink (DT x l r) = DT (flink x) - (map (fmap fspace . indentDoubleTreeWith fspace fline flink) l) - (map (fmap fline . indentDoubleTreeWith fspace fline flink) r) - -iDTR :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a -iDTR fspace fline flink (DT x l r) = DT (flink x) - (map (fmap fline . indentDoubleTreeWith fspace fline flink) l) - (map (fmap fspace . indentDoubleTreeWith fspace fline flink) r) - -iDTboth :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a -iDTboth fspace fline flink (DT x l r) = DT (flink x) - (map (fmap fline . indentDoubleTreeWith fspace fline flink) l) - (map (fmap fline . indentDoubleTreeWith fspace fline flink) r) - -flattenDT :: DoubleTree a -> [a] -flattenDT (DT x l r) = concatMap flattenDT l ++ (x : concatMap flattenDT r) - -prettyDT :: (a -> String) -> DoubleTree a -> [String] -prettyDT f (DT x l r) = concatMap (map ('/':) . prettyDT f) r - ++ (f x : concatMap (map ('\\':) . prettyDT f) l) - -prettyLDT :: (a -> String) -> LabelDoubleTree b a -> [String] -prettyLDT f (LDT x l r) = concatMap (map ('/':) . prettyLDT f . snd) r - ++ (f x : concatMap (map ('\\':) . prettyLDT f . snd) l) - -invTree :: IM.IntMap Item -> [String] -invTree = concatMap (prettyDT (\(itm,_,_,_) -> show (_itType itm))) . - joinItemsInList joinItems . IM.elems . fmap (singleDT . baseCI) - ---indentInv :: IM.IntMap Item -> IM.IntMap String ---indentInv = IM.fromList . zip [0..] . --- reverse . concatMap (flattenDT .indentDoubleTreeWith (' ':) ('|':) ('+':) . fmap (const "")) . --- joinItemsInList joinItems . IM.elems . fmap (singleDT . baseCI) - ---invLDT :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType PCI''] -invLDT :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType PCI''] +invLDT :: IM.IntMap Item -> [LabelDoubleTree ComposeLinkType ComposedItemStructure] invLDT = joinItemsInList (leftRightCombine leftIsParentCombine rightIsParentCombine) . IM.elems . - fmap (singleLDT . basePCI) + fmap (singleLDT . baseCIS) + +invIndentIM' :: IM.IntMap Item -> IM.IntMap (Item,Int, ()) +invIndentIM' = fmap (\x -> (x,0,())) + +invIndentIM :: IM.IntMap Item -> IM.IntMap (Item,Int, LabelDoubleTreeNodeType ComposeLinkType ) +invIndentIM = IM.fromAscList . zip [0..] . reverse . map (over _1 cisToItem) . concatMap ldtToIndentList . invLDT --indentInv :: IM.IntMap Item -> [String] --indentInv = concat . fmap (flattenDT . indentDoubleTreeWith (' ':) ('|':) ('+':) . fmap const "") -- . joinItemsInList joinItems -- . IM.toList . fmap (singleDT . baseComposedItem) +-- +--type PCI = (ComposedItem, [ComposedItem], [ComposedItem]) +-- +--type PCI' = (Item,ComposedItem,[ComposedItem], [ComposedItem]) + +--baseComposedItem :: ItemBaseType -> PCI +--baseComposedItem ibt = case ibt of +-- HELD BURSTRIFLE -> (WeaponCI, [BulletAmmoCI], []) +-- AMMOMAG TINMAG -> (BulletAmmoCI, [AmmoModifierCI], []) +-- AMMOMAG DRUMMAG -> (BulletAmmoCI, [AmmoModifierCI], []) +-- ATTACH BULLETSYNTHESIZER -> (AmmoModifierCI, [], []) +-- _ -> (UncomposableCI, [], []) +-- +--baseCI :: Item -> PCI' +--baseCI itm = let (a,b,c) = baseComposedItem (itm ^. itType . iyBase) +-- in (itm, a, b, c) +-- +--joinItems :: DoubleTree PCI' -> DoubleTree PCI' -> Maybe (DoubleTree PCI') +--joinItems t@(DT (itm,px,lc',rc') ls' rs') s@(DT (_,py,_,_) _ _) +-- | py `elem` rc' = Just (DT (itm,px,lc', delete py rc') ls' (rs' ++ [s])) +-- | otherwise = checkdepth t s +-- where +-- checkdepth a a'@(DT b ls rs) = fromMaybe (checktop a a') $ do +-- c <- safeHead ls +-- d <- checkdepth a c +-- return $ Just $ DT b (d:tail ls) rs +-- checktop a@(DT (_,pa,_,_) _ _) (DT (itm2,pb,lc,rc) ls rs) +-- | pa `elem` lc = Just (DT (itm2,pb, delete pa lc,rc) (a:ls) rs) +-- | otherwise = Nothing +-- +--invTree :: IM.IntMap Item -> [String] +--invTree = concatMap (prettyDT (\(itm,_,_,_) -> show (_itType itm))) . +-- joinItemsInList joinItems . IM.elems . fmap (singleDT . baseCI) + +--indentInv :: IM.IntMap Item -> IM.IntMap String +--indentInv = IM.fromList . zip [0..] . +-- reverse . concatMap (flattenDT .indentDoubleTreeWith (' ':) ('|':) ('+':) . fmap (const "")) . +-- joinItemsInList joinItems . IM.elems . fmap (singleDT . baseCI) +-- +--indentDoubleTreeWith :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a +--indentDoubleTreeWith f g h (DT x l r) = DT x +-- (headMap (iDTL f g h) (iDTboth f g h) l) +-- (lastMap (iDTR f g h) (iDTboth f g h) r) +-- +--iDTL :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a +--iDTL fspace fline flink (DT x l r) = DT (flink x) +-- (map (fmap fspace . indentDoubleTreeWith fspace fline flink) l) +-- (map (fmap fline . indentDoubleTreeWith fspace fline flink) r) +-- +--iDTR :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a +--iDTR fspace fline flink (DT x l r) = DT (flink x) +-- (map (fmap fline . indentDoubleTreeWith fspace fline flink) l) +-- (map (fmap fspace . indentDoubleTreeWith fspace fline flink) r) +-- +--iDTboth :: (a -> a) -> (a -> a) -> (a -> a) -> DoubleTree a -> DoubleTree a +--iDTboth fspace fline flink (DT x l r) = DT (flink x) +-- (map (fmap fline . indentDoubleTreeWith fspace fline flink) l) +-- (map (fmap fline . indentDoubleTreeWith fspace fline flink) r) + +--combineMaybe :: (a -> a -> Maybe b) -> (a -> a -> b -> a) -> a -> a -> Maybe a +--combineMaybe t f x y = fmap (f x y) (t x y) + diff --git a/src/Dodge/Render/List.hs b/src/Dodge/Render/List.hs index 280f198f5..3f68196b8 100644 --- a/src/Dodge/Render/List.hs +++ b/src/Dodge/Render/List.hs @@ -12,7 +12,6 @@ module Dodge.Render.List ( listCursorChooseBorderScale, ) where -import Dodge.Data.DoubleTree import Dodge.SelectionSections import Data.Maybe import Dodge.Base.Window @@ -76,9 +75,6 @@ getLDPWidth ldps = case _ldpWidth ldps of drawListYoff :: Int -> [Picture] -> Picture drawListYoff = drawListYgapScaleYoff 0 1 -drawTreeYgapScaleYoff :: Float -> Float -> Int -> DoubleTree [Picture] -> Picture -drawTreeYgapScaleYoff ygap s i = undefined - drawListYgapScaleYoff :: Float -> Float -> Int -> [Picture] -> Picture drawListYgapScaleYoff ygap s i = mconcat . zipWith (drawListElement ygap s 0) [i ..] diff --git a/tags b/tags index a54ed5491..88ac25572 100644 --- a/tags +++ b/tags @@ -338,7 +338,7 @@ CAN src/Dodge/Data/Item/Combine.hs 36;" C CDoNothing src/Dodge/Data/Item/HeldUse.hs 34;" C CHARTREUSE src/Color/Data.hs 25;" C CHeal src/Dodge/Data/Item/HeldUse.hs 35;" C -CIL src/Dodge/Item/Grammar.hs 23;" t +CIL src/Dodge/Item/Grammar.hs 20;" t CIRCLE src/Dodge/Data/GenParams.hs 20;" C CONCUSBUL src/Dodge/Combine/Data.hs 206;" C CONCUSSIVE src/Dodge/Data/Damage/Type.hs 22;" C @@ -457,6 +457,7 @@ Compose src/Dodge/Tree/Compose.hs 4;" m ComposeLinkType src/Dodge/Data/ComposedItem.hs 12;" t ComposedItem src/Dodge/Data/ComposedItem.hs 15;" t ComposedItem src/Dodge/Data/ComposedItem.hs 6;" m +ComposedItemStructure src/Dodge/Item/Grammar.hs 17;" t Composite src/Picture/Composite.hs 1;" m ComsSS src/Dodge/Data/Scenario.hs 98;" C ConcBall src/Dodge/Data/Bullet.hs 32;" C @@ -590,7 +591,7 @@ DRUM src/Dodge/Combine/Data.hs 34;" C DRUMMAG src/Dodge/Combine/Data.hs 199;" C DRUMMAG src/Dodge/Data/Item/Combine.hs 112;" C DS src/DoubleStack.hs 3;" t -DT src/Dodge/Data/DoubleTree.hs 20;" C +DT src/Dodge/Data/DoubleTree.hs 28;" C DTBottomNode src/Dodge/Data/DoubleTree.hs 18;" C DTMidAboveNode src/Dodge/Data/DoubleTree.hs 16;" C DTMidBelowNode src/Dodge/Data/DoubleTree.hs 17;" C @@ -734,7 +735,7 @@ DoorPart src/Dodge/Data/Wall.hs 50;" C DoorStatus src/Dodge/Data/Door.hs 23;" t DoubleRes src/Dodge/Data/Config.hs 95;" C DoubleStack src/DoubleStack.hs 1;" m -DoubleTree src/Dodge/Data/DoubleTree.hs 20;" t +DoubleTree src/Dodge/Data/DoubleTree.hs 28;" t DoubleTree src/Dodge/Data/DoubleTree.hs 5;" m DoubleTree src/Dodge/DoubleTree.hs 1;" m DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 13;" t @@ -1351,10 +1352,15 @@ LAUNCHHOME src/Dodge/Data/Item/Combine.hs 218;" C LBlink src/Dodge/Data/Item/HeldUse.hs 63;" C LBoost src/Dodge/Data/Item/HeldUse.hs 65;" C LBranches src/TreeExtra.hs 24;" C -LDT src/Dodge/Data/DoubleTree.hs 23;" C -LDTComb src/Dodge/Item/Grammar.hs 61;" t -LDTCombine src/Dodge/Item/Grammar.hs 59;" t -LDTTest src/Dodge/Item/Grammar.hs 58;" t +LDT src/Dodge/Data/DoubleTree.hs 31;" C +LDTBottomNode src/Dodge/Data/DoubleTree.hs 26;" C +LDTComb src/Dodge/Item/Grammar.hs 46;" t +LDTCombine src/Dodge/Item/Grammar.hs 44;" t +LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 24;" C +LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 25;" C +LDTRootNode src/Dodge/Data/DoubleTree.hs 22;" C +LDTTest src/Dodge/Item/Grammar.hs 43;" t +LDTTopNode src/Dodge/Data/DoubleTree.hs 23;" C LDoNothing src/Dodge/Data/Item/HeldUse.hs 58;" C LED src/Dodge/Combine/Data.hs 51;" C LED src/Dodge/Data/Item/Combine.hs 57;" C @@ -1383,7 +1389,8 @@ Label src/Dodge/Render/Label.hs 1;" m LabelAction src/Dodge/Data/ActionPlan.hs 79;" C LabelCluster src/Dodge/Data/RoomCluster.hs 14;" C LabelCluster src/Dodge/RoomCluster/Data.hs 12;" C -LabelDoubleTree src/Dodge/Data/DoubleTree.hs 23;" t +LabelDoubleTree src/Dodge/Data/DoubleTree.hs 31;" t +LabelDoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 21;" t LabelLayer src/Dodge/Picture/Layer/Data.hs 11;" C Laboratory src/Dodge/Data/Scenario.hs 61;" C Lamp src/Dodge/Creature/Lamp.hs 1;" m @@ -1856,9 +1863,6 @@ P2Ac src/Dodge/Data/CreatureEffect.hs 53;" t P2Imp src/Dodge/Data/CreatureEffect.hs 28;" t P2ImpNo src/Dodge/Data/CreatureEffect.hs 28;" C P2NoAction src/Dodge/Data/CreatureEffect.hs 53;" C -PCI src/Dodge/Item/Grammar.hs 17;" t -PCI' src/Dodge/Item/Grammar.hs 19;" t -PCI'' src/Dodge/Item/Grammar.hs 21;" t PENBUL src/Dodge/Combine/Data.hs 204;" C PENMODULE src/Dodge/Combine/Data.hs 70;" C PIERCING src/Dodge/Data/Damage/Type.hs 12;" C @@ -3317,9 +3321,9 @@ _drSpeed src/Dodge/Data/Door.hs 45;" f _drStatus src/Dodge/Data/Door.hs 37;" f _drTrigger src/Dodge/Data/Door.hs 38;" f _drWallIDs src/Dodge/Data/Door.hs 36;" f -_dtLeft src/Dodge/Data/DoubleTree.hs 20;" f -_dtRight src/Dodge/Data/DoubleTree.hs 20;" f -_dtValue src/Dodge/Data/DoubleTree.hs 20;" f +_dtLeft src/Dodge/Data/DoubleTree.hs 28;" f +_dtRight src/Dodge/Data/DoubleTree.hs 28;" f +_dtValue src/Dodge/Data/DoubleTree.hs 28;" f _ebColor src/Dodge/Data/EnergyBall.hs 17;" f _ebEff src/Dodge/Data/EnergyBall.hs 21;" f _ebPos src/Dodge/Data/EnergyBall.hs 18;" f @@ -3570,9 +3574,9 @@ _ldpPos src/Dodge/Data/SelectionList.hs 19;" f _ldpScale src/Dodge/Data/SelectionList.hs 20;" f _ldpVerticalGap src/Dodge/Data/SelectionList.hs 21;" f _ldpWidth src/Dodge/Data/SelectionList.hs 23;" f -_ldtLeft src/Dodge/Data/DoubleTree.hs 23;" f -_ldtRight src/Dodge/Data/DoubleTree.hs 24;" f -_ldtValue src/Dodge/Data/DoubleTree.hs 23;" f +_ldtLeft src/Dodge/Data/DoubleTree.hs 31;" f +_ldtRight src/Dodge/Data/DoubleTree.hs 32;" f +_ldtValue src/Dodge/Data/DoubleTree.hs 31;" f _leadTargetBy src/Dodge/Data/ActionPlan.hs 150;" f _leftConsumption src/Dodge/Data/Item/Use.hs 44;" f _leftDelay src/Dodge/Data/Item/Use.hs 41;" f @@ -4446,11 +4450,11 @@ applyToSubtree src/Dodge/Tree/Polymorphic.hs 60;" f applyToSubtree src/TreeHelp.hs 70;" f applyWorldConfig src/Dodge/Config/Update.hs 38;" f aquamarine src/Color.hs 23;" f -arc src/Picture/Base.hs 286;" f +arc src/Picture/Base.hs 287;" f arcFull src/Picture/Arc.hs 11;" f arcNum src/Picture/Data.hs 53;" f arcPart src/Picture/Arc.hs 24;" f -arcSolid src/Picture/Base.hs 275;" f +arcSolid src/Picture/Base.hs 276;" f arcStepwise src/Geometry.hs 329;" f arcStepwisePositive src/Geometry.hs 343;" f arcTest src/Picture/Test.hs 9;" f @@ -4522,13 +4526,11 @@ baseAMRShape src/Dodge/Item/Draw/SPic.hs 445;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f baseBlockPane src/Dodge/Placements/Wall.hs 63;" f baseBlockPane src/Dodge/Room/Placement.hs 93;" f -baseCI src/Dodge/Item/Grammar.hs 51;" f +baseCIS src/Dodge/Item/Grammar.hs 36;" f baseCaneShape src/Dodge/Item/Draw/SPic.hs 251;" f -baseComposedItem src/Dodge/Item/Grammar.hs 31;" f -baseComposedItem' src/Dodge/Item/Grammar.hs 39;" f +baseComposedItem' src/Dodge/Item/Grammar.hs 28;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 38;" f -basePCI src/Dodge/Item/Grammar.hs 47;" f baseRifleShape src/Dodge/Item/Draw/SPic.hs 254;" f baseRodShape src/Dodge/Item/Draw/SPic.hs 442;" f baseSMGShape src/Dodge/Item/Draw/SPic.hs 413;" f @@ -4673,7 +4675,7 @@ changeTweakParam src/Dodge/Update/Scroll.hs 115;" f changeZonedWall src/Dodge/LevelGen/MoveDoor.hs 33;" f charFiringStratI src/Dodge/Item/Attachment.hs 15;" f charToPhaseV src/Dodge/Item/Weapon/Laser.hs 36;" f -charToTuple src/Picture/Base.hs 316;" f +charToTuple src/Picture/Base.hs 317;" f charToTupleGrad src/Picture/Text.hs 18;" f chargeIfEquipped src/Dodge/ItEffect.hs 51;" f chargeIfInInventory src/Dodge/ItEffect.hs 43;" f @@ -4785,7 +4787,7 @@ combineItemListYouX src/Dodge/Combine.hs 70;" f combineList src/Dodge/Combine.hs 78;" f combineList' src/Dodge/Combine.hs 83;" f combineListInfo src/Dodge/Combine.hs 96;" f -combineMaybe src/Dodge/Item/Grammar.hs 55;" f +combineMaybe src/Dodge/Item/Grammar.hs 40;" f combineModuleMaps src/Dodge/Combine.hs 107;" f combineRooms src/Dodge/Room/Procedural.hs 151;" f combineS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 344;" f @@ -5156,8 +5158,8 @@ displayConfig src/Dodge/Menu.hs 196;" f displayControls src/Dodge/Menu.hs 206;" f displayEnergyBallType src/Dodge/Module/Info.hs 19;" f displayFrameTicks src/Dodge/Render/Picture.hs 27;" f -displayFreeSlots src/Dodge/DisplayInventory.hs 160;" f -displaySelectionSection src/Dodge/DisplayInventory.hs 252;" f +displayFreeSlots src/Dodge/DisplayInventory.hs 161;" f +displaySelectionSection src/Dodge/DisplayInventory.hs 253;" f displayTerminal src/Dodge/Render/HUD.hs 210;" f displayTerminalLineString src/Dodge/Update.hs 325;" f dist src/Geometry/Vector.hs 179;" f @@ -5265,7 +5267,7 @@ doubleLampCover src/Dodge/LightSources/Lamp.hs 89;" f doubleLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 28;" f doublePair src/Geometry.hs 149;" f doublePairSet src/Geometry.hs 153;" f -doubleTreeToIndentList src/Dodge/DoubleTree.hs 5;" f +doubleTreeToIndentList src/Dodge/DoubleTree.hs 11;" f doubleV2 src/Geometry.hs 156;" f downSize src/Dodge/DownscaleSize.hs 3;" f drawAllShadows src/Dodge/Shadows.hs 5;" f @@ -5361,7 +5363,7 @@ drawSwitchWire src/Dodge/LevelGen/Switch.hs 28;" f drawTargetLaser src/Dodge/Particle/Draw.hs 6;" f drawTargeting src/Dodge/Targeting/Draw.hs 14;" f drawTeslaArc src/Dodge/Tesla/Arc/Draw.hs 7;" f -drawText src/Picture/Base.hs 219;" f +drawText src/Picture/Base.hs 220;" f drawTitle src/Dodge/Render/MenuScreen.hs 48;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f drawTreeYgapScaleYoff src/Dodge/Render/List.hs 79;" f @@ -5385,6 +5387,7 @@ dropExcept src/Dodge/Creature/Action.hs 178;" f dropItem src/Dodge/Creature/Action.hs 183;" f dropItemKey src/Dodge/Config/KeyConfig.hs 24;" f drumMag src/Dodge/Item/Ammo.hs 31;" f +dtIL src/Dodge/DoubleTree.hs 14;" f dualBeam src/Dodge/Item/Held/BatteryGuns.hs 136;" f dualBeamPic src/Dodge/Item/Draw/SPic.hs 472;" f dualRayAt src/Dodge/Item/Weapon/BatteryGuns.hs 144;" f @@ -5410,7 +5413,7 @@ encircleCloseP src/Dodge/Creature/Boid.hs 35;" f encircleDistP src/Dodge/Creature/Boid.hs 21;" f encircleP src/Dodge/Creature/Boid.hs 27;" f energyBallCraft src/Dodge/Item/Craftable.hs 18;" f -enterCombineInv src/Dodge/DisplayInventory.hs 262;" f +enterCombineInv src/Dodge/DisplayInventory.hs 264;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f equipAimSpeed src/Dodge/Creature/Action/Movement.hs 109;" f @@ -5511,7 +5514,6 @@ flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 489;" f flatV2 src/Picture/Data.hs 65;" f flatV3 src/Picture/Data.hs 68;" f flatV4 src/Picture/Data.hs 71;" f -flattenDT src/Dodge/Item/Grammar.hs 131;" f flattenIMIMIM src/Dodge/Base/Zone.hs 246;" f fleeFrom src/Dodge/CreatureEffect.hs 119;" f fleeFromTarget src/Dodge/CreatureEffect.hs 65;" f @@ -5699,7 +5701,7 @@ hatCombinations src/Dodge/Combine/Combinations.hs 33;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 118;" f headLampShape src/Dodge/Item/Draw/SPic.hs 495;" f -headMap src/Dodge/DoubleTree.hs 18;" f +headMap src/Dodge/DoubleTree.hs 45;" f heal src/Dodge/Item/Consumable.hs 17;" f heal25 src/Dodge/Item/Consumable.hs 14;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 354;" f @@ -5737,9 +5739,6 @@ hvBulDams src/Dodge/Particle/Damage.hs 13;" f hvBulHitCr src/Dodge/Particle/Bullet/HitEffect.hs 17;" f hvBulHitWall src/Dodge/Particle/Bullet/HitEffect.hs 54;" f hvBulletAmmo src/Dodge/Item/Weapon/Bullet.hs 31;" f -iDTL src/Dodge/Item/Grammar.hs 116;" f -iDTR src/Dodge/Item/Grammar.hs 121;" f -iDTboth src/Dodge/Item/Grammar.hs 126;" f iShape src/Dodge/Placement/Instance/LightSource.hs 74;" f iShape src/Dodge/Placements/LightSource.hs 32;" f icosahedronPoints src/Polyhedra/Geodesic.hs 11;" f @@ -5759,8 +5758,6 @@ incBallAt src/Dodge/EnergyBall.hs 54;" f incendiaryModule src/Dodge/Item/Craftable.hs 21;" f incidenceToFunction src/Dodge/Graph.hs 26;" f indefiniteExceptions src/StringHelp.hs 29;" f -indentDoubleTreeWith src/Dodge/Item/Grammar.hs 111;" f -indentInv src/Dodge/Item/Grammar.hs 146;" f initCrItemLocation src/Dodge/Item/Location/Initialize.hs 39;" f initCrItemLocations src/Dodge/Item/Location/Initialize.hs 34;" f initCrsItemLocations src/Dodge/Item/Location/Initialize.hs 14;" f @@ -5827,16 +5824,15 @@ intersectSegsSeg src/Geometry/Intersect.hs 232;" f intervalList src/Geometry.hs 315;" f interweave src/Justify.hs 17;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invDimColor src/Dodge/DisplayInventory.hs 141;" f +invDimColor src/Dodge/DisplayInventory.hs 142;" f invDimColor src/Dodge/Inventory/Color.hs 4;" f invDisplayParams src/Dodge/ListDisplayParams.hs 29;" f invHead src/Dodge/Render/HUD.hs 275;" f -invLDT src/Dodge/Item/Grammar.hs 152;" f +invLDT src/Dodge/Item/Grammar.hs 83;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 16;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f invSideEff src/Dodge/Creature/State.hs 232;" f invSize src/Dodge/Inventory/CheckSlots.hs 40;" f -invTree src/Dodge/Item/Grammar.hs 142;" f inventoryX src/Dodge/Creature.hs 115;" f inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 43;" f invertEncircleDistP src/Dodge/Creature/Boid.hs 13;" f @@ -5914,8 +5910,7 @@ jShape src/Dodge/Placement/Instance/LightSource.hs 86;" f jShape src/Dodge/Placements/LightSource.hs 43;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f jetPack src/Dodge/Item/Equipment.hs 92;" f -joinItems src/Dodge/Item/Grammar.hs 89;" f -joinItemsInList src/Dodge/Item/Grammar.hs 102;" f +joinItemsInList src/Dodge/Item/Grammar.hs 74;" f jps0' src/Dodge/LevelGen/Data.hs 60;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/Data.hs 63;" f @@ -5965,7 +5960,7 @@ lasTurret src/Dodge/Placement/Instance/Turret.hs 23;" f lasTurret src/Dodge/Placements/Turret.hs 29;" f lasWide src/Dodge/Item/Held/BatteryGuns.hs 97;" f lasWideRate src/Dodge/HeldUse.hs 353;" f -lastMap src/Dodge/DoubleTree.hs 22;" f +lastMap src/Dodge/DoubleTree.hs 49;" f latchkey src/Dodge/Item/Held/Utility.hs 23;" f latchkey src/Dodge/Item/PassKey.hs 14;" f launcher src/Dodge/Item/Held/Launcher.hs 10;" f @@ -5976,12 +5971,15 @@ launcherX src/Dodge/Item/Held/Launcher.hs 39;" f layerNum src/Picture/Data.hs 31;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 90;" f +ldtIL src/Dodge/DoubleTree.hs 24;" f +ldtToDT src/Dodge/DoubleTree.hs 5;" f +ldtToIndentList src/Dodge/DoubleTree.hs 21;" f left src/DoubleStack.hs 16;" f leftInfo src/Dodge/Item/Info.hs 110;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 64;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 49;" f leftItemSPic src/Dodge/Item/Draw/SPic.hs 72;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 78;" f +leftRightCombine src/Dodge/Item/Grammar.hs 63;" f legsSPic src/Dodge/Item/Draw/SPic.hs 529;" f liShape src/Dodge/Placement/Instance/LightSource.hs 99;" f liShape src/Dodge/Placements/LightSource.hs 55;" f @@ -5995,14 +5993,14 @@ lightSensor src/Dodge/Placements/Sensor.hs 27;" f lightsToRender src/Dodge/Render/Lights.hs 14;" f lightx4 src/Color.hs 141;" f linGrad src/Geometry/Intersect.hs 220;" f -line src/Picture/Base.hs 225;" f -lineCol src/Picture/Base.hs 229;" f +line src/Picture/Base.hs 226;" f +lineCol src/Picture/Base.hs 230;" f lineGeom src/Dodge/Base.hs 39;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 125;" f lineOutputTerminal src/Dodge/WorldEffect.hs 71;" f lineSplit src/Justify.hs 26;" f -lineThick src/Picture/Base.hs 233;" f +lineThick src/Picture/Base.hs 234;" f lineUp src/Dodge/Creature/Boid.hs 147;" f linkDecoration src/Dodge/Debug/LinkDecoration.hs 27;" f linkEitherTrees src/Dodge/Layout/Tree/Either.hs 36;" f @@ -6013,7 +6011,7 @@ listConfig src/Dodge/Menu.hs 199;" f listControls src/Dodge/Menu.hs 212;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 109;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 188;" f -listSelectionColorPicture src/Dodge/DisplayInventory.hs 255;" f +listSelectionColorPicture src/Dodge/DisplayInventory.hs 256;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 43;" f lnkBothAnd src/Dodge/Room/Procedural.hs 120;" f @@ -6230,8 +6228,8 @@ miniTree2 src/Dodge/Room/Room.hs 108;" f minimumOn src/FoldlHelp.hs 12;" f mirrorV3xz src/Dodge/Creature/HandPos.hs 52;" f mirrorXAxis src/Geometry/Polygon.hs 45;" f -mirrorxz src/Picture/Base.hs 334;" f -mirroryz src/Picture/Base.hs 339;" f +mirrorxz src/Picture/Base.hs 335;" f +mirroryz src/Picture/Base.hs 340;" f missileLaunchS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 482;" f mixAngles src/Geometry.hs 205;" f mixColors src/Color.hs 82;" f @@ -6409,7 +6407,7 @@ outLink src/Dodge/RoomLink.hs 105;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f outwardIntegers src/Dodge/Base.hs 159;" f overCID src/Dodge/Euse.hs 168;" f -overCol src/Picture/Base.hs 307;" f +overCol src/Picture/Base.hs 308;" f overColObj src/Shape.hs 269;" f overColSH src/Shape.hs 237;" f overLnkPosDir src/Dodge/RoomLink.hs 100;" f @@ -6417,7 +6415,7 @@ overLnkType src/Dodge/RoomLink.hs 87;" f overNozzle src/Dodge/HeldUse.hs 416;" f overNozzles src/Dodge/HeldUse.hs 394;" f overNozzles' src/Dodge/HeldUse.hs 403;" f -overPos src/Picture/Base.hs 302;" f +overPos src/Picture/Base.hs 303;" f overPosObj src/Shape.hs 273;" f overPosSH src/Shape.hs 257;" f overPosSP src/ShapePicture.hs 41;" f @@ -6518,7 +6516,7 @@ placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 78;" f placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 59;" f placeString src/Dodge/Render/MenuScreen.hs 54;" f placeWallPoly src/Dodge/Placement/PlaceSpot.hs 154;" f -plainRegex src/Dodge/DisplayInventory.hs 157;" f +plainRegex src/Dodge/DisplayInventory.hs 158;" f plainShellCollisionCheck src/Dodge/Projectile/Update.hs 45;" f plateCraft src/Dodge/Item/Craftable.hs 47;" f playIfFree src/Sound.hs 136;" f @@ -6632,8 +6630,8 @@ prependTwo src/Geometry.hs 165;" f pressedMBEffects src/Dodge/Update/UsingInput.hs 27;" f pressedMBEffectsNoInventory src/Dodge/Update/UsingInput.hs 40;" f pressedMBEffectsTopInventory src/Dodge/Creature/YourControl.hs 206;" f -prettyDT src/Dodge/Item/Grammar.hs 134;" f -prettyLDT src/Dodge/Item/Grammar.hs 138;" f +prettyDT src/Dodge/Data/DoubleTree.hs 44;" f +prettyLDT src/Dodge/Data/DoubleTree.hs 48;" f primeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 422;" f printColumnTitles src/Dodge/Tree/Shift.hs 142;" f printColumns src/Dodge/Tree/Shift.hs 132;" f @@ -6878,7 +6876,7 @@ rhombus src/Polyhedra.hs 71;" f rifle src/Dodge/Item/Held/Cane.hs 61;" f rifle src/Dodge/Item/Weapon/BulletGun/Cane.hs 77;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 71;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 56;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -7205,8 +7203,8 @@ singleBarrel src/Dodge/Item/Held/SingleBarrel.hs 6;" f singleBlock src/Dodge/Placement/Instance/Wall.hs 30;" f singleBlock src/Dodge/Placements/Wall.hs 11;" f singleBlock src/Dodge/Room/Placement.hs 23;" f -singleDT src/Dodge/Item/Grammar.hs 25;" f -singleLDT src/Dodge/Item/Grammar.hs 28;" f +singleDT src/Dodge/Item/Grammar.hs 22;" f +singleLDT src/Dodge/Item/Grammar.hs 25;" f singleton src/DoubleStack.hs 11;" f singletonTrie src/SimpleTrie.hs 14;" f sizeFBOs src/Framebuffer/Update.hs 22;" f @@ -7348,7 +7346,7 @@ streamFromZone src/Dodge/Zone.hs 39;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 32;" f strictify src/MaybeHelp.hs 37;" f strideRot src/Dodge/Item/HeldOffset.hs 63;" f -stringToList src/Picture/Base.hs 312;" f +stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f subInvX src/Dodge/ListDisplayParams.hs 48;" f @@ -7434,25 +7432,25 @@ testEventKey src/Dodge/Config/KeyConfig.hs 27;" f testInventory src/Dodge/Creature.hs 245;" f testPic src/Dodge/Render/ShapePicture.hs 153;" f testStringInit src/Dodge/TestString.hs 21;" f -text src/Picture/Base.hs 192;" f +text src/Picture/Base.hs 193;" f textGrad src/Picture/Text.hs 5;" f -textJustifyCenter src/Picture/Base.hs 211;" f -textJustifyLeft src/Picture/Base.hs 207;" f -textJustifyRight src/Picture/Base.hs 197;" f +textJustifyCenter src/Picture/Base.hs 212;" f +textJustifyLeft src/Picture/Base.hs 208;" f +textJustifyRight src/Picture/Base.hs 198;" f textNum src/Picture/Data.hs 53;" f -textRight src/Picture/Base.hs 202;" f +textRight src/Picture/Base.hs 203;" f textSelItems src/Dodge/Render/HUD.hs 325;" f -textVMirror src/Picture/Base.hs 215;" f +textVMirror src/Picture/Base.hs 216;" f tflat2 src/Picture/Data.hs 80;" f tflat3 src/Picture/Data.hs 83;" f tflat4 src/Picture/Data.hs 86;" f theCleanup appDodge/Main.hs 74;" f theColumns src/Dodge/Tree/Shift.hs 139;" f theUpdateStep appDodge/Main.hs 102;" f -thickArc src/Picture/Base.hs 297;" f -thickCircle src/Picture/Base.hs 271;" f -thickLine src/Picture/Base.hs 243;" f -thickLineCol src/Picture/Base.hs 254;" f +thickArc src/Picture/Base.hs 298;" f +thickCircle src/Picture/Base.hs 272;" f +thickLine src/Picture/Base.hs 244;" f +thickLineCol src/Picture/Base.hs 255;" f thinHighBar src/Dodge/Room/Foreground.hs 77;" f thingHit src/Dodge/WorldEvent/ThingsHit.hs 65;" f thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 53;" f @@ -7689,7 +7687,7 @@ updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 107;" f updateInstantBullets src/Dodge/Update.hs 531;" f updateInv src/Dodge/Creature/State.hs 224;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 88;" f -updateInventorySectionItems src/Dodge/DisplayInventory.hs 145;" f +updateInventorySectionItems src/Dodge/DisplayInventory.hs 146;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 101;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 90;" f updateLampoid src/Dodge/Lampoid.hs 13;" f @@ -7725,8 +7723,8 @@ updateRenderSplit appDodge/Main.hs 105;" f updateScopeZoom src/Dodge/Update/Camera.hs 131;" f updateScopeZoom' src/Dodge/Update/Camera.hs 136;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f -updateSection src/Dodge/DisplayInventory.hs 187;" f -updateSectionsPositioning src/Dodge/DisplayInventory.hs 166;" f +updateSection src/Dodge/DisplayInventory.hs 188;" f +updateSectionsPositioning src/Dodge/DisplayInventory.hs 167;" f updateSeenWalls src/Dodge/Update.hs 562;" f updateShockwave src/Dodge/Shockwave/Update.hs 12;" f updateShockwaves src/Dodge/Update.hs 436;" f