From 3c5e5b92b1c6a347db6a89916137a66f38715347 Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 18 Nov 2024 11:00:41 +0000 Subject: [PATCH] Refactor code for initial mouse click in game --- ghcidOutput | 11 ++- src/Dodge/Terminal.hs | 16 +-- src/Dodge/Update.hs | 22 +++-- src/Dodge/Update/Input/InGame.hs | 143 +++++++++++++++++++-------- tags | 164 ++++++++++++++++--------------- 5 files changed, 217 insertions(+), 139 deletions(-) diff --git a/ghcidOutput b/ghcidOutput index 6fd036f4a..7380d08c9 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1,10 @@ -All good (594 modules, at 19:58:31) +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:159:1-21: warning: [-Wunused-top-binds] + Defined but not used: ‘updateCombineInvClick’ + | +159 | updateCombineInvClick sss w = case w ^. input . mouseContext of + | ^^^^^^^^^^^^^^^^^^^^^ +/home/justin/Haskell/loop/src/Dodge/Update/Input/InGame.hs:159:23-25: warning: [-Wunused-matches] + Defined but not used: ‘sss’ + | +159 | updateCombineInvClick sss w = case w ^. input . mouseContext of + | ^^^ diff --git a/src/Dodge/Terminal.hs b/src/Dodge/Terminal.hs index 9a570e453..ab7e27e5d 100644 --- a/src/Dodge/Terminal.hs +++ b/src/Dodge/Terminal.hs @@ -294,9 +294,13 @@ runTerminalString s tm w = ) doTerminalEffectLB :: Terminal -> World -> World -doTerminalEffectLB tm w = fromMaybe w $ do - guard (_tmStatus tm == TerminalReady) - s <- w ^? cWorld . lWorld . terminals . ix (_tmID tm) . tmInput . tiText - return $ if null (words s) && null (_tmPartialCommand tm) - then w - else terminalReturnEffect tm w +doTerminalEffectLB tm w = case w ^. input . mouseContext of + OverTerminalReturn -> fromMaybe w $ do + guard (_tmStatus tm == TerminalReady) + s <- w ^? cWorld . lWorld . terminals . ix (_tmID tm) . tmInput . tiText + return $ if null (words s) && null (_tmPartialCommand tm) + then w + else terminalReturnEffect tm w + OverTerminalEscape -> w + & hud . hudElement . subInventory .~ NoSubInventory MouseInvNothing + _ -> w diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index f68cd747d..57bd64780 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -6,7 +6,6 @@ Description : Simulation update -} module Dodge.Update (updateUniverse) where -import Dodge.Update.Input.ScreenLayer import Color import Control.Applicative import Control.Monad @@ -54,6 +53,7 @@ import Dodge.TractorBeam.Update import Dodge.Update.Camera import Dodge.Update.Cloud import Dodge.Update.Input.InGame +import Dodge.Update.Input.ScreenLayer import Dodge.Update.Scroll import Dodge.Update.WallDamage import Dodge.WallCreatureCollisions @@ -165,7 +165,7 @@ updateUniverseMid u = case _uvScreenLayers u of . updateClouds ) (sl : _) -> u & updateUseInputOnScreen sl - [] -> timeFlowUpdate $ updateUseInputInGame u + [] -> timeFlowUpdate . updateUseInputInGame $ over uvWorld updateMouseClickInGame u timeFlowUpdate :: Universe -> Universe timeFlowUpdate u = case u ^. uvWorld . timeFlow of @@ -399,18 +399,19 @@ updateMouseContext cfig u = screen <- u ^? uvScreenLayers . ix 0 return $ case screen ^. scOptions of [] -> NoMouseContext - _ -> fromMaybe MouseMenuCursor $ do + _ -> fromMaybe MouseMenuCursor $ do ldps <- screen ^? scListDisplayParams let ymax = maybe 0 length $ screen ^? scSelectionList yi <- ldpVerticalSelection (u ^. uvConfig) ldps (u ^. uvWorld . input . mousePos) guard (yi >= 0 && yi < ymax) - return $ if isselectable yi - then MouseMenuClick yi - else NoMouseContext + return $ + if isselectable yi + then MouseMenuClick yi + else NoMouseContext isselectable yi = fromMaybe False $ u ^? uvScreenLayers . _head . scSelectionList . ix yi . siIsSelectable --- mmoving = u ^. uvWorld . input . mouseMoving + -- mmoving = u ^. uvWorld . input . mouseMoving w = u ^. uvWorld aimcontext | ButtonRight `M.member` (w ^. input . mouseButtons) = MouseAiming @@ -438,9 +439,10 @@ updateMouseContext cfig u = tm <- w ^? cWorld . lWorld . terminals . ix tmid return $ if isOverTerminalScreen cfig tm mpos - then if null $ tm ^. tmInput . tiText - then NoMouseContext - else OverTerminalReturn + then + if null $ tm ^. tmInput . tiText + then NoMouseContext + else OverTerminalReturn else OverTerminalEscape isOverTerminalScreen :: Configuration -> Terminal -> Point2 -> Bool diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index d52699023..893a83df1 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -1,10 +1,10 @@ module Dodge.Update.Input.InGame ( updateUseInputInGame, + updateMouseClickInGame, ) where -import Dodge.Terminal -import Control.Monad import Control.Applicative +import Control.Monad import qualified Data.IntMap.Strict as IM import Data.List (sort) import qualified Data.Map.Strict as M @@ -25,6 +25,7 @@ import Dodge.Menu import Dodge.Save import Dodge.SelectionSections import Dodge.SoundLogic +import Dodge.Terminal import Dodge.Update.Input.Text import Dodge.WorldPos import Geometry @@ -35,30 +36,33 @@ updateUseInputInGame :: Universe -> Universe updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud . hudElement of DisplayCarte -> over uvWorld updatePressedButtonsCarte u DisplayInventory{_subInventory = si} -> case si of - DisplayTerminal tmid - | lbinitialpress -> u & uvWorld - %~ doTerminalEffectLB (w ^?! cWorld . lWorld . terminals . ix tmid) - | otherwise -> updateKeysInTerminal tmid u - CombineInventory{_ciSections = sss, _ciSelection = msel} - | lbinitialpress -> u & uvWorld %~ updateCombineInvClick sss + DisplayTerminal tmid -> updateKeysInTerminal tmid u +-- | lbinitialpress -> +-- u & uvWorld +-- %~ doTerminalEffectLB (w ^?! cWorld . lWorld . terminals . ix tmid) +-- | otherwise -> updateKeysInTerminal tmid u + CombineInventory{_ciSections = sss, _ciSelection = msel} +-- | lbinitialpress -> u & uvWorld %~ updateCombineInvClick sss | inSubInvRegex (u ^. uvWorld) -> u & uvWorld . hud . hudElement . subInventory %~ docombineregexinput sss msel & uvWorld . worldEventFlags . at CombineInventoryChange ?~ () - _ | inInvRegex (u ^. uvWorld) -> + _ + | inInvRegex (u ^. uvWorld) -> u & uvWorld . hud . hudElement %~ dodisplayregexinput (-1) & uvWorld . worldEventFlags . at InventoryChange ?~ () & uvWorld %~ setInvPosFromSS - _ | inCloseRegex (u ^. uvWorld) -> + _ + | inCloseRegex (u ^. uvWorld) -> u & uvWorld . hud . hudElement %~ dodisplayregexinput' 2 & uvWorld . worldEventFlags . at InventoryChange ?~ () & uvWorld %~ setInvPosFromSS _ -> M.foldlWithKey' updateKeyInGame u pkeys where - w = u ^. uvWorld +-- w = u ^. uvWorld pkeys = u ^. uvWorld . input . pressedKeys - lbinitialpress = u ^? uvWorld . input . mouseButtons . ix ButtonLeft == Just 0 +-- lbinitialpress = u ^? uvWorld . input . mouseButtons . ix ButtonLeft == Just 0 dodisplayregexinput x di = fromMaybe di $ do sss <- di ^? diSections msel <- di ^? diSelection @@ -85,9 +89,58 @@ updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud . hudEleme & ciSelection .~ msel' & ciFilter .~ filts' +updateMouseClickInGame :: World -> World +updateMouseClickInGame w = if w ^? input . mouseButtons . ix ButtonLeft == Just 0 + then updateMouseClickInGame' w + else w + +updateMouseClickInGame' :: World -> World +updateMouseClickInGame' w = case w ^. input . mouseContext of + OverTerminalReturn -> fromMaybe w $ do + tmid <- w ^? hud . hudElement . subInventory . termID + tm <- w ^? cWorld . lWorld . terminals . ix tmid + guard (_tmStatus tm == TerminalReady) + s <- tm ^? tmInput . tiText + return $ if null (words s) && null (_tmPartialCommand tm) + then w + else terminalReturnEffect tm w + OverTerminalEscape -> w + & hud . hudElement . subInventory .~ NoSubInventory MouseInvNothing + OverCombSelect x -> + w & hud . hudElement . subInventory . ciSelection ?~ x + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombFilter -> + w & hud . hudElement . subInventory . ciFilter .~ Nothing + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombCombine (i, j) -> + (worldEventFlags . at InventoryChange ?~ ()) . maybeExitCombine $ + tryCombine (i, j) w + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombEscape -> + w + & worldEventFlags . at InventoryChange ?~ () + & hud . hudElement . subInventory .~ NoSubInventory MouseInvNothing + OverInvFilt (i, j) -> fromMaybe w $ do + guard $ i == 0 + str <- + fmap (take 5) $ + w + ^? hud . hudElement . diSections . ix i . ssItems . ix j . siPictures . ix 0 + return . (worldEventFlags . at CombineInventoryChange ?~ ()) $ + case w ^? hud . hudElement . subInventory . ciFilter . _Just of + Just (_ : xs) + | str == xs -> + w + & hud . hudElement . subInventory . ciFilter .~ Nothing + _ -> w & hud . hudElement . subInventory . ciFilter ?~ ("<" ++ str) + _ -> w + updateFunctionKeys :: Universe -> Universe -updateFunctionKeys u = M.foldlWithKey' updateFunctionKey u - (u ^. uvWorld . input . pressedKeys) +updateFunctionKeys u = + M.foldlWithKey' + updateFunctionKey + u + (u ^. uvWorld . input . pressedKeys) updateFunctionKey :: Universe -> Scancode -> PressType -> Universe updateFunctionKey uv sc InitialPress = case sc of @@ -103,33 +156,40 @@ updateCombineInvClick :: IM.IntMap (SelectionSection CombinableItem) -> World -> World -updateCombineInvClick sss w = fromMaybe trydocombination $ do - (i,j) <- w ^? input . mouseContext . mcoInvFilt - guard $ i == 0 - str <- fmap (take 5) $ w - ^? hud . hudElement . diSections . ix i . ssItems . ix j . siPictures . ix 0 - return . (worldEventFlags . at CombineInventoryChange ?~ ()) - $ case w ^? hud . hudElement . subInventory . ciFilter . _Just of - Just (_:xs) | str == xs -> w - & hud . hudElement . subInventory . ciFilter .~ Nothing - _ -> w & hud . hudElement . subInventory . ciFilter ?~ ("<" ++ str) - where - trydocombination = case w ^. input . mouseContext of - OverCombSelect x -> w & hud . hudElement . subInventory . ciSelection ?~ x - & worldEventFlags . at CombineInventoryChange ?~ () - OverCombFilter -> w & hud . hudElement . subInventory . ciFilter .~ Nothing - & worldEventFlags . at CombineInventoryChange ?~ () - OverCombCombine (i,j) -> - (worldEventFlags . at InventoryChange ?~ ()) . maybeExitCombine $ - tryCombine sss (i,j) w - & worldEventFlags . at CombineInventoryChange ?~ () - OverCombEscape -> w +updateCombineInvClick sss w = case w ^. input . mouseContext of + OverCombSelect x -> + w & hud . hudElement . subInventory . ciSelection ?~ x + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombFilter -> + w & hud . hudElement . subInventory . ciFilter .~ Nothing + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombCombine (i, j) -> + (worldEventFlags . at InventoryChange ?~ ()) . maybeExitCombine $ + tryCombine (i, j) w + & worldEventFlags . at CombineInventoryChange ?~ () + OverCombEscape -> + w & worldEventFlags . at InventoryChange ?~ () & hud . hudElement . subInventory .~ NoSubInventory MouseInvNothing - x -> error $ "while combining this mouse context should not be possible: " - ++ show x - --- x@(Just (i,_)) + OverInvFilt (i, j) -> fromMaybe w $ do + guard $ i == 0 + str <- + fmap (take 5) $ + w + ^? hud . hudElement . diSections . ix i . ssItems . ix j . siPictures . ix 0 + return . (worldEventFlags . at CombineInventoryChange ?~ ()) $ + case w ^? hud . hudElement . subInventory . ciFilter . _Just of + Just (_ : xs) + | str == xs -> + w + & hud . hudElement . subInventory . ciFilter .~ Nothing + _ -> w & hud . hudElement . subInventory . ciFilter ?~ ("<" ++ str) + x -> + error $ + "while combining this mouse context should not be possible: " + ++ show x + +-- x@(Just (i,_)) -- | x /= msel -> w & hud . hudElement . subInventory . ciSelection .~ x -- & worldEventFlags . at CombineInventoryChange ?~ () -- | i == -1 -> w & hud . hudElement . subInventory . ciFilter .~ Nothing @@ -353,11 +413,12 @@ toggleTweakInv w = case w ^? hud . hudElement . subInventory of thepointer = hud . hudElement . subInventory tryCombine :: - IM.IntMap (SelectionSection CombinableItem) -> +-- IM.IntMap (SelectionSection CombinableItem) -> (Int, Int) -> World -> World -tryCombine sss (i,j) w = fromMaybe w $ do +tryCombine (i, j) w = fromMaybe w $ do + sss <- w ^? hud . hudElement . subInventory . ciSections CombinableItem is it _ <- sss ^? ix i . ssItems . ix j . siPayload p <- w ^? cWorld . lWorld . creatures . ix 0 . crPos return $ diff --git a/tags b/tags index c9b466ec6..659612501 100644 --- a/tags +++ b/tags @@ -3343,10 +3343,10 @@ addToTrunk src/TreeHelp.hs 156;" f addWarningTerminal src/Dodge/Room/Warning.hs 37;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 77;" f -advanceScrollAmount src/Dodge/Update.hs 468;" f +advanceScrollAmount src/Dodge/Update.hs 470;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -aimDelaySweep src/Dodge/Render/Picture.hs 181;" f +aimDelaySweep src/Dodge/Render/Picture.hs 182;" f aimStanceInfo src/Dodge/Item/Info.hs 210;" f aimTurn src/Dodge/Creature/YourControl.hs 143;" f aimingMuzzleLength src/Dodge/Creature/HandPos.hs 46;" f @@ -3587,7 +3587,7 @@ chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 46;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 99;" f checkConnection src/Dodge/Inventory.hs 233;" f checkDeath src/Dodge/Creature/State.hs 75;" f -checkEndGame src/Dodge/Update.hs 755;" f +checkEndGame src/Dodge/Update.hs 757;" f checkErrorGL src/Shader/Compile.hs 255;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f @@ -3614,7 +3614,7 @@ circle src/Picture/Base.hs 180;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f circleSolid src/Picture/Base.hs 164;" f circleSolidCol src/Picture/Base.hs 168;" f -clClSpringVel src/Dodge/Update.hs 808;" f +clClSpringVel src/Dodge/Update.hs 810;" f clZoneSize src/Dodge/Zone/Size.hs 3;" f clZoneSize src/Dodge/Zoning/Cloud.hs 21;" f clampPath src/Dodge/Room/Procedural.hs 166;" f @@ -3641,7 +3641,7 @@ closestCreatureID src/Dodge/Debug.hs 92;" f closestPointOnLine src/Geometry/Intersect.hs 251;" f closestPointOnLineParam src/Geometry/Intersect.hs 267;" f closestPointOnSeg src/Geometry/Intersect.hs 282;" f -cloudEffect src/Dodge/Update.hs 778;" f +cloudEffect src/Dodge/Update.hs 780;" f cloudPoisonDamage src/Dodge/Update/Cloud.hs 9;" f clsNearCirc src/Dodge/Zoning/Cloud.hs 18;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f @@ -3711,7 +3711,7 @@ crAdd src/Dodge/Room/RezBox.hs 104;" f crAwayFromPost src/Dodge/Creature/Test.hs 77;" f crBlips src/Dodge/RadarSweep.hs 69;" f crCanSeeCr src/Dodge/Creature/Test.hs 48;" f -crCrSpring src/Dodge/Update.hs 826;" f +crCrSpring src/Dodge/Update.hs 828;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 28;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 37;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 51;" f @@ -3732,7 +3732,7 @@ crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 35;" f crOnWall src/Dodge/WallCreatureCollisions.hs 84;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 67;" f crSetRoots src/Dodge/Inventory/Location.hs 48;" f -crSpring src/Dodge/Update.hs 821;" f +crSpring src/Dodge/Update.hs 823;" f crStratConMatches src/Dodge/Creature/Test.hs 72;" f crUpdate src/Dodge/Creature/State.hs 62;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 61;" f @@ -3801,7 +3801,7 @@ cylinderIndices src/Shader/Poke.hs 374;" f cylinderOnSeg src/Geometry.hs 125;" f cylinderPoly src/Shape.hs 86;" f cylinderRoundIndices src/Shader/Poke.hs 381;" f -dShadCol src/Dodge/Render/List.hs 217;" f +dShadCol src/Dodge/Render/List.hs 219;" f damThingHitWith src/Dodge/WorldEvent/Damage.hs 10;" f damToExpBarrel src/Dodge/Barreloid.hs 57;" f damageBlocksBy src/Dodge/Wall/Damage.hs 36;" f @@ -3983,7 +3983,7 @@ displayConfig src/Dodge/Menu.hs 196;" f displayControls src/Dodge/Menu.hs 206;" f displayFrameTicks src/Dodge/Render/Picture.hs 39;" f displayFreeSlots src/Dodge/DisplayInventory.hs 197;" f -displayTerminalLineString src/Dodge/Update.hs 497;" f +displayTerminalLineString src/Dodge/Update.hs 499;" f dist src/Geometry/Vector.hs 179;" f dist3 src/Geometry/Vector3D.hs 101;" f divTo src/Geometry/Zone.hs 6;" f @@ -4040,7 +4040,7 @@ doPropUpdates src/Dodge/Prop/Update.hs 36;" f doQuickload src/Dodge/Save.hs 82;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f -doRegexInput src/Dodge/Update/Input/InGame.hs 207;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 267;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f @@ -4067,7 +4067,7 @@ doWdCrCr src/Dodge/CreatureEffect.hs 12;" f doWdP2f src/Dodge/WdP2f.hs 12;" f doWdWd src/Dodge/WorldEffect.hs 26;" f doWeaponRepetitions src/Dodge/HeldUse.hs 56;" f -doWorldEvents src/Dodge/Update.hs 479;" f +doWorldEvents src/Dodge/Update.hs 481;" f doWorldPos src/Dodge/WorldPos.hs 7;" f door src/Dodge/Room/Door.hs 13;" f doorBetween src/Dodge/Placement/Instance/Door.hs 39;" f @@ -4094,8 +4094,8 @@ drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f drawCarte src/Dodge/Render/HUD/Carte.hs 14;" f drawCircFlare src/Dodge/Flare.hs 25;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f -drawCombFilter src/Dodge/Render/Picture.hs 162;" f -drawCombFilterJump src/Dodge/Render/Picture.hs 147;" f +drawCombFilter src/Dodge/Render/Picture.hs 163;" f +drawCombFilterJump src/Dodge/Render/Picture.hs 148;" f drawCombineInventory src/Dodge/Render/HUD.hs 160;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 62;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f @@ -4109,7 +4109,7 @@ drawDDATest src/Dodge/Debug/Picture.hs 256;" f drawDISelections src/Dodge/Render/HUD.hs 143;" f drawDoorPaths src/Dodge/Debug/Picture.hs 217;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 81;" f -drawEmptySet src/Dodge/Render/Picture.hs 102;" f +drawEmptySet src/Dodge/Render/Picture.hs 103;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 8;" f drawEquipment src/Dodge/Creature/Picture.hs 140;" f drawExamineInventory src/Dodge/Render/HUD.hs 174;" f @@ -4119,7 +4119,7 @@ drawFlamelet src/Dodge/EnergyBall/Draw.hs 23;" f drawFlare src/Dodge/Flare.hs 12;" f drawFooterText src/Dodge/Render/MenuScreen.hs 74;" f drawForceField src/Dodge/Wall/Draw.hs 11;" f -drawGapPlus src/Dodge/Render/Picture.hs 172;" f +drawGapPlus src/Dodge/Render/Picture.hs 173;" f drawGib src/Dodge/Prop/Draw.hs 28;" f drawHP src/Dodge/Render/HUD.hs 53;" f drawHUD src/Dodge/Render/HUD.hs 45;" f @@ -4132,14 +4132,14 @@ drawLampCover src/Dodge/Prop/Draw.hs 44;" f drawLaser src/Dodge/Laser/Draw.hs 6;" f drawLightSource src/Dodge/LightSource/Draw.hs 7;" f drawLinearShockwave src/Dodge/LinearShockwave/Draw.hs 10;" f -drawList src/Dodge/Render/List.hs 211;" f +drawList src/Dodge/Render/List.hs 213;" f drawListElement src/Dodge/Render/List.hs 191;" f drawListYgapScaleYoff src/Dodge/Render/List.hs 98;" f drawListYoff src/Dodge/Render/List.hs 95;" f drawMachine src/Dodge/Machine/Draw.hs 17;" f drawMapWall src/Dodge/Render/HUD/Carte.hs 33;" f -drawMenuClick src/Dodge/Render/Picture.hs 122;" f -drawMenuCursor src/Dodge/Render/Picture.hs 135;" f +drawMenuClick src/Dodge/Render/Picture.hs 123;" f +drawMenuCursor src/Dodge/Render/Picture.hs 136;" f drawMenuOrHUD src/Dodge/Render/Picture.hs 57;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 15;" f drawMouseCursor src/Dodge/Render/Picture.hs 73;" f @@ -4152,7 +4152,7 @@ drawOptions src/Dodge/Render/MenuScreen.hs 35;" f drawPathBetween src/Dodge/Debug/Picture.hs 168;" f drawPathEdge src/Dodge/Debug/Picture.hs 222;" f drawPathing src/Dodge/Debug/Picture.hs 384;" f -drawPlus src/Dodge/Render/Picture.hs 119;" f +drawPlus src/Dodge/Render/Picture.hs 120;" f drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f drawProp src/Dodge/Prop/Draw.hs 15;" f @@ -4160,11 +4160,11 @@ drawProp' src/Dodge/Prop/Draw.hs 12;" f drawRBOptions src/Dodge/Render/HUD.hs 218;" f drawRadarSweep src/Dodge/RadarSweep/Draw.hs 7;" f drawRemoteShell src/Dodge/Projectile/Draw.hs 30;" f -drawReturn src/Dodge/Render/Picture.hs 108;" f +drawReturn src/Dodge/Render/Picture.hs 109;" f drawRootCursor src/Dodge/Render/HUD.hs 81;" f drawSSCursor src/Dodge/SelectionSections/Draw.hs 30;" f drawSSMultiCursor src/Dodge/SelectionSections/Draw.hs 41;" f -drawSelect src/Dodge/Render/Picture.hs 151;" f +drawSelect src/Dodge/Render/Picture.hs 152;" f drawSelectionList src/Dodge/Render/List.hs 35;" f drawSelectionListBackground src/Dodge/Render/List.hs 51;" f drawSelectionSections src/Dodge/SelectionSections/Draw.hs 17;" f @@ -4177,7 +4177,7 @@ drawShockwave src/Dodge/Shockwave/Draw.hs 7;" f drawSpark src/Dodge/Spark/Draw.hs 6;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 14;" f drawSubInventory src/Dodge/Render/HUD.hs 152;" f -drawSweep src/Dodge/Render/Picture.hs 188;" f +drawSweep src/Dodge/Render/Picture.hs 189;" f drawSwitch src/Dodge/Button/Draw.hs 15;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 28;" f drawTargetLaser src/Dodge/Particle/Draw.hs 6;" f @@ -4393,7 +4393,7 @@ getCrDexterity src/Dodge/Creature/Statistics.hs 13;" f getCrEquipment src/Dodge/Equipment.hs 7;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 16;" f getDamageCoding src/Dodge/Terminal.hs 178;" f -getDistortions src/Dodge/Render.hs 382;" f +getDistortions src/Dodge/Render.hs 383;" f getEquipmentAllocation src/Dodge/Inventory/RBList.hs 47;" f getItem src/Dodge/Item/Location.hs 15;" f getLDPWidth src/Dodge/Render/List.hs 90;" f @@ -4634,7 +4634,7 @@ isLeftOfA src/Geometry.hs 181;" f isNothing' src/MaybeHelp.hs 33;" f isOnSeg src/Geometry.hs 240;" f isOutLnk src/Dodge/PlacementSpot.hs 164;" f -isOverTerminalScreen src/Dodge/Update.hs 446;" f +isOverTerminalScreen src/Dodge/Update.hs 448;" f isPutID src/Dodge/Placement/Instance/Wall.hs 129;" f isRHS src/Geometry/LHS.hs 24;" f isUnusedLnk src/Dodge/PlacementSpot.hs 61;" f @@ -4891,7 +4891,7 @@ makeTlsTimeRadColPos src/Dodge/LightSource.hs 88;" f makeTypeCraft src/Dodge/Item/Craftable.hs 13;" f makeTypeCraftNum src/Dodge/Item/Craftable.hs 7;" f mapOverlay src/Dodge/Render/HUD/Carte.hs 24;" f -markWallSeen src/Dodge/Update.hs 740;" f +markWallSeen src/Dodge/Update.hs 742;" f maxDamageType src/Dodge/Damage.hs 37;" f maxShowX src/Dodge/Combine/Graph.hs 49;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f @@ -4902,7 +4902,7 @@ maybeClearPath src/Dodge/Block.hs 77;" f maybeClearPaths src/Dodge/Block.hs 74;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 368;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 428;" f maybeOpenTerminal src/Dodge/Update.hs 123;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 111;" f @@ -4986,7 +4986,7 @@ mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 159;" f modTo src/Geometry/Zone.hs 10;" f mouseActionsCr src/Dodge/Creature/YourControl.hs 153;" f mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 58;" f -mouseCursorType src/Dodge/Render/Picture.hs 79;" f +mouseCursorType src/Dodge/Render/Picture.hs 80;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f moveBullet src/Dodge/Bullet.hs 193;" f moveCombineSel src/Dodge/Update/Scroll.hs 58;" f @@ -5018,7 +5018,7 @@ mvBullet src/Dodge/Bullet.hs 33;" f mvButton src/Dodge/Placement/PlaceSpot.hs 176;" f mvCr src/Dodge/Placement/PlaceSpot.hs 186;" f mvFS src/Dodge/Placement/PlaceSpot.hs 189;" f -mvGust src/Dodge/Update.hs 769;" f +mvGust src/Dodge/Update.hs 771;" f mvLS src/Dodge/Placement/PlaceSpot.hs 217;" f mvP src/Dodge/Wall/Move.hs 54;" f mvPP src/Dodge/Placement/PlaceSpot.hs 183;" f @@ -5127,7 +5127,7 @@ parseNum src/Dodge/Debug/Terminal.hs 73;" f pathConnected src/Dodge/Room/CheckConsistency.hs 14;" f pathEdgeObstructed src/Dodge/Path.hs 43;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 304;" f +pauseGame src/Dodge/Update/Input/InGame.hs 364;" f pauseMenu src/Dodge/Menu.hs 53;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseSound src/Dodge/SoundLogic.hs 41;" f @@ -5286,7 +5286,7 @@ powlistUpToN src/Multiset.hs 23;" f powlistUpToN' src/Multiset.hs 12;" f powlistUpToN'' src/Multiset.hs 31;" f ppDraw src/Dodge/Render/ShapePicture.hs 116;" f -ppEvents src/Dodge/Update.hs 732;" f +ppEvents src/Dodge/Update.hs 734;" f ppLevelReset src/Dodge/PressPlate.hs 13;" f preCritStart src/Dodge/Room/Start.hs 82;" f preloadRender src/Preload/Render.hs 30;" f @@ -5628,7 +5628,7 @@ setLinkTypePD src/Dodge/RoomLink.hs 67;" f setMinInvSize src/Dodge/Creature/Action.hs 150;" f setMusicVolume src/Sound.hs 161;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 51;" f -setOldPos src/Dodge/Update.hs 521;" f +setOldPos src/Dodge/Update.hs 523;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f @@ -5643,7 +5643,7 @@ setTiles src/Dodge/Layout.hs 65;" f setToggle src/Dodge/Prop/Update.hs 46;" f setViewDistance src/Dodge/Update/Camera.hs 221;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 61;" f -setViewport src/Dodge/Render.hs 387;" f +setViewport src/Dodge/Render.hs 388;" f setVol src/Dodge/Config/Update.hs 30;" f setWristShieldPos src/Dodge/Euse.hs 100;" f setupConLoop src/Loop.hs 102;" f @@ -5735,7 +5735,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 78;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 129;" f -simpleCrSprings src/Dodge/Update.hs 817;" f +simpleCrSprings src/Dodge/Update.hs 819;" f simpleDamFL src/Dodge/Flame.hs 41;" f simpleTermMessage src/Dodge/Terminal.hs 253;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 504;" f @@ -5784,7 +5784,7 @@ soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f soundWithStatus src/Dodge/SoundLogic.hs 98;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 48;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f -spaceAction src/Dodge/Update/Input/InGame.hs 307;" f +spaceAction src/Dodge/Update/Input/InGame.hs 367;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 186;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 179;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 171;" f @@ -5963,7 +5963,7 @@ titleOptionsMenu src/Dodge/Menu.hs 99;" f titleOptionsNoWrite src/Dodge/Menu.hs 102;" f tlsTimeRadColPos src/Dodge/LightSource.hs 69;" f tlsTimeRadFunPos src/Dodge/LightSource.hs 26;" f -tmUpdate src/Dodge/Update.hs 501;" f +tmUpdate src/Dodge/Update.hs 503;" f toBothLnk src/Dodge/RoomLink.hs 121;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 148;" f @@ -5972,7 +5972,7 @@ toLabel src/Dodge/Cleat.hs 16;" f toLasgunUpdate src/Dodge/Item/Grammar.hs 119;" f toMultiset src/Multiset.hs 64;" f toOnward src/Dodge/Tree/Compose.hs 101;" f -toTopLeft src/Dodge/Render/List.hs 221;" f +toTopLeft src/Dodge/Render/List.hs 223;" f toV2 src/Geometry/Data.hs 36;" f toV3 src/Geometry/Data.hs 38;" f toV4 src/Geometry/Data.hs 40;" f @@ -5980,8 +5980,8 @@ toggleCombineInv src/Dodge/DisplayInventory.hs 31;" f toggleCommand src/Dodge/Terminal.hs 197;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 79;" f toggleJust src/MaybeHelp.hs 41;" f -toggleMap src/Dodge/Update/Input/InGame.hs 331;" f -toggleTweakInv src/Dodge/Update/Input/InGame.hs 346;" f +toggleMap src/Dodge/Update/Input/InGame.hs 391;" f +toggleTweakInv src/Dodge/Update/Input/InGame.hs 406;" f togglesToEffects src/Dodge/Terminal.hs 248;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f @@ -6052,7 +6052,7 @@ trunkDepth src/TreeHelp.hs 161;" f tryAssignHotkey src/Dodge/Creature/YourControl.hs 85;" f tryAttachBulletBelt src/Dodge/Euse.hs 40;" f tryChargeBattery src/Dodge/Euse.hs 43;" f -tryCombine src/Dodge/Update/Input/InGame.hs 355;" f +tryCombine src/Dodge/Update/Input/InGame.hs 415;" f tryGetChannel src/Sound.hs 96;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 20;" f tryGetRootItemInvID src/Dodge/Inventory/Location.hs 29;" f @@ -6098,81 +6098,83 @@ updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla/Arc.hs 86;" f updateAttachedItems src/Dodge/Creature/State.hs 173;" f updateAutoRecharge src/Dodge/Creature/State.hs 324;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 242;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 302;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBounds src/Dodge/Update/Camera.hs 245;" f updateBulVel src/Dodge/Bullet.hs 50;" f updateBullet src/Dodge/Bullet.hs 28;" f -updateBullets src/Dodge/Update.hs 598;" f +updateBullets src/Dodge/Update.hs 600;" f updateCamera src/Dodge/Update/Camera.hs 31;" f updateCloseObjects src/Dodge/Inventory.hs 124;" f -updateCloud src/Dodge/Update.hs 783;" f -updateClouds src/Dodge/Update.hs 627;" f -updateCombineInvClick src/Dodge/Update/Input/InGame.hs 102;" f +updateCloud src/Dodge/Update.hs 785;" f +updateClouds src/Dodge/Update.hs 629;" f +updateCombineInvClick src/Dodge/Update/Input/InGame.hs 155;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 38;" f updateCombineSections src/Dodge/DisplayInventory.hs 44;" f updateCreature src/Dodge/Creature/Update.hs 10;" f -updateCreatureGroups src/Dodge/Update.hs 567;" f -updateCreatureSoundPositions src/Dodge/Update.hs 543;" f +updateCreatureGroups src/Dodge/Update.hs 569;" f +updateCreatureSoundPositions src/Dodge/Update.hs 545;" f updateDebugMessageOffset src/Dodge/Update.hs 92;" f -updateDelayedEvents src/Dodge/Update.hs 846;" f +updateDelayedEvents src/Dodge/Update.hs 848;" f updateDisplaySections src/Dodge/DisplayInventory.hs 112;" f updateDistortion src/Dodge/Distortion.hs 5;" f -updateDistortions src/Dodge/Update.hs 588;" f +updateDistortions src/Dodge/Update.hs 590;" f updateEnergyBall src/Dodge/EnergyBall.hs 46;" f -updateEnergyBalls src/Dodge/Update.hs 615;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 283;" f +updateEnergyBalls src/Dodge/Update.hs 617;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 343;" f updateExpBarrel src/Dodge/Barreloid.hs 19;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f updateFlame src/Dodge/Flame.hs 71;" f -updateFlames src/Dodge/Update.hs 612;" f +updateFlames src/Dodge/Update.hs 614;" f updateFlare src/Dodge/Flare.hs 7;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f -updateFunctionKey src/Dodge/Update/Input/InGame.hs 92;" f -updateFunctionKeys src/Dodge/Update/Input/InGame.hs 88;" f -updateGusts src/Dodge/Update.hs 766;" f +updateFunctionKey src/Dodge/Update/Input/InGame.hs 145;" f +updateFunctionKeys src/Dodge/Update/Input/InGame.hs 138;" f +updateGusts src/Dodge/Update.hs 768;" f updateHeldRootItem src/Dodge/Creature/State.hs 167;" f updateHumanoid src/Dodge/Humanoid.hs 12;" f -updateIMl src/Dodge/Update.hs 557;" f -updateIMl' src/Dodge/Update.hs 562;" f +updateIMl src/Dodge/Update.hs 559;" f +updateIMl' src/Dodge/Update.hs 564;" f updateInGameCamera src/Dodge/Update/Camera.hs 70;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 186;" f -updateInstantBullets src/Dodge/Update.hs 704;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 246;" f +updateInstantBullets src/Dodge/Update.hs 706;" f updateInv src/Dodge/Creature/State.hs 152;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 85;" f updateItemTargeting src/Dodge/Creature/State.hs 268;" f updateItemWithOrientation src/Dodge/Creature/State.hs 194;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 180;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 169;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 240;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 229;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 13;" f -updateLasers src/Dodge/Update.hs 486;" f -updateLightSources src/Dodge/Update.hs 591;" f +updateLasers src/Dodge/Update.hs 488;" f +updateLightSources src/Dodge/Update.hs 593;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 201;" f -updateMIM src/Dodge/Update.hs 717;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 261;" f +updateMIM src/Dodge/Update.hs 719;" f updateMachine src/Dodge/Machine/Update.hs 19;" f +updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 92;" f +updateMouseClickInGame' src/Dodge/Update/Input/InGame.hs 97;" f updateMouseContext src/Dodge/Update.hs 391;" f updateMouseInventorySelection src/Dodge/Update.hs 309;" f updateMouseInventorySelection' src/Dodge/Update.hs 314;" f updateMovement src/Dodge/Creature/State.hs 331;" f -updateObjCatMaybes src/Dodge/Update.hs 579;" f -updateObjMapMaybe src/Dodge/Update.hs 572;" f -updatePastWorlds src/Dodge/Update.hs 474;" f +updateObjCatMaybes src/Dodge/Update.hs 581;" f +updateObjMapMaybe src/Dodge/Update.hs 574;" f +updatePastWorlds src/Dodge/Update.hs 476;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f -updatePosEvents src/Dodge/Update.hs 624;" f +updatePosEvents src/Dodge/Update.hs 626;" f updatePreload src/Preload/Update.hs 20;" f -updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 144;" f -updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 147;" f +updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 204;" f +updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 207;" f updateProjectile src/Dodge/Projectile/Update.hs 23;" f updateProp src/Dodge/Prop/Update.hs 11;" f updateRBList src/Dodge/Inventory/RBList.hs 16;" f updateRadarBlip src/Dodge/RadarBlip.hs 8;" f -updateRadarBlips src/Dodge/Update.hs 594;" f +updateRadarBlips src/Dodge/Update.hs 596;" f updateRadarSweep src/Dodge/RadarSweep.hs 25;" f -updateRadarSweeps src/Dodge/Update.hs 618;" f +updateRadarSweeps src/Dodge/Update.hs 620;" f updateRandNode src/TreeHelp.hs 108;" f updateRenderSplit appDodge/Main.hs 106;" f updateRootItemID src/Dodge/Inventory/Location.hs 35;" f @@ -6181,30 +6183,30 @@ updateScopeZoom' src/Dodge/Update/Camera.hs 132;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 224;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 203;" f -updateSeenWalls src/Dodge/Update.hs 735;" f +updateSeenWalls src/Dodge/Update.hs 737;" f updateShockwave src/Dodge/Shockwave/Update.hs 12;" f -updateShockwaves src/Dodge/Update.hs 609;" f +updateShockwaves src/Dodge/Update.hs 611;" f updateSingleNodes src/TreeHelp.hs 97;" f updateSound src/Sound.hs 71;" f updateSounds src/Sound.hs 66;" f updateSpark src/Dodge/Spark.hs 19;" f -updateSparks src/Dodge/Update.hs 621;" f +updateSparks src/Dodge/Update.hs 623;" f updateTempLightSource src/Dodge/LightSource/Update.hs 7;" f updateTeslaArc src/Dodge/Tesla/Arc.hs 29;" f -updateTeslaArcs src/Dodge/Update.hs 603;" f +updateTeslaArcs src/Dodge/Update.hs 605;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 606;" f +updateTractorBeams src/Dodge/Update.hs 608;" f updateTurret src/Dodge/Machine/Update.hs 47;" f updateUniverse src/Dodge/Update.hs 71;" f updateUniverseFirst src/Dodge/Update.hs 83;" f updateUniverseLast src/Dodge/Update.hs 133;" f updateUniverseMid src/Dodge/Update.hs 154;" f -updateUseInputInGame src/Dodge/Update/Input/InGame.hs 34;" f +updateUseInputInGame src/Dodge/Update/Input/InGame.hs 35;" f updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 21;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 12;" f updateWallDamages src/Dodge/Update/WallDamage.hs 10;" f updateWheelEvent src/Dodge/Update/Scroll.hs 19;" f -updateWheelEvents src/Dodge/Update.hs 461;" f +updateWheelEvents src/Dodge/Update.hs 463;" f updateWorldEventFlag src/Dodge/Update.hs 117;" f updateWorldEventFlags src/Dodge/Update.hs 105;" f upperBody src/Dodge/Creature/Picture.hs 133;" f @@ -6376,9 +6378,9 @@ zipCount src/Dodge/Tree/Shift.hs 129;" f zipCountDown src/Dodge/Room/Procedural.hs 118;" f zipWithDefaults src/Dodge/Item/Display.hs 21;" f zoneCloud src/Dodge/Zoning/Cloud.hs 27;" f -zoneClouds src/Dodge/Update.hs 494;" f +zoneClouds src/Dodge/Update.hs 496;" f zoneCreature src/Dodge/Zoning/Creature.hs 52;" f -zoneCreatures src/Dodge/Update.hs 538;" f +zoneCreatures src/Dodge/Update.hs 540;" f zoneExtract src/Dodge/Zoning/Base.hs 50;" f zoneMonoid src/Dodge/Zoning/Base.hs 80;" f zoneOfCirc src/Dodge/Zoning/Base.hs 22;" f