From 44ecaf409e97c1a60ef2304272cc3d222f0c643d Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 13 May 2026 16:07:44 +0100 Subject: [PATCH] Work on selecting --- src/Dodge/Data/SelectionList.hs | 2 +- src/Dodge/DisplayInventory.hs | 4 +- src/Dodge/Render/HUD.hs | 73 ++------------- src/Dodge/SelectionSections.hs | 4 +- src/Dodge/Update/Input/InGame.hs | 153 ++++--------------------------- tags | 152 +++++++++++++++--------------- 6 files changed, 110 insertions(+), 278 deletions(-) diff --git a/src/Dodge/Data/SelectionList.hs b/src/Dodge/Data/SelectionList.hs index 85455cb55..151e3f6f9 100644 --- a/src/Dodge/Data/SelectionList.hs +++ b/src/Dodge/Data/SelectionList.hs @@ -31,7 +31,7 @@ data SectionCursor = SectionCursor data SelSection a = SelSection { _ssItems :: IntMap (SelectionItem a) - , _ssOffset :: Int + , _ssYOffset :: Int , _ssShownItems :: [Picture] , _ssShownLength :: Int , _ssIndent :: Int diff --git a/src/Dodge/DisplayInventory.hs b/src/Dodge/DisplayInventory.hs index 4e41f3899..4a2947e10 100644 --- a/src/Dodge/DisplayInventory.hs +++ b/src/Dodge/DisplayInventory.hs @@ -248,7 +248,7 @@ updateSectionsPositioning :: updateSectionsPositioning h mselpos allavailablelines lsss sss = IM.intersectionWithKey (\k -> updateSection (h k) (m k)) lsss ssizes `g` offsets where - offsets = fmap (\ss -> (_ssOffset ss, ss ^. ssSet)) sss + offsets = fmap (\ss -> (ss^.ssYOffset, ss^.ssSet)) sss m k = do Sel k' i <- mselpos guard $ k == k' @@ -262,7 +262,7 @@ updateSection :: Int -> Maybe Int -> IMSI a -> Int -> (Int,IS.IntSet) -> SelSect updateSection indent mcsel sis availablelines (oldoffset,sset) = SelSection { _ssItems = sis - , _ssOffset = offset + , _ssYOffset = offset , _ssShownItems = shownitems , _ssShownLength = min aslength availablelines , _ssIndent = indent diff --git a/src/Dodge/Render/HUD.hs b/src/Dodge/Render/HUD.hs index 2840e8652..bf0543f44 100644 --- a/src/Dodge/Render/HUD.hs +++ b/src/Dodge/Render/HUD.hs @@ -52,10 +52,9 @@ import SDL (MouseButton (..)) drawHUD :: Config -> World -> Picture drawHUD cfig w = - drawInventory sections w cfig subinv + drawInventory (w ^. hud . diSections) w cfig subinv <> drawSubInventory subinv cfig w where - sections = w ^. hud . diSections subinv = w ^. hud . subInventory drawInventory :: IMSS () -> World -> Config -> SubInventory -> Picture @@ -94,14 +93,7 @@ drawRootCursor w sss msel ldp cfig = fromMaybe mempty $ do if null (w ^? rbState . opSel) then BoundCurs [minBound ..] else BoundCurs [North, South, West] - return $ - drawSSMultiCursor - sss - (0, x) - (y - x) - ldp - curs - cfig + return $ drawSSMultiCursor sss (0, x) (y - x) ldp curs cfig getRootItemBounds :: Int -> IM.IntMap Item -> Maybe (Int, Int) getRootItemBounds i inv = do @@ -126,10 +118,7 @@ drawMouseOver cfig w = return . translateScreenPos cfig (invDP ^. ldpPos) . color (0.3 *^ white) - -- . color white --- $ selSecDrawCursor invDP curs sss (Sel j i mempty) $ selSecDrawCursor invDP curs sss (Sel j i) - -- curs = BoundaryCursor [West] curs = BackdropCurs combinvsel = do (j, i) <- @@ -145,8 +134,8 @@ drawMouseOver cfig w = drawDragSelected :: Config -> World -> Maybe Picture drawDragSelected cfig w = do ys0 <- w ^? hud . diSections . ix 0 . ssSet - ys2 <- w ^? hud . diSections . ix 3 . ssSet - ys4 <- w ^? hud . diSections . ix 5 . ssSet + ys3 <- w ^? hud . diSections . ix 3 . ssSet + ys5 <- w ^? hud . diSections . ix 5 . ssSet guard $ case w ^? hud . subInventory of Just NoSubInventory -> True _ -> False @@ -156,23 +145,8 @@ drawDragSelected cfig w = do . translateScreenPos cfig (invDP ^. ldpPos) . color (0.2 *^ white) $ IS.foldr (f 0) mempty ys0 - <> IS.foldr (f 3) mempty ys2 - <> IS.foldr (f 5) mempty ys4 --- ys <- w ^? hud . diSelection . _Just . slSet --- guard $ --- not (IS.null ys) --- && ( case w ^? hud . subInventory of --- Just NoSubInventory -> True --- _ -> False --- ) --- Sel i _ _ <- w ^? hud . diSelection . _Just --- sss <- w ^? hud . diSections --- let f x = (selSecDrawCursor invDP BackdropCurs sss (Sel i x mempty) <>) --- return --- . translateScreenPos cfig (invDP ^. ldpPos) --- . color (0.2 *^ white) --- . IS.foldr f mempty --- $ ys + <> IS.foldr (f 3) mempty ys3 + <> IS.foldr (f 5) mempty ys5 drawDragSelecting :: Config -> World -> Maybe Picture drawDragSelecting cfig w = do @@ -188,23 +162,6 @@ drawDragSelecting cfig w = do . color (0.2 *^ white) . IM.foldMapWithKey f $ sssSelectionSlice sss x y --- OverInvDragSelect (Just (i, j)) (Just b) <- w ^? input . mouseContext --- sss <- w ^? hud . diSections --- let f x = selSecDrawCursor invDP BackdropCurs sss (Sel i x) --- return --- . translateScreenPos cfig (invDP ^. ldpPos) --- . color (0.2 *^ white) --- . foldMap f --- $ [min j b .. max j b] - - --- --- return $ IM.foldMapWithKey f s --- where --- f i ss = IM.foldMapWithKey (g i) (ss ^. ssItems) --- g i j si --- | si ^. siIsSelectable = [(i,j)] --- | otherwise = mempty drawSubInventory :: SubInventory -> Config -> World -> Picture drawSubInventory subinv cfig w = case subinv of @@ -262,7 +219,7 @@ drawExamineInventory cfig w = } closeObjectInfo :: Int -> Either Item Button -> String -closeObjectInfo n x = case x of +closeObjectInfo n = \case Left itm -> itemInfo itm ++ " It is on the floor" ++ floorItemPickupInfo n itm Right _ -> "Some sort of switch or button." @@ -316,16 +273,7 @@ drawRBOptions cfig w = fold $ do <> translate (120 - xt) 0 - ( listCursor - 0 - 1 - (BoundCurs [North, South]) - curpos - 0 - white - 25 - 1 - ) + ( listCursor 0 1 (BoundCurs [North, South]) curpos 0 white 25 1) <> translate (380 - xt) 0 @@ -366,10 +314,9 @@ drawItemConnections sss cfig = . fmap (\(_, a, b) -> a <> b) drawItemChildrenConnect :: IMSS () -> Config -> Int -> [Int] -> Picture -drawItemChildrenConnect sss cfig i is = fromMaybe mempty $ do +drawItemChildrenConnect sss cfig i is = fold $ do p <- snum i - let ps = mapMaybe snum is - return $ color white $ lConnectMulti ps p + return $ color white $ lConnectMulti (mapMaybe snum is) p where snum = selNumPos cfig invDP sss 0 diff --git a/src/Dodge/SelectionSections.hs b/src/Dodge/SelectionSections.hs index 38b35cf17..4747db1fa 100644 --- a/src/Dodge/SelectionSections.hs +++ b/src/Dodge/SelectionSections.hs @@ -189,7 +189,7 @@ selSecYint i j sss = do ss <- sss ^? ix i return . (secpos +) - . subtract (ss ^. ssOffset) + . subtract (ss ^. ssYOffset) . sum . fmap _siHeight . fst @@ -207,7 +207,7 @@ inverseSelSecYint yint sss then return $ inverseSelSecYint (yint - l) othersss else do let ls = L.postscan (L.premap _siHeight L.sum) (_ssItems ss) - (j, _) <- L.fold (L.find (\(_, x) -> x - _ssOffset ss > yint)) $ IM.toList ls + (j, _) <- L.fold (L.find (\(_, x) -> x - _ssYOffset ss > yint)) $ IM.toList ls return $ NonInf (i, j) inverseSelSecYintXPosCheck :: diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 376405414..e3f8e9f66 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -211,70 +211,7 @@ updateMouseReleaseInGame cfig w = case w ^. input . mouseContext of & hud . diSections . ix 0 . ssSet .~ mempty & hud . diSections . ix 3 . ssSet .~ mempty & doDragSelect cfig ssel - --- OverInvDragSelect (Just ssel) mesel --- | ScancodeLShift `M.member` (w ^. input . pressedKeys) -> --- w --- & input --- . mouseContext --- .~ MouseInGame --- & ( fromMaybe id $ do --- j <- w ^? hud . diSelection . _Just . slSec --- return $ --- hud --- . diSections --- . ix j --- . ssSet --- %~ getuniques --- ( maybe --- mempty --- mempty --- -- (h ssel) --- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) --- ) --- ) --- & hud --- . diSections --- . ix (fst ssel) --- . ssSet --- %~ getuniques --- ( maybe --- mempty --- (h ssel) --- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) --- ) --- OverInvDragSelect (Just ssel) (Just esel) -> --- w --- & input --- . mouseContext --- .~ MouseInGame --- -- & invSetSelection (f (fst ssel, esel) (h ssel esel)) --- & hud --- . diSections --- . ix (fst ssel) --- . ssSet --- .~ h ssel esel --- & invSetSelection (f (fst ssel, esel)) --- OverInvDragSelect{} -> --- w --- & input --- . mouseContext --- .~ MouseInGame --- -- & hud . diSelection . _Just . slSet %~ const mempty --- & hud --- . diSections --- . each --- . ssSet --- %~ const mempty _ -> w - where - f (x, y) = Sel x y - -- need to set this in OverInvDragSelect (twice)? - h (k, i) j = fold $ do - sss <- w ^? hud . diSections . ix k . ssItems - let (_, xss) = IM.split (min i j - 1) sss - (yss, _) = IM.split (max i j + 1) xss - return . IM.keysSet $ yss doDragSelect :: Config -> XInfinity (Int,Int) -> World -> World doDragSelect cfig x w = fromMaybe w $ do @@ -291,45 +228,20 @@ doDragSelect cfig x w = fromMaybe w $ do symmetricDifference :: IS.IntSet -> IS.IntSet -> IS.IntSet symmetricDifference x y = (x `IS.union` y) IS.\\ (x `IS.intersection` y) -isGroupSelectableSection :: Int -> Bool -isGroupSelectableSection = \case - 0 -> True - 3 -> True - _ -> False - updateMouseClickInGame :: Config -> World -> World updateMouseClickInGame cfig w = case w ^. input . mouseContext of MouseInGame -> w & input . mouseContext .~ OverInvDragSelect (inverseSelSecYint (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) (w ^. hud . diSections)) --- fromMaybe (w & input . mouseContext .~ OverInvDragSelect Nothing Nothing) $ do --- let sss = w ^. hud . diSections --- ysel <- --- inverseSelSecYint --- (posSelSecYint cfig invDP (w ^. input . mousePos . _y)) --- sss --- ^? nonInf --- guard (isGroupSelectableSection $ fst ysel) --- return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing OverInvSelect (-1, _) - | selsec == Just (-1) -> - w - & hud - . diSelection - %~ endRegex (-1) w - & hud - . diInvFilter - .~ Nothing + | selsec == Just (-1) -> w + & hud . diSelection %~ endRegex (-1) w + & hud . diInvFilter .~ Nothing OverInvSelect (2, _) - | selsec == Just 2 -> - w - & hud - . diSelection - %~ endRegex 2 w - & hud - . diCloseFilter - .~ Nothing + | selsec == Just 2 -> w + & hud . diSelection %~ endRegex 2 w + & hud . diCloseFilter .~ Nothing OverInvSelect (5, j) -> fromMaybe w $ do k <- w ^? hud . closeButtons . ix j but <- w ^? cWorld . lWorld . buttons . ix k @@ -337,52 +249,25 @@ updateMouseClickInGame cfig w = case w ^. input . mouseContext of OverInvSelect x | ScancodeLShift `M.member` (w ^. input . pressedKeys) -> w & input . mouseContext .~ OverInvDragSelect (NonInf x) --- && isGroupSelectableSection (fst x) -> --- w & input . mouseContext .~ OverInvDragSelect (Just x) (Just $ snd x) OverInvSelect x -> startDrag x w OverTerminal tmid TerminalTextInput{} -> terminalReturnEffect tmid w OverTerminal tmid TerminalPressTo{} -> continueTerminal tmid w OutsideTerminal -> w & hud . subInventory .~ NoSubInventory - OverCombSelect x -> - w - & hud - . subInventory - . ciSelection - ?~ f x - & worldEventFlags - . at CombineInventoryChange - ?~ () - OverCombFilter -> - w - & hud - . subInventory - . ciFilter - .~ Nothing - & worldEventFlags - . at CombineInventoryChange - ?~ () - & hud - . subInventory - . ciSelection - %~ endCombineRegex w - OverCombCombine x -> - w + OverCombSelect x -> w + & hud . subInventory . ciSelection ?~ f x + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombFilter -> w + & hud . subInventory . ciFilter .~ Nothing + & worldEventFlags . at CombineInventoryChange ?~ () + & hud . subInventory . ciSelection %~ endCombineRegex w + OverCombCombine x -> w & tryCombine x - & worldEventFlags - . at CombineInventoryChange - ?~ () - & worldEventFlags - . at InventoryChange - ?~ () + & worldEventFlags . at CombineInventoryChange ?~ () + & worldEventFlags . at InventoryChange ?~ () & maybeExitCombine - OverCombEscape -> - w - & worldEventFlags - . at InventoryChange - ?~ () - & hud - . subInventory - .~ NoSubInventory + OverCombEscape -> w + & worldEventFlags . at InventoryChange ?~ () + & hud . subInventory .~ NoSubInventory OverCombFiltInv (0, j) -> fromMaybe w $ do str <- fmap (take 5) $ diff --git a/tags b/tags index 8a1bc1901..8237d6460 100644 --- a/tags +++ b/tags @@ -2963,7 +2963,7 @@ closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 237;" f closeItemDist src/Dodge/Inventory.hs 152;" f closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 260;" f -closeObjectInfo src/Dodge/Render/HUD.hs 273;" f +closeObjectInfo src/Dodge/Render/HUD.hs 221;" f closestCrToMouse src/Dodge/Debug.hs 308;" f closestPointOnLine src/Geometry/Intersect.hs 286;" f closestPointOnLineParam src/Geometry/Intersect.hs 302;" f @@ -2998,7 +2998,7 @@ combinationsOf src/Multiset.hs 46;" f combinationsTrie src/Dodge/Combine.hs 44;" f combineAwareness src/Dodge/Creature/Perception.hs 119;" f combineFloors src/Dodge/Room/Procedural.hs 154;" f -combineInventoryExtra src/Dodge/Render/HUD.hs 385;" f +combineInventoryExtra src/Dodge/Render/HUD.hs 324;" f combineItemListYouX src/Dodge/Combine.hs 36;" f combineList src/Dodge/Combine.hs 21;" f combineRooms src/Dodge/Room/Procedural.hs 134;" f @@ -3025,7 +3025,7 @@ connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 802;" f constructEdges src/Polyhedra.hs 31;" f constructEdgesList src/Polyhedra.hs 40;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f -continueTerminal src/Dodge/Update/Input/InGame.hs 514;" f +continueTerminal src/Dodge/Update/Input/InGame.hs 407;" f convexHull src/Geometry/Polygon.hs 150;" f convexHullSafe src/Geometry/Polygon.hs 172;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f @@ -3368,7 +3368,7 @@ doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f doDoorLerp src/Dodge/Door/DoorLerp.hs 8;" f doDoorMount src/Dodge/Door.hs 32;" f doDrag src/Dodge/Update/Input/InGame.hs 136;" f -doDragSelect src/Dodge/Update/Input/InGame.hs 277;" f +doDragSelect src/Dodge/Update/Input/InGame.hs 216;" f doDrawing src/Dodge/Render.hs 33;" f doDrawing' src/Dodge/Render.hs 44;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f @@ -3387,7 +3387,7 @@ doPreload appDodge/Main.hs 133;" f doQuickload src/Dodge/Save.hs 83;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 8;" f -doRegexInput src/Dodge/Update/Input/InGame.hs 567;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 460;" f doRoomPlacements src/Dodge/Layout.hs 121;" f doRoomShift src/Dodge/Room/Link.hs 34;" f doScopeZoom src/Dodge/Update/Scroll.hs 89;" f @@ -3438,7 +3438,7 @@ drawCircCollisionTest src/Dodge/Debug/Picture.hs 118;" f drawCliff src/Dodge/Render/ShapePicture.hs 87;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f drawCombFilter src/Dodge/Render/Picture.hs 273;" f -drawCombineInventory src/Dodge/Render/HUD.hs 235;" f +drawCombineInventory src/Dodge/Render/HUD.hs 183;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 72;" f drawCoord src/Dodge/Debug/Picture.hs 396;" f drawCountMod src/Render.hs 231;" f @@ -3459,13 +3459,13 @@ drawDrag src/Dodge/Render/Picture.hs 204;" f drawDragDrop src/Dodge/Render/Picture.hs 233;" f drawDragPickup src/Dodge/Render/Picture.hs 242;" f drawDragSelect src/Dodge/Render/Picture.hs 197;" f -drawDragSelected src/Dodge/Render/HUD.hs 145;" f -drawDragSelecting src/Dodge/Render/HUD.hs 177;" f +drawDragSelected src/Dodge/Render/HUD.hs 134;" f +drawDragSelecting src/Dodge/Render/HUD.hs 151;" f drawDumbSwitch src/Dodge/Button/Draw.hs 31;" f drawEmptySet src/Dodge/Render/Picture.hs 153;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f drawEquipment src/Dodge/Creature/Picture.hs 426;" f -drawExamineInventory src/Dodge/Render/HUD.hs 244;" f +drawExamineInventory src/Dodge/Render/HUD.hs 192;" f drawExplosiveBall src/Dodge/EnergyBall/Draw.hs 15;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 271;" f drawFlame src/Dodge/Flame/Draw.hs 8;" f @@ -3479,9 +3479,9 @@ drawHoverCrit src/Dodge/Creature/Picture.hs 100;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 33;" f drawInspectWall src/Dodge/Debug/Picture.hs 256;" f drawInspectWalls src/Dodge/Debug/Picture.hs 244;" f -drawInventory src/Dodge/Render/HUD.hs 61;" f -drawItemChildrenConnect src/Dodge/Render/HUD.hs 377;" f -drawItemConnections src/Dodge/Render/HUD.hs 370;" f +drawInventory src/Dodge/Render/HUD.hs 60;" f +drawItemChildrenConnect src/Dodge/Render/HUD.hs 316;" f +drawItemConnections src/Dodge/Render/HUD.hs 309;" f drawJumpDown src/Dodge/Render/Picture.hs 192;" f drawLabCrossCol src/Dodge/Render/Label.hs 8;" f drawLabelledList src/Dodge/Render/List.hs 198;" f @@ -3495,13 +3495,13 @@ drawListYoff src/Dodge/Render/List.hs 89;" f drawLoadingScreen src/Dodge/Render/MenuScreen.hs 24;" f drawMachine src/Dodge/Machine/Draw.hs 18;" f drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f -drawMapperInventory src/Dodge/Render/HUD.hs 226;" f +drawMapperInventory src/Dodge/Render/HUD.hs 174;" f drawMenuClick src/Dodge/Render/Picture.hs 168;" f drawMenuCursor src/Dodge/Render/Picture.hs 180;" f drawMenuOrHUD src/Dodge/Render/Picture.hs 67;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 18;" f drawMouseCursor src/Dodge/Render/Picture.hs 83;" f -drawMouseOver src/Dodge/Render/HUD.hs 115;" f +drawMouseOver src/Dodge/Render/HUD.hs 107;" f drawMousePosition src/Dodge/Debug/Picture.hs 386;" f drawOptions src/Dodge/Render/MenuScreen.hs 36;" f drawPathBetween src/Dodge/Debug/Picture.hs 202;" f @@ -3514,11 +3514,11 @@ drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawPulseBall src/Dodge/Render/ShapePicture.hs 95;" f drawPulseLaser src/Dodge/Laser/Update.hs 42;" f drawQuitTerminal src/Dodge/Render/Picture.hs 147;" f -drawRBOptions src/Dodge/Render/HUD.hs 298;" f +drawRBOptions src/Dodge/Render/HUD.hs 246;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 14;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 38;" f drawReturn src/Dodge/Render/Picture.hs 156;" f -drawRootCursor src/Dodge/Render/HUD.hs 82;" f +drawRootCursor src/Dodge/Render/HUD.hs 81;" f drawSSCursor src/Dodge/SelectionSections/Draw.hs 32;" f drawSSMultiCursor src/Dodge/SelectionSections/Draw.hs 37;" f drawSelect src/Dodge/Render/Picture.hs 261;" f @@ -3532,12 +3532,12 @@ drawSlimeCrit src/Dodge/Creature/Picture.hs 57;" f drawSlinkCrit src/Dodge/Creature/Picture.hs 86;" f drawSpark src/Dodge/Spark/Draw.hs 7;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 28;" f -drawSubInventory src/Dodge/Render/HUD.hs 218;" f +drawSubInventory src/Dodge/Render/HUD.hs 166;" f drawSwitch src/Dodge/Button/Draw.hs 18;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 24;" f drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f -drawTerminalCursorLink src/Dodge/Render/HUD.hs 441;" f -drawTerminalDisplay src/Dodge/Render/HUD.hs 402;" f +drawTerminalCursorLink src/Dodge/Render/HUD.hs 380;" f +drawTerminalDisplay src/Dodge/Render/HUD.hs 341;" f drawTeslaArc src/Dodge/Tesla/Draw.hs 9;" f drawText src/Picture/Base.hs 224;" f drawTitle src/Dodge/Render/MenuScreen.hs 49;" f @@ -3599,8 +3599,8 @@ encircleCloseP src/Dodge/Creature/Boid.hs 38;" f encircleDistP src/Dodge/Creature/Boid.hs 24;" f encircleP src/Dodge/Creature/Boid.hs 30;" f endArcPos src/Dodge/Tesla.hs 87;" f -endCombineRegex src/Dodge/Update/Input/InGame.hs 402;" f -endRegex src/Dodge/Update/Input/InGame.hs 396;" f +endCombineRegex src/Dodge/Update/Input/InGame.hs 295;" f +endRegex src/Dodge/Update/Input/InGame.hs 289;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 742;" f enterCombineInv src/Dodge/DisplayInventory.hs 321;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f @@ -3608,7 +3608,7 @@ epText src/Dodge/Inventory/SelectionList.hs 74;" f eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 5;" f eqTypeToSites src/Dodge/Inventory/RBList.hs 77;" f -equipAllocString src/Dodge/Render/HUD.hs 361;" f +equipAllocString src/Dodge/Render/HUD.hs 300;" f equipAttachPos src/Dodge/Item/Draw.hs 30;" f equipBackgroundEffect src/Dodge/Euse.hs 22;" f equipInfo src/Dodge/Item/Info.hs 140;" f @@ -3691,7 +3691,7 @@ flockACC src/Dodge/Creature/ReaderUpdate.hs 97;" f flockArmourChaseCrit src/Dodge/Creature/ArmourChase.hs 14;" f flockChaseTarget src/Dodge/Creature/Boid.hs 188;" f flockPointTarget src/Dodge/Creature/Boid.hs 204;" f -floorItemPickupInfo src/Dodge/Render/HUD.hs 278;" f +floorItemPickupInfo src/Dodge/Render/HUD.hs 226;" f floorItemSPic src/Dodge/Render/ShapePicture.hs 143;" f floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f @@ -3759,7 +3759,7 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 90;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f getBulHitDams src/Dodge/Bullet.hs 175;" f getBulletType src/Dodge/HeldUse.hs 945;" f -getCloseObj src/Dodge/Update/Input/InGame.hs 691;" f +getCloseObj src/Dodge/Update/Input/InGame.hs 584;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f @@ -3782,7 +3782,7 @@ getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f getRoomsFromInts src/Dodge/Room/Tutorial.hs 611;" f -getRootItemBounds src/Dodge/Render/HUD.hs 106;" f +getRootItemBounds src/Dodge/Render/HUD.hs 98;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f @@ -3980,7 +3980,7 @@ invDP src/Dodge/ListDisplayParams.hs 32;" f invDT src/Dodge/Item/Grammar.hs 227;" f invDT' src/Dodge/Item/Grammar.hs 232;" f invDimColor src/Dodge/DisplayInventory.hs 190;" f -invHead src/Dodge/Render/HUD.hs 471;" f +invHead src/Dodge/Render/HUD.hs 410;" f invIMDT src/Dodge/Item/Grammar.hs 256;" f invIndents src/Dodge/Item/Grammar.hs 263;" f invItemEffs src/Dodge/Creature/State.hs 91;" f @@ -3992,9 +3992,9 @@ invSetSelectionPos src/Dodge/Inventory.hs 304;" f invShiftPointBy src/Dodge/ShiftPoint.hs 17;" f invSize src/Dodge/Inventory/CheckSlots.hs 33;" f inventoryX src/Dodge/Creature.hs 103;" f -inverseSelNumPos src/Dodge/SelectionSections.hs 231;" f -inverseSelSecYint src/Dodge/SelectionSections.hs 199;" f -inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 212;" f +inverseSelNumPos src/Dodge/SelectionSections.hs 232;" f +inverseSelSecYint src/Dodge/SelectionSections.hs 200;" f +inverseSelSecYintXPosCheck src/Dodge/SelectionSections.hs 213;" f inverseShockwaveAt src/Dodge/WorldEvent/Shockwave.hs 44;" f invertEncircleDistP src/Dodge/Creature/Boid.hs 16;" f invertIntMap src/IntMapHelp.hs 100;" f @@ -4010,7 +4010,6 @@ isCognizant src/Dodge/Creature/Perception.hs 115;" f isConnected src/Dodge/Inventory/Swap.hs 86;" f isCornerLink src/Dodge/RoomLink.hs 66;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 232;" f -isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 286;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f isJust' src/MaybeHelp.hs 27;" f isLHS src/Geometry/LHS.hs 12;" f @@ -4172,7 +4171,7 @@ listGuard src/Dodge/Creature/ReaderUpdate.hs 287;" f listSelectionColorPicture src/Dodge/DisplayInventory.hs 299;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 53;" f -lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 460;" f +lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 399;" f loadAmmoTut src/Dodge/Room/Tutorial.hs 475;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f @@ -4299,7 +4298,7 @@ maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 136;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 141;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 727;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 620;" f maybeOpenConsole src/Dodge/Update.hs 135;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f @@ -4453,7 +4452,7 @@ newSounds src/Dodge/Creature/Perception.hs 175;" f newSoundsToPlay src/Dodge/SoundSelection.hs 8;" f newTextureFramebuffer src/Framebuffer/Setup.hs 16;" f nextArc src/Dodge/Tesla.hs 61;" f -nextInSectionSS src/Dodge/SelectionSections.hs 35;" f +nextInSectionSS src/Dodge/SelectionSections.hs 36;" f nextLayoutInt src/Dodge/Data/MetaTree.hs 44;" f noPic src/ShapePicture.hs 25;" f noShape src/ShapePicture.hs 29;" f @@ -4541,7 +4540,7 @@ passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 693;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 683;" f +pauseGame src/Dodge/Update/Input/InGame.hs 576;" f pauseMenu src/Dodge/Menu.hs 57;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f @@ -4671,7 +4670,7 @@ pop3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 838;" f popS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 590;" f popScreen src/Dodge/Menu/PushPop.hs 6;" f posRms src/Dodge/Tree/Shift.hs 46;" f -posSelSecYint src/Dodge/SelectionSections.hs 181;" f +posSelSecYint src/Dodge/SelectionSections.hs 182;" f positionRoomsFromTree src/Dodge/Tree/Shift.hs 36;" f postGenerationProcessing src/Dodge/LevelGen.hs 31;" f postUniverseLoadSideEffect src/Dodge/WorldLoad.hs 14;" f @@ -4992,7 +4991,7 @@ screenToWorldPos src/Dodge/Base/Coordinate.hs 45;" f scrollAugInvSel src/Dodge/Inventory.hs 307;" f scrollAugNextInSection src/Dodge/Inventory.hs 321;" f scrollRBOption src/Dodge/Update/Scroll.hs 139;" f -scrollSelectionSections src/Dodge/SelectionSections.hs 29;" f +scrollSelectionSections src/Dodge/SelectionSections.hs 30;" f scrollTimeBack src/Dodge/Update.hs 245;" f scrollTimeForward src/Dodge/Update.hs 262;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 624;" f @@ -5012,12 +5011,12 @@ seedStartMenu src/Dodge/Menu.hs 85;" f seedStartOptions src/Dodge/Menu.hs 88;" f segOnCirc src/Geometry.hs 113;" f segmentArea src/Dodge/Creature/Update.hs 355;" f -selNumPos src/Dodge/Render/HUD.hs 520;" f -selNumPosCardinal src/Dodge/Render/HUD.hs 537;" f +selNumPos src/Dodge/Render/HUD.hs 459;" f +selNumPosCardinal src/Dodge/Render/HUD.hs 476;" f selSecDrawCursor src/Dodge/Render/List.hs 101;" f -selSecSelCol src/Dodge/Render/HUD.hs 557;" f -selSecSelSize src/Dodge/SelectionSections.hs 177;" f -selSecYint src/Dodge/SelectionSections.hs 186;" f +selSecSelCol src/Dodge/Render/HUD.hs 496;" f +selSecSelSize src/Dodge/SelectionSections.hs 178;" f +selSecYint src/Dodge/SelectionSections.hs 187;" f selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f selectionSet src/Dodge/Update/Input/InGame.hs 162;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 846;" f @@ -5054,7 +5053,7 @@ setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 123;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 318;" f -setSelWhileDragging src/Dodge/Update/Input/InGame.hs 458;" f +setSelWhileDragging src/Dodge/Update/Input/InGame.hs 351;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f @@ -5097,7 +5096,7 @@ shiftByV2 src/Dodge/PlacementSpot.hs 257;" f shiftChildren src/Dodge/Tree/Compose.hs 45;" f shiftDraw src/Dodge/Render/ShapePicture.hs 111;" f shiftInBy src/Dodge/PlacementSpot.hs 254;" f -shiftInvItems src/Dodge/Update/Input/InGame.hs 426;" f +shiftInvItems src/Dodge/Update/Input/InGame.hs 319;" f shiftInvItemsDown src/Dodge/Inventory.hs 186;" f shiftInvItemsUp src/Dodge/Inventory.hs 196;" f shiftLinkBy src/Dodge/Room/Link.hs 89;" f @@ -5231,7 +5230,7 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 89;" f spPos src/ShapePicture/Data.hs 11;" f -spaceAction src/Dodge/Update/Input/InGame.hs 686;" f +spaceAction src/Dodge/Update/Input/InGame.hs 579;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 162;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 155;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 147;" f @@ -5269,25 +5268,25 @@ square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 127;" f squashNormalizeV src/Geometry/Vector.hs 166;" f -ssLookupDown src/Dodge/SelectionSections.hs 100;" f -ssLookupGE src/Dodge/SelectionSections.hs 154;" f -ssLookupGE' src/Dodge/SelectionSections.hs 170;" f -ssLookupGT src/Dodge/SelectionSections.hs 141;" f -ssLookupGT' src/Dodge/SelectionSections.hs 147;" f -ssLookupLE src/Dodge/SelectionSections.hs 162;" f -ssLookupLE' src/Dodge/SelectionSections.hs 129;" f -ssLookupLT src/Dodge/SelectionSections.hs 116;" f -ssLookupLT' src/Dodge/SelectionSections.hs 122;" f -ssLookupMax src/Dodge/SelectionSections.hs 90;" f -ssLookupMaxInSection src/Dodge/SelectionSections.hs 110;" f -ssLookupMin src/Dodge/SelectionSections.hs 136;" f -ssLookupNextMax src/Dodge/SelectionSections.hs 105;" f -ssLookupUp src/Dodge/SelectionSections.hs 95;" f -ssScrollMinOnFail src/Dodge/SelectionSections.hs 46;" f -ssScrollUsing src/Dodge/SelectionSections.hs 38;" f -ssSetCursor src/Dodge/SelectionSections.hs 74;" f +ssLookupDown src/Dodge/SelectionSections.hs 101;" f +ssLookupGE src/Dodge/SelectionSections.hs 155;" f +ssLookupGE' src/Dodge/SelectionSections.hs 171;" f +ssLookupGT src/Dodge/SelectionSections.hs 142;" f +ssLookupGT' src/Dodge/SelectionSections.hs 148;" f +ssLookupLE src/Dodge/SelectionSections.hs 163;" f +ssLookupLE' src/Dodge/SelectionSections.hs 130;" f +ssLookupLT src/Dodge/SelectionSections.hs 117;" f +ssLookupLT' src/Dodge/SelectionSections.hs 123;" f +ssLookupMax src/Dodge/SelectionSections.hs 91;" f +ssLookupMaxInSection src/Dodge/SelectionSections.hs 111;" f +ssLookupMin src/Dodge/SelectionSections.hs 137;" f +ssLookupNextMax src/Dodge/SelectionSections.hs 106;" f +ssLookupUp src/Dodge/SelectionSections.hs 96;" f +ssScrollMinOnFail src/Dodge/SelectionSections.hs 47;" f +ssScrollUsing src/Dodge/SelectionSections.hs 39;" f +ssSetCursor src/Dodge/SelectionSections.hs 75;" f ssfold src/FoldableHelp.hs 105;" f -sssSelectionSlice src/Dodge/Render/HUD.hs 200;" f +sssSelectionSlice src/Dodge/SelectionSections.hs 236;" f stackPicturesAt src/Dodge/Render/List.hs 95;" f stackPicturesAtOff src/Dodge/Render/List.hs 98;" f stackText src/Picture/Base.hs 180;" f @@ -5295,7 +5294,7 @@ stackedInventory src/Dodge/Creature.hs 318;" f startCr src/Dodge/Creature.hs 83;" f startCrafts src/Dodge/Room/Start.hs 94;" f startDeathTimer src/Dodge/Creature/Update.hs 495;" f -startDrag src/Dodge/Update/Input/InGame.hs 411;" f +startDrag src/Dodge/Update/Input/InGame.hs 304;" f startInvList src/Dodge/Creature.hs 97;" f startInventory src/Dodge/Creature.hs 100;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f @@ -5339,6 +5338,7 @@ swapItemWith src/Dodge/Inventory.hs 280;" f swapSelSet src/Dodge/Inventory.hs 160;" f swarmCrit src/Dodge/Creature/SwarmCrit.hs 10;" f swarmUsingCenter src/Dodge/Creature/Boid.hs 174;" f +symmetricDifference src/Dodge/Update/Input/InGame.hs 228;" f t src/ShortShow.hs 48;" f tEast src/Dodge/Room/Corridor.hs 96;" f tToBTree src/Dodge/Tree/Compose.hs 93;" f @@ -5524,7 +5524,7 @@ truncate src/Polyhedra/Geodesic.hs 39;" f trunkDepth src/TreeHelp.hs 164;" f tryAttachItems src/Dodge/Item/Grammar.hs 35;" f tryClickUse src/Dodge/Creature/YourControl.hs 207;" f -tryCombine src/Dodge/Update/Input/InGame.hs 703;" f +tryCombine src/Dodge/Update/Input/InGame.hs 596;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 179;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 147;" f tryEvadeSideways src/Dodge/Creature/Action.hs 101;" f @@ -5584,7 +5584,7 @@ updateAggroBee src/Dodge/Creature/Update.hs 129;" f updateAimPos src/Dodge/Update.hs 400;" f updateAllNodes src/TreeHelp.hs 88;" f updateArc src/Dodge/Tesla.hs 44;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 598;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 491;" f updateBarrel src/Dodge/Barreloid.hs 43;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f @@ -5628,14 +5628,14 @@ updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEnergyBall src/Dodge/EnergyBall.hs 32;" f updateEnergyBalls src/Dodge/Update.hs 775;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 643;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 536;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f updateFlames src/Dodge/Update.hs 772;" f updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f updateFoodSearchChaseCrit src/Dodge/Creature/Update.hs 381;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 475;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 471;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 368;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 364;" f updateGas src/Dodge/Update.hs 942;" f updateGusts src/Dodge/Update.hs 904;" f updateHiveCrit src/Dodge/Creature/Update.hs 82;" f @@ -5643,25 +5643,25 @@ updateHoverCrit src/Dodge/Humanoid.hs 25;" f updateIMl src/Dodge/Update.hs 639;" f updateIMl' src/Dodge/Update.hs 642;" f updateInGameCamera src/Dodge/Update/Camera.hs 86;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 548;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 441;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f updateItemTargeting src/Dodge/Creature/State.hs 288;" f -updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 508;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 542;" f +updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 401;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 435;" f updateKeysInGame src/Dodge/Update/Input/InGame.hs 81;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 494;" f -updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 517;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 387;" f +updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 410;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 12;" f updateLasers src/Dodge/Update.hs 517;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 179;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLivingCreature src/Dodge/Creature/Update.hs 61;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 561;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 454;" f updateMachine src/Dodge/Machine/Update.hs 24;" f updateMagnets src/Dodge/Update.hs 408;" f -updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 292;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 231;" f updateMouseContext src/Dodge/Update.hs 421;" f updateMouseContextGame src/Dodge/Update.hs 426;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 94;" f @@ -5880,7 +5880,7 @@ yV2 src/Geometry/Vector.hs 213;" f yellow src/Color.hs 44;" f you src/Dodge/Base/You.hs 17;" f youDropItem src/Dodge/Creature/Action.hs 195;" f -yourAugmentedItem src/Dodge/Render/HUD.hs 285;" f +yourAugmentedItem src/Dodge/Render/HUD.hs 233;" f yourControl src/Dodge/Creature/YourControl.hs 26;" f yourDefaultStrideLength src/Dodge/Default/Creature.hs 109;" f yourInfo src/Dodge/Creature/Info.hs 10;" f