Cleanup dragging

This commit is contained in:
2026-05-13 11:58:41 +01:00
parent 91480c957d
commit 9df23c27c2
3 changed files with 278 additions and 170 deletions
+5
View File
@@ -44,4 +44,9 @@ data CardinalCover
data XInfinity a = NegInf | NonInf {_nonInf :: a} | PosInf data XInfinity a = NegInf | NonInf {_nonInf :: a} | PosInf
deriving (Eq, Ord, Show) deriving (Eq, Ord, Show)
instance Functor XInfinity where
fmap f (NonInf x) = NonInf (f x)
fmap _ NegInf = NegInf
fmap _ PosInf = PosInf
makeLenses ''XInfinity makeLenses ''XInfinity
+240 -137
View File
@@ -5,10 +5,6 @@ module Dodge.Update.Input.InGame (
updateMouseInGame, updateMouseInGame,
) where ) where
import Dodge.Data.ScreenPos
import Geometry.Data
import Dodge.Base.Coordinate
import Dodge.Button.Event
import Control.Applicative import Control.Applicative
import Control.Monad import Control.Monad
import Data.Foldable import Data.Foldable
@@ -19,10 +15,13 @@ import qualified Data.Map.Strict as M
import Data.Maybe import Data.Maybe
import Data.Monoid import Data.Monoid
import Dodge.Base.Collide import Dodge.Base.Collide
import Dodge.Base.Coordinate
import Dodge.Button.Event
import Dodge.Camera import Dodge.Camera
import Dodge.Creature.Action import Dodge.Creature.Action
import Dodge.Data.CardinalPoint import Dodge.Data.CardinalPoint
import Dodge.Data.Combine import Dodge.Data.Combine
import Dodge.Data.ScreenPos
import Dodge.Data.Terminal.Status import Dodge.Data.Terminal.Status
import Dodge.Data.Universe import Dodge.Data.Universe
import Dodge.DisplayInventory import Dodge.DisplayInventory
@@ -41,6 +40,7 @@ import Dodge.SoundLogic
import Dodge.Terminal import Dodge.Terminal
import Dodge.Update.Input.DebugTest import Dodge.Update.Input.DebugTest
import Dodge.Update.Input.Text import Dodge.Update.Input.Text
import Geometry.Data
import Geometry.Vector import Geometry.Vector
import LensHelp import LensHelp
import NewInt import NewInt
@@ -49,38 +49,32 @@ import SDL
updateUseInputInGame :: Universe -> Universe updateUseInputInGame :: Universe -> Universe
updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud . subInventory of updateUseInputInGame u = updateFunctionKeys $ case u ^. uvWorld . hud . subInventory of
DisplayTerminal tmid -> updateKeysInTerminal tmid u DisplayTerminal tmid -> updateKeysInTerminal tmid u
CombineInventory{_ciSections = sss, _ciSelection = msel@(Just (Sel (-1) _))} -> CombineInventory{_ciSections = sss, _ciSelection = msel@(Just (Sel (-1) _))} -> u
u & uvWorld . hud . subInventory %~ docombineregexinput sss msel
& tohud . subInventory %~ docombineregexinput sss msel & uvWorld . worldEventFlags . at CombineInventoryChange ?~ ()
& uvWorld . worldEventFlags . at CombineInventoryChange ?~ () _ | Just (-1) <- disel -> f diInvFilter diInvFilter (-1)
_ | disel == Just (-1) -> _ | Just 2 <- disel -> f diCloseFilter diCloseFilter 2
u
& tohud %~ dodisplayregexinput diInvFilter diInvFilter (-1)
& uvWorld . worldEventFlags . at InventoryChange ?~ ()
& uvWorld %~ setInvPosFromSS
_ | disel == Just 2 ->
u
& tohud %~ dodisplayregexinput diCloseFilter diCloseFilter 2
& uvWorld . worldEventFlags . at InventoryChange ?~ ()
& uvWorld %~ setInvPosFromSS
_ -> updateKeysInGame u _ -> updateKeysInGame u
where where
disel = u ^? uvWorld . hud . diSelection . _Just . slSec disel = u ^? uvWorld . hud . diSelection . _Just . slSec
tohud = uvWorld . hud f x y i = u
& uvWorld . hud %~ dodisplayregexinput x y i
& uvWorld . worldEventFlags . at InventoryChange ?~ ()
& uvWorld %~ setInvPosFromSS
dodisplayregexinput filterprism filterlens x di = fromMaybe di $ do dodisplayregexinput filterprism filterlens x di = fromMaybe di $ do
sss <- di ^? diSections sss <- di ^? diSections
msel <- di ^? diSelection msel <- di ^? diSelection
filts <- di ^? filterprism filts <- di ^? filterprism
let (sss', msel', filts') = doRegexInput (u ^. uvWorld . input) x sss msel filts let (sss', msel', filts') = doRegexInput (u ^. uvWorld . input) x sss msel filts
return $ return $ di
di & diSections .~ sss' & diSections .~ sss'
& diSelection .~ msel' & diSelection .~ msel'
& filterlens .~ filts' & filterlens .~ filts'
docombineregexinput sss msel ci = fromMaybe ci $ do docombineregexinput sss msel ci = fromMaybe ci $ do
filts <- ci ^? ciFilter filts <- ci ^? ciFilter
let (sss', msel', filts') = doRegexInput (u ^. uvWorld . input) (-1) sss msel filts let (sss', msel', filts') = doRegexInput (u ^. uvWorld . input) (-1) sss msel filts
return $ return $ ci
ci & ciSections .~ sss' & ciSections .~ sss'
& ciSelection .~ msel' & ciSelection .~ msel'
& ciFilter .~ filts' & ciFilter .~ filts'
@@ -103,26 +97,23 @@ updateMouseHeldInGame cfig w = case w ^. input . mouseContext of
| ButtonRight `M.member` (w ^. input . mouseButtons) -> | ButtonRight `M.member` (w ^. input . mouseButtons) ->
w & input . mouseContext .~ MouseGameRotate (dist (mouseWorldPosW w) (w ^. wCam . camCenter)) w & input . mouseContext .~ MouseGameRotate (dist (mouseWorldPosW w) (w ^. wCam . camCenter))
OverInvDragSelect (Just sstart) _ -> OverInvDragSelect (Just sstart) _ ->
let sss = w ^. hud . diSections case inverseSelNumPos cfig invDP (w ^. input . mousePos) sss of
in case inverseSelNumPos cfig invDP (w ^. input . mousePos) sss of Nothing -> w & input . mouseContext . mcoSelEnd .~ Nothing
Nothing -> w & input . mouseContext . mcoSelEnd .~ Nothing Just m
Just (NonInf (i, j)) | fmap fst m == NonInf (fst sstart) -> w & input . mouseContext . mcoSelEnd ?~ (m ^?! nonInf . _2)
| i == fst sstart -> w & input . mouseContext . mcoSelEnd ?~ j | fmap fst m < NonInf (fst sstart) -> w & input . mouseContext . mcoSelEnd ?~ 0
| i < fst sstart -> w & input . mouseContext . mcoSelEnd ?~ 0 | otherwise -> w & input . mouseContext . mcoSelEnd .~
| otherwise -> w fmap fst (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems)
& input . mouseContext . mcoSelEnd -- Just (NonInf (i, j))
.~ fmap -- | i == fst sstart -> w & input . mouseContext . mcoSelEnd ?~ j
fst -- | i < fst sstart -> w & input . mouseContext . mcoSelEnd ?~ 0
(IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems) -- | otherwise -> w & input . mouseContext . mcoSelEnd .~
Just NegInf -> w & input . mouseContext . mcoSelEnd ?~ 0 -- fmap fst (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems)
Just PosInf -> -- Just NegInf -> w & input . mouseContext . mcoSelEnd ?~ 0
w & input . mouseContext . mcoSelEnd -- Just PosInf -> w & input . mouseContext . mcoSelEnd .~
.~ fmap -- fmap fst (IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems)
fst
(IM.lookupMax =<< sss ^? ix (fst sstart) . ssItems)
-- not sure how the above performs when filtering... -- not sure how the above performs when filtering...
OverInvDragSelect Nothing _ -> fromMaybe w $ do OverInvDragSelect Nothing _ -> fromMaybe w $ do
sss <- w ^? hud . diSections
ysel <- ysel <-
inverseSelSecYint inverseSelSecYint
(posSelSecYint cfig invDP (w ^. input . mousePos . _y)) (posSelSecYint cfig invDP (w ^. input . mousePos . _y))
@@ -133,16 +124,20 @@ updateMouseHeldInGame cfig w = case w ^. input . mouseContext of
OverInvDrag k mmouseover -> doDrag cfig 30 k mmouseover w OverInvDrag k mmouseover -> doDrag cfig 30 k mmouseover w
OverTerminalBar p -> w & tmLDP %~ setPixelOffsetBounded cfig (p + w ^. input . mousePos) OverTerminalBar p -> w & tmLDP %~ setPixelOffsetBounded cfig (p + w ^. input . mousePos)
_ -> w _ -> w
where
sss = w ^. hud . diSections
setPixelOffsetBounded :: Config -> Point2 -> LDParams -> LDParams setPixelOffsetBounded :: Config -> Point2 -> LDParams -> LDParams
setPixelOffsetBounded cfig (V2 x y) ldp = ldp & ldpPos . spPixelOff .~ V2 x' y' setPixelOffsetBounded cfig (V2 x y) ldp = ldp & ldpPos . spPixelOff .~ V2 x' y'
where where
h = fromIntegral $ cfig ^. windowY h = fromIntegral $ cfig ^. windowY
w = fromIntegral $ cfig ^. windowX w = fromIntegral $ cfig ^. windowX
x' = min (w - (w*a + 1+10*ldp ^?! ldpSize . _Just . _x . to fromIntegral)) x' =
$ max (1 - w * a) x min (w - (w * a + 1 + 10 * ldp ^?! ldpSize . _Just . _x . to fromIntegral)) $
y' = min (h-(h*b + 20)) max (1 - w * a) x
$ max (1+20*(ldp^.ldpVerticalGap + ldp^?!ldpSize._Just._y.to fromIntegral)-h*b) y y' =
min (h - (h * b + 20)) $
max (1 + 20 * (ldp ^. ldpVerticalGap + ldp ^?! ldpSize . _Just . _y . to fromIntegral) - h * b) y
V2 a b = ldp ^. ldpPos . spScreenOff V2 a b = ldp ^. ldpPos . spScreenOff
doDrag :: Config -> Int -> Int -> Maybe (Int, Int) -> World -> World doDrag :: Config -> Int -> Int -> Maybe (Int, Int) -> World -> World
@@ -164,10 +159,12 @@ tryDropSelected mpos w = do
j <- w ^? hud . diSelection . _Just . slInt j <- w ^? hud . diSelection . _Just . slInt
xs <- selectionSet w xs <- selectionSet w
let xmin = IS.findMin xs let xmin = IS.findMin xs
return return
. (hud . diSelection ?~ Sel 3 (j-xmin) ) . (hud . diSelection ?~ Sel 3 (j - xmin))
. (hud . diSections . ix 3 . ssSet .~ IS.fromDistinctAscList [0..IS.size xs - 1]) . (hud . diSections . ix 3 . ssSet .~ IS.fromDistinctAscList [0 .. IS.size xs - 1])
. foldl' (flip $ dropItem cr) w . IS.toDescList $ xs . foldl' (flip $ dropItem cr) w
. IS.toDescList
$ xs
selectionSet :: World -> Maybe IS.IntSet selectionSet :: World -> Maybe IS.IntSet
selectionSet w = do selectionSet w = do
@@ -175,12 +172,12 @@ selectionSet w = do
case w ^? hud . diSections . ix j . ssSet of case w ^? hud . diSections . ix j . ssSet of
Just is | not $ IS.null is -> Just is Just is | not $ IS.null is -> Just is
_ -> IS.singleton <$> w ^? hud . diSelection . _Just . slInt _ -> IS.singleton <$> w ^? hud . diSelection . _Just . slInt
--selectionSet :: World -> Maybe IS.IntSet
--selectionSet w = case w ^? hud . diSelection . _Just . slSet of -- selectionSet :: World -> Maybe IS.IntSet
-- selectionSet w = case w ^? hud . diSelection . _Just . slSet of
-- Just is' | not $ IS.null is' -> Just is' -- Just is' | not $ IS.null is' -> Just is'
-- _ -> IS.singleton <$> w ^? hud . diSelection . _Just . slInt -- _ -> IS.singleton <$> w ^? hud . diSelection . _Just . slInt
tryPickupSelected :: Int -> Maybe (Int, Int) -> World -> Maybe World tryPickupSelected :: Int -> Maybe (Int, Int) -> World -> Maybe World
tryPickupSelected k mpos w = do tryPickupSelected k mpos w = do
guard $ k == 3 guard $ k == 3
@@ -200,9 +197,9 @@ tryPickupSelected k mpos w = do
_ -> foldl' (flip $ pickUpItem 0) w ispickup & newdisel (length (cr ^. crInv)) joff xs _ -> foldl' (flip $ pickUpItem 0) w ispickup & newdisel (length (cr ^. crInv)) joff xs
where where
newdisel j joff xs = newdisel j joff xs =
-- hud . diSelection ?~ Sel 0 (j+joff) (IS.fromDistinctAscList [j .. j + IS.size xs -1]) -- hud . diSelection ?~ Sel 0 (j+joff) (IS.fromDistinctAscList [j .. j + IS.size xs -1])
(hud . diSelection ?~ Sel 0 (j+joff)) (hud . diSelection ?~ Sel 0 (j + joff))
. (hud . diSections . ix 0 . ssSet .~ IS.fromDistinctAscList [j .. j + IS.size xs -1]) . (hud . diSections . ix 0 . ssSet .~ IS.fromDistinctAscList [j .. j + IS.size xs - 1])
g i = do g i = do
NInt j <- w ^? hud . closeItems . ix i NInt j <- w ^? hud . closeItems . ix i
w ^? cWorld . lWorld . items . ix j w ^? cWorld . lWorld . items . ix j
@@ -211,51 +208,77 @@ updateMouseReleaseInGame :: World -> World
updateMouseReleaseInGame w = case w ^. input . mouseContext of updateMouseReleaseInGame w = case w ^. input . mouseContext of
OverInvDrag k mpos -> OverInvDrag k mpos ->
input . mouseContext .~ MouseInGame $ input . mouseContext .~ MouseInGame $
fromMaybe w $ tryDropSelected mpos w <|> tryPickupSelected k mpos w fromMaybe w $
tryDropSelected mpos w <|> tryPickupSelected k mpos w
OverInvDragSelect (Just ssel) mesel OverInvDragSelect (Just ssel) mesel
| ScancodeLShift `M.member` (w ^. input . pressedKeys) -> | ScancodeLShift `M.member` (w ^. input . pressedKeys) ->
w & input . mouseContext .~ MouseInGame w
& (fromMaybe id $ do & input
j <- w ^? hud . diSelection . _Just . slSec . mouseContext
return $ hud . diSections . ix j . ssSet .~ MouseInGame
%~ getuniques & ( fromMaybe id $ do
( maybe j <- w ^? hud . diSelection . _Just . slSec
mempty return $
mempty hud
--(h ssel) . diSections
(guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) . ix j
)) . ssSet
& hud . diSections . ix (fst ssel) . ssSet %~ getuniques
%~ getuniques ( maybe
( maybe mempty
mempty mempty
(h ssel) -- (h ssel)
(guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just)
) )
-- & hud . diSelection . _Just . slSet )
-- %~ getuniques & hud
-- ( maybe . diSections
-- mempty . ix (fst ssel)
-- (h ssel) . ssSet
-- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just) %~ getuniques
-- ) ( maybe
mempty
(h ssel)
(guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just)
)
-- & hud . diSelection . _Just . slSet
-- %~ getuniques
-- ( maybe
-- mempty
-- (h ssel)
-- (guard (ssel ^? _1 == w ^? hud . diSelection . _Just . slSec) >> mesel ^? _Just)
-- )
OverInvDragSelect (Just ssel) (Just esel) -> OverInvDragSelect (Just ssel) (Just esel) ->
w & input . mouseContext .~ MouseInGame w
& input
. mouseContext
.~ MouseInGame
-- & invSetSelection (f (fst ssel, esel) (h ssel esel)) -- & invSetSelection (f (fst ssel, esel) (h ssel esel))
& hud . diSections . ix (fst ssel) . ssSet .~ h ssel esel & hud
. diSections
. ix (fst ssel)
. ssSet
.~ h ssel esel
& invSetSelection (f (fst ssel, esel)) & invSetSelection (f (fst ssel, esel))
OverInvDragSelect{} -> OverInvDragSelect{} ->
w & input . mouseContext .~ MouseInGame w
-- & hud . diSelection . _Just . slSet %~ const mempty & input
& hud . diSections . each . ssSet %~ const mempty . mouseContext
.~ MouseInGame
-- & hud . diSelection . _Just . slSet %~ const mempty
& hud
. diSections
. each
. ssSet
%~ const mempty
_ -> w _ -> w
where where
getuniques x y = IS.union x y IS.\\ IS.intersection x y getuniques x y = IS.union x y IS.\\ IS.intersection x y
f (x, y) = Sel x y f (x, y) = Sel x y
-- need to set this in OverInvDragSelect (twice)? -- need to set this in OverInvDragSelect (twice)?
h (k, i) j = fold $ do h (k, i) j = fold $ do
sss <- w ^? hud . diSections . ix k . ssItems sss <- w ^? hud . diSections . ix k . ssItems
let (_, xss) = IM.split (min i j -1) sss let (_, xss) = IM.split (min i j - 1) sss
(yss, _) = IM.split (max i j + 1) xss (yss, _) = IM.split (max i j + 1) xss
return . IM.keysSet $ yss return . IM.keysSet $ yss
@@ -278,12 +301,22 @@ updateMouseClickInGame cfig w = case w ^. input . mouseContext of
return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing return $ w & input . mouseContext .~ OverInvDragSelect (Just ysel) Nothing
OverInvSelect (-1, _) OverInvSelect (-1, _)
| selsec == Just (-1) -> | selsec == Just (-1) ->
w & hud . diSelection %~ endRegex (-1) w w
& hud . diInvFilter .~ Nothing & hud
. diSelection
%~ endRegex (-1) w
& hud
. diInvFilter
.~ Nothing
OverInvSelect (2, _) OverInvSelect (2, _)
| selsec == Just 2 -> | selsec == Just 2 ->
w & hud . diSelection %~ endRegex 2 w w
& hud . diCloseFilter .~ Nothing & hud
. diSelection
%~ endRegex 2 w
& hud
. diCloseFilter
.~ Nothing
OverInvSelect (5, j) -> fromMaybe w $ do OverInvSelect (5, j) -> fromMaybe w $ do
k <- w ^? hud . closeButtons . ix j k <- w ^? hud . closeButtons . ix j
but <- w ^? cWorld . lWorld . buttons . ix k but <- w ^? cWorld . lWorld . buttons . ix k
@@ -297,22 +330,45 @@ updateMouseClickInGame cfig w = case w ^. input . mouseContext of
OverTerminal tmid TerminalPressTo{} -> continueTerminal tmid w OverTerminal tmid TerminalPressTo{} -> continueTerminal tmid w
OutsideTerminal -> w & hud . subInventory .~ NoSubInventory OutsideTerminal -> w & hud . subInventory .~ NoSubInventory
OverCombSelect x -> OverCombSelect x ->
w & hud . subInventory . ciSelection ?~ f x w
& worldEventFlags . at CombineInventoryChange ?~ () & hud
. subInventory
. ciSelection
?~ f x
& worldEventFlags
. at CombineInventoryChange
?~ ()
OverCombFilter -> OverCombFilter ->
w & hud . subInventory . ciFilter .~ Nothing w
& worldEventFlags . at CombineInventoryChange ?~ () & hud
& hud . subInventory . ciSelection %~ endCombineRegex w . subInventory
. ciFilter
.~ Nothing
& worldEventFlags
. at CombineInventoryChange
?~ ()
& hud
. subInventory
. ciSelection
%~ endCombineRegex w
OverCombCombine x -> OverCombCombine x ->
w w
& tryCombine x & tryCombine x
& worldEventFlags . at CombineInventoryChange ?~ () & worldEventFlags
& worldEventFlags . at InventoryChange ?~ () . at CombineInventoryChange
?~ ()
& worldEventFlags
. at InventoryChange
?~ ()
& maybeExitCombine & maybeExitCombine
OverCombEscape -> OverCombEscape ->
w w
& worldEventFlags . at InventoryChange ?~ () & worldEventFlags
& hud . subInventory .~ NoSubInventory . at InventoryChange
?~ ()
& hud
. subInventory
.~ NoSubInventory
OverCombFiltInv (0, j) -> fromMaybe w $ do OverCombFiltInv (0, j) -> fromMaybe w $ do
str <- str <-
fmap (take 5) $ fmap (take 5) $
@@ -344,23 +400,23 @@ endCombineRegex w = ssSetCursor (ssLookupDown 0 j) sss
j = fromMaybe 0 $ do j = fromMaybe 0 $ do
itms <- sss ^? ix 0 . ssItems itms <- sss ^? ix 0 . ssItems
(k, _) <- IM.lookupMin itms (k, _) <- IM.lookupMin itms
return (k -1) return (k - 1)
startDrag :: (Int, Int) -> World -> World startDrag :: (Int, Int) -> World -> World
startDrag (a, b) w = setcontext $ fromMaybe (invSetSelection (Sel a b) w) $ do startDrag (a, b) w = setcontext $ fromMaybe (invSetSelection (Sel a b) w) $ do
i <- w ^? hud . diSelection . _Just . slSec i <- w ^? hud . diSelection . _Just . slSec
xs <- w ^? hud . diSections . ix i . ssSet xs <- w ^? hud . diSections . ix i . ssSet
guard $ i == a && b `IS.member` xs guard $ i == a && b `IS.member` xs
return w return w
where where
setcontext = input . mouseContext .~ OverInvDrag a (Just (a, b)) setcontext = input . mouseContext .~ OverInvDrag a (Just (a, b))
--startDrag (a, b) w = setcontext $ case w ^? hud . diSelection . _Just of
-- startDrag (a, b) w = setcontext $ case w ^? hud . diSelection . _Just of
-- Just (Sel i _ xs) | i == a && b `IS.member` xs -> w -- Just (Sel i _ xs) | i == a && b `IS.member` xs -> w
-- _ -> invSetSelection (Sel a b mempty) w -- _ -> invSetSelection (Sel a b mempty) w
-- where -- where
-- setcontext = input . mouseContext .~ OverInvDrag a (Just (a, b)) -- setcontext = input . mouseContext .~ OverInvDrag a (Just (a, b))
shiftInvItems :: shiftInvItems ::
Config -> Config ->
Int -> -- recurse limit Int -> -- recurse limit
@@ -379,18 +435,18 @@ shiftInvItems cfig n k x xs ss w = setSelWhileDragging . fromMaybe w $ do
ab = ab =
(\v -> inverseSelSecYint (yint - 1) v ^? nonInf) (\v -> inverseSelSecYint (yint - 1) v ^? nonInf)
=<< w ^? hud . diSections =<< w ^? hud . diSections
guard $ xk == k || xk + 1 == k || xk -1 == k guard $ xk == k || xk + 1 == k || xk - 1 == k
(maxi, _) <- IS.maxView xs (maxi, _) <- IS.maxView xs
(mini, _) <- IS.minView xs (mini, _) <- IS.minView xs
case True of case True of
_ | x < (k, mini) -> do _ | x < (k, mini) -> do
guard $ not . null . fst $ IM.split mini ss guard $ not . null . fst $ IM.split mini ss
guard $ Just (k, mini -1) /= ab guard $ Just (k, mini - 1) /= ab
return . doDrag cfig (n -1) k (Just x) $ shiftInvItemsUp k xs w return . doDrag cfig (n - 1) k (Just x) $ shiftInvItemsUp k xs w
_ | x > (k, maxi) -> do _ | x > (k, maxi) -> do
guard $ not . null . snd $ IM.split maxi ss guard $ not . null . snd $ IM.split maxi ss
guard $ Just (k, maxi + 1) /= bn guard $ Just (k, maxi + 1) /= bn
return . doDrag cfig (n -1) k (Just x) $ shiftInvItemsDown k xs w return . doDrag cfig (n - 1) k (Just x) $ shiftInvItemsDown k xs w
_ -> Nothing _ -> Nothing
setSelWhileDragging :: World -> World setSelWhileDragging :: World -> World
@@ -400,12 +456,12 @@ setSelWhileDragging w = fromMaybe w $ do
(k, j) <- w ^? input . mouseContext . mcoMaybeSelect . _Just (k, j) <- w ^? input . mouseContext . mcoMaybeSelect . _Just
guard $ i == k && j `IS.member` xs guard $ i == k && j `IS.member` xs
return $ w & hud . diSelection . _Just . slInt .~ j return $ w & hud . diSelection . _Just . slInt .~ j
-- Sel i _ xs <- w ^? hud . diSelection . _Just -- Sel i _ xs <- w ^? hud . diSelection . _Just
-- (k, j) <- w ^? input . mouseContext . mcoMaybeSelect . _Just -- (k, j) <- w ^? input . mouseContext . mcoMaybeSelect . _Just
-- guard $ i == k && j `IS.member` xs -- guard $ i == k && j `IS.member` xs
-- return $ w & hud . diSelection . _Just . slInt .~ j -- return $ w & hud . diSelection . _Just . slInt .~ j
updateFunctionKeys :: Universe -> Universe updateFunctionKeys :: Universe -> Universe
updateFunctionKeys u = updateFunctionKeys u =
M.foldlWithKey' updateFunctionKey u (u ^. uvWorld . input . pressedKeys) M.foldlWithKey' updateFunctionKey u (u ^. uvWorld . input . pressedKeys)
@@ -459,7 +515,14 @@ updateKeysTextInputTerminal tmid u =
(uvWorld . cWorld . lWorld . terminals . ix tmid . tmStatus . tiText) (uvWorld . cWorld . lWorld . terminals . ix tmid . tmStatus . tiText)
& checkEndStatus & checkEndStatus
& tryTabComplete & tryTabComplete
& uvWorld . cWorld . lWorld . terminals . ix tmid . tmStatus . tiText %~ take 42 & uvWorld
. cWorld
. lWorld
. terminals
. ix tmid
. tmStatus
. tiText
%~ take 42
where where
checkEndStatus checkEndStatus
| u ^. uvWorld . input . pressedKeys . at ScancodeReturn == Just 0 = | u ^. uvWorld . input . pressedKeys . at ScancodeReturn == Just 0 =
@@ -504,7 +567,7 @@ doRegexInput ::
(IMSS a, Maybe Selection, Maybe String) (IMSS a, Maybe Selection, Maybe String)
doRegexInput inp i sss msel filts doRegexInput inp i sss msel filts
| backspacetonothing || escapekey = endregex i 0 | backspacetonothing || escapekey = endregex i 0
| endkeys = endregex (i + 1) (j -1) | endkeys = endregex (i + 1) (j - 1)
| otherwise = | otherwise =
( sss ( sss
, msel , msel
@@ -530,15 +593,28 @@ updateBackspaceRegex :: World -> World
updateBackspaceRegex w = case di ^? subInventory of updateBackspaceRegex w = case di ^? subInventory of
Just NoSubInventory{} Just NoSubInventory{}
| secfocus (-1) 0 -> | secfocus (-1) 0 ->
w & hud %~ trybackspace (-1) diInvFilter diInvFilter diSelection w
& worldEventFlags . at InventoryChange ?~ () & hud
%~ trybackspace (-1) diInvFilter diInvFilter diSelection
& worldEventFlags
. at InventoryChange
?~ ()
Just NoSubInventory{} Just NoSubInventory{}
| secfocus 2 3 -> | secfocus 2 3 ->
w & hud %~ trybackspace 2 diCloseFilter diCloseFilter diSelection w
& worldEventFlags . at InventoryChange ?~ () & hud
%~ trybackspace 2 diCloseFilter diCloseFilter diSelection
& worldEventFlags
. at InventoryChange
?~ ()
Just CombineInventory{} -> Just CombineInventory{} ->
w & hud . subInventory %~ trybackspace (-1) ciFilter ciFilter ciSelection w
& worldEventFlags . at InventoryChange ?~ () & hud
. subInventory
%~ trybackspace (-1) ciFilter ciFilter ciSelection
& worldEventFlags
. at InventoryChange
?~ ()
_ -> w _ -> w
where where
secfocus a b = fromMaybe False $ do secfocus a b = fromMaybe False $ do
@@ -548,9 +624,13 @@ updateBackspaceRegex w = case di ^? subInventory of
str <- he ^? filtget . _Just str <- he ^? filtget . _Just
return $ case str of return $ case str of
(_ : _) -> (_ : _) ->
he & filtset . _Just %~ init he
& selset ?~ Sel x 0 & filtset
-- & selset ?~ Sel x 0 mempty . _Just
%~ init
& selset
?~ Sel x 0
-- & selset ?~ Sel x 0 mempty
[] -> he & filtset .~ Nothing [] -> he & filtset .~ Nothing
di = w ^. hud di = w ^. hud
@@ -558,18 +638,35 @@ updateEnterRegex :: World -> World
updateEnterRegex w = case w ^? hud . subInventory of updateEnterRegex w = case w ^? hud . subInventory of
Just NoSubInventory{} Just NoSubInventory{}
| secfocus [-1, 0, 1] -> | secfocus [-1, 0, 1] ->
-- w & hud . diSelection ?~ Sel (-1) 0 mempty -- w & hud . diSelection ?~ Sel (-1) 0 mempty
w & hud . diSelection ?~ Sel (-1) 0 w
& hud . diInvFilter %~ enterregex & hud
. diSelection
?~ Sel (-1) 0
& hud
. diInvFilter
%~ enterregex
Just NoSubInventory{} Just NoSubInventory{}
| secfocus [2, 3] -> | secfocus [2, 3] ->
-- w & hud . diSelection ?~ Sel 2 0 mempty -- w & hud . diSelection ?~ Sel 2 0 mempty
w & hud . diSelection ?~ Sel 2 0 w
& hud . diCloseFilter %~ enterregex & hud
. diSelection
?~ Sel 2 0
& hud
. diCloseFilter
%~ enterregex
Just CombineInventory{} -> Just CombineInventory{} ->
w & hud . subInventory . ciFilter %~ enterregex w
-- & hud . subInventory . ciSelection ?~ Sel (-1) 0 mempty & hud
& hud . subInventory . ciSelection ?~ Sel (-1) 0 . subInventory
. ciFilter
%~ enterregex
-- & hud . subInventory . ciSelection ?~ Sel (-1) 0 mempty
& hud
. subInventory
. ciSelection
?~ Sel (-1) 0
_ -> w _ -> w
where where
secfocus xs = fromMaybe False $ do secfocus xs = fromMaybe False $ do
@@ -601,18 +698,24 @@ tryCombine :: (Int, Int) -> World -> World
tryCombine (i, j) w = fromMaybe w $ do tryCombine (i, j) w = fromMaybe w $ do
CombItem is it <- CombItem is it <-
w w
^? hud . subInventory ^? hud
. ciSections . subInventory
. ix i . ciSections
. ssItems . ix i
. ix j . ssItems
. siPayload . ix j
. _Just . siPayload
. _Just
p <- w ^? cWorld . lWorld . creatures . ix 0 . crPos . _xy p <- w ^? cWorld . lWorld . creatures . ix 0 . crPos . _xy
return $ return $
createItemYou it (foldr (destroyInvItem 0 . NInt) w (sort is)) createItemYou it (foldr (destroyInvItem 0 . NInt) w (sort is))
& soundStart InventorySound p wrench1S Nothing & soundStart InventorySound p wrench1S Nothing
& hud . diSections . ix 1 . ssSet.~ mempty & hud
. diSections
. ix 1
. ssSet
.~ mempty
-- & hud . diSelection . _Just . slSet .~ mempty -- & hud . diSelection . _Just . slSet .~ mempty
maybeExitCombine :: World -> World maybeExitCombine :: World -> World
+33 -33
View File
@@ -3026,7 +3026,7 @@ connectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 802;" f
constructEdges src/Polyhedra.hs 31;" f constructEdges src/Polyhedra.hs 31;" f
constructEdgesList src/Polyhedra.hs 40;" f constructEdgesList src/Polyhedra.hs 40;" f
contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f contToIDCont src/Dodge/LevelGen/PlacementHelper.hs 58;" f
continueTerminal src/Dodge/Update/Input/InGame.hs 452;" f continueTerminal src/Dodge/Update/Input/InGame.hs 523;" f
convexHull src/Geometry/Polygon.hs 150;" f convexHull src/Geometry/Polygon.hs 150;" f
convexHullSafe src/Geometry/Polygon.hs 172;" f convexHullSafe src/Geometry/Polygon.hs 172;" f
convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 48;" f
@@ -3368,7 +3368,7 @@ doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 51;" f
doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f doDebugTestF8 src/Dodge/Update/Input/DebugTest.hs 59;" f
doDoorLerp src/Dodge/Door/DoorLerp.hs 8;" f doDoorLerp src/Dodge/Door/DoorLerp.hs 8;" f
doDoorMount src/Dodge/Door.hs 32;" f doDoorMount src/Dodge/Door.hs 32;" f
doDrag src/Dodge/Update/Input/InGame.hs 148;" f doDrag src/Dodge/Update/Input/InGame.hs 158;" f
doDrawing src/Dodge/Render.hs 33;" f doDrawing src/Dodge/Render.hs 33;" f
doDrawing' src/Dodge/Render.hs 44;" f doDrawing' src/Dodge/Render.hs 44;" f
doFloatFloat src/Dodge/FloatFunction.hs 5;" 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 doQuickload src/Dodge/Save.hs 83;" f
doQuicksave src/Dodge/Save.hs 77;" f doQuicksave src/Dodge/Save.hs 77;" f
doRandImpulse src/Dodge/RandImpulse.hs 8;" f doRandImpulse src/Dodge/RandImpulse.hs 8;" f
doRegexInput src/Dodge/Update/Input/InGame.hs 498;" f doRegexInput src/Dodge/Update/Input/InGame.hs 576;" f
doRoomPlacements src/Dodge/Layout.hs 121;" f doRoomPlacements src/Dodge/Layout.hs 121;" f
doRoomShift src/Dodge/Room/Link.hs 34;" f doRoomShift src/Dodge/Room/Link.hs 34;" f
doScopeZoom src/Dodge/Update/Scroll.hs 89;" f doScopeZoom src/Dodge/Update/Scroll.hs 89;" f
@@ -3599,8 +3599,8 @@ encircleCloseP src/Dodge/Creature/Boid.hs 38;" f
encircleDistP src/Dodge/Creature/Boid.hs 24;" f encircleDistP src/Dodge/Creature/Boid.hs 24;" f
encircleP src/Dodge/Creature/Boid.hs 30;" f encircleP src/Dodge/Creature/Boid.hs 30;" f
endArcPos src/Dodge/Tesla.hs 87;" f endArcPos src/Dodge/Tesla.hs 87;" f
endCombineRegex src/Dodge/Update/Input/InGame.hs 340;" f endCombineRegex src/Dodge/Update/Input/InGame.hs 411;" f
endRegex src/Dodge/Update/Input/InGame.hs 334;" f endRegex src/Dodge/Update/Input/InGame.hs 405;" f
energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 742;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 742;" f
enterCombineInv src/Dodge/DisplayInventory.hs 321;" f enterCombineInv src/Dodge/DisplayInventory.hs 321;" f
enumOption src/Dodge/Menu/OptionType.hs 17;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f
@@ -3759,7 +3759,7 @@ getAutoSpringLinks src/Dodge/Item/Grammar.hs 90;" f
getAvailableListLines src/Dodge/SelectionList.hs 10;" f getAvailableListLines src/Dodge/SelectionList.hs 10;" f
getBulHitDams src/Dodge/Bullet.hs 175;" f getBulHitDams src/Dodge/Bullet.hs 175;" f
getBulletType src/Dodge/HeldUse.hs 945;" f getBulletType src/Dodge/HeldUse.hs 945;" f
getCloseObj src/Dodge/Update/Input/InGame.hs 588;" f getCloseObj src/Dodge/Update/Input/InGame.hs 700;" f
getCommand src/Dodge/Terminal.hs 61;" f getCommand src/Dodge/Terminal.hs 61;" f
getCommands src/Dodge/Terminal.hs 58;" f getCommands src/Dodge/Terminal.hs 58;" f
getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f
@@ -4010,7 +4010,7 @@ isCognizant src/Dodge/Creature/Perception.hs 115;" f
isConnected src/Dodge/Inventory/Swap.hs 86;" f isConnected src/Dodge/Inventory/Swap.hs 86;" f
isCornerLink src/Dodge/RoomLink.hs 66;" f isCornerLink src/Dodge/RoomLink.hs 66;" f
isFlyable src/Dodge/WorldEvent/ThingsHit.hs 232;" f isFlyable src/Dodge/WorldEvent/ThingsHit.hs 232;" f
isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 262;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 300;" f
isInLnk src/Dodge/PlacementSpot.hs 163;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f
isJust' src/MaybeHelp.hs 27;" f isJust' src/MaybeHelp.hs 27;" f
isLHS src/Geometry/LHS.hs 12;" f isLHS src/Geometry/LHS.hs 12;" f
@@ -4299,7 +4299,7 @@ maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f
maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f
maybeDestroyBlock src/Dodge/Wall/Damage.hs 136;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 136;" f
maybeDestroyDoor src/Dodge/Wall/Damage.hs 141;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 141;" f
maybeExitCombine src/Dodge/Update/Input/InGame.hs 618;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 736;" f
maybeOpenConsole src/Dodge/Update.hs 135;" f maybeOpenConsole src/Dodge/Update.hs 135;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 135;" f maybeTakeOne src/RandomHelp.hs 135;" f
@@ -4541,7 +4541,7 @@ passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 693;" f
pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f
pathEdgeObstructed src/Dodge/Path.hs 87;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f
pauseAndFloatCam src/Dodge/Camera.hs 10;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f
pauseGame src/Dodge/Update/Input/InGame.hs 580;" f pauseGame src/Dodge/Update/Input/InGame.hs 692;" f
pauseMenu src/Dodge/Menu.hs 57;" f pauseMenu src/Dodge/Menu.hs 57;" f
pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseMenuOptions src/Dodge/Menu.hs 64;" f
pauseSound src/Dodge/SoundLogic.hs 42;" f pauseSound src/Dodge/SoundLogic.hs 42;" f
@@ -5019,7 +5019,7 @@ selSecSelCol src/Dodge/Render/HUD.hs 527;" f
selSecSelSize src/Dodge/SelectionSections.hs 159;" f selSecSelSize src/Dodge/SelectionSections.hs 159;" f
selSecYint src/Dodge/SelectionSections.hs 168;" f selSecYint src/Dodge/SelectionSections.hs 168;" f
selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f selectedItemScroll src/Dodge/Update/Scroll.hs 49;" f
selectionSet src/Dodge/Update/Input/InGame.hs 172;" f selectionSet src/Dodge/Update/Input/InGame.hs 184;" f
semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 846;" f semitoneLoop1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 846;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 68;" f sensAboveDoor src/Dodge/Room/SensorDoor.hs 68;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 77;" f sensInsideDoor src/Dodge/Room/SensorDoor.hs 77;" f
@@ -5052,9 +5052,9 @@ setOldPos src/Dodge/Update.hs 602;" f
setOutLinks src/Dodge/RoomLink.hs 49;" f setOutLinks src/Dodge/RoomLink.hs 49;" f
setOutLinksByType src/Dodge/RoomLink.hs 76;" f setOutLinksByType src/Dodge/RoomLink.hs 76;" f
setOutLinksPD src/Dodge/RoomLink.hs 96;" f setOutLinksPD src/Dodge/RoomLink.hs 96;" f
setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 137;" f setPixelOffsetBounded src/Dodge/Update/Input/InGame.hs 145;" f
setRBCreatureTargeting src/Dodge/Creature/State.hs 318;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 318;" f
setSelWhileDragging src/Dodge/Update/Input/InGame.hs 396;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 467;" f
setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f
setShaderSource src/Shader/Compile.hs 121;" f setShaderSource src/Shader/Compile.hs 121;" f
setShadowLimits src/Dodge/Shadows.hs 11;" f setShadowLimits src/Dodge/Shadows.hs 11;" f
@@ -5097,7 +5097,7 @@ shiftByV2 src/Dodge/PlacementSpot.hs 257;" f
shiftChildren src/Dodge/Tree/Compose.hs 45;" f shiftChildren src/Dodge/Tree/Compose.hs 45;" f
shiftDraw src/Dodge/Render/ShapePicture.hs 111;" f shiftDraw src/Dodge/Render/ShapePicture.hs 111;" f
shiftInBy src/Dodge/PlacementSpot.hs 254;" f shiftInBy src/Dodge/PlacementSpot.hs 254;" f
shiftInvItems src/Dodge/Update/Input/InGame.hs 364;" f shiftInvItems src/Dodge/Update/Input/InGame.hs 435;" f
shiftInvItemsDown src/Dodge/Inventory.hs 186;" f shiftInvItemsDown src/Dodge/Inventory.hs 186;" f
shiftInvItemsUp src/Dodge/Inventory.hs 196;" f shiftInvItemsUp src/Dodge/Inventory.hs 196;" f
shiftLinkBy src/Dodge/Room/Link.hs 89;" f shiftLinkBy src/Dodge/Room/Link.hs 89;" f
@@ -5231,7 +5231,7 @@ soundWithStatus src/Dodge/SoundLogic.hs 104;" f
soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 54;" f
southPillarsRoom src/Dodge/Room/LongDoor.hs 89;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 89;" f
spPos src/ShapePicture/Data.hs 11;" f spPos src/ShapePicture/Data.hs 11;" f
spaceAction src/Dodge/Update/Input/InGame.hs 583;" f spaceAction src/Dodge/Update/Input/InGame.hs 695;" f
spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 162;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 162;" f
spanColLightI src/Dodge/Placement/Instance/LightSource.hs 155;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 155;" f
spanLS src/Dodge/Placement/Instance/LightSource.hs 147;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 147;" f
@@ -5292,7 +5292,7 @@ stackedInventory src/Dodge/Creature.hs 318;" f
startCr src/Dodge/Creature.hs 83;" f startCr src/Dodge/Creature.hs 83;" f
startCrafts src/Dodge/Room/Start.hs 94;" f startCrafts src/Dodge/Room/Start.hs 94;" f
startDeathTimer src/Dodge/Creature/Update.hs 495;" f startDeathTimer src/Dodge/Creature/Update.hs 495;" f
startDrag src/Dodge/Update/Input/InGame.hs 349;" f startDrag src/Dodge/Update/Input/InGame.hs 420;" f
startInvList src/Dodge/Creature.hs 97;" f startInvList src/Dodge/Creature.hs 97;" f
startInventory src/Dodge/Creature.hs 100;" f startInventory src/Dodge/Creature.hs 100;" f
startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f
@@ -5521,14 +5521,14 @@ truncate src/Polyhedra/Geodesic.hs 39;" f
trunkDepth src/TreeHelp.hs 164;" f trunkDepth src/TreeHelp.hs 164;" f
tryAttachItems src/Dodge/Item/Grammar.hs 35;" f tryAttachItems src/Dodge/Item/Grammar.hs 35;" f
tryClickUse src/Dodge/Creature/YourControl.hs 207;" f tryClickUse src/Dodge/Creature/YourControl.hs 207;" f
tryCombine src/Dodge/Update/Input/InGame.hs 600;" f tryCombine src/Dodge/Update/Input/InGame.hs 712;" f
tryDrawToCapacitor src/Dodge/Creature/State.hs 179;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 179;" f
tryDropSelected src/Dodge/Update/Input/InGame.hs 159;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 169;" f
tryEvadeSideways src/Dodge/Creature/Action.hs 101;" f tryEvadeSideways src/Dodge/Creature/Action.hs 101;" f
tryGetChannel src/Sound.hs 99;" f tryGetChannel src/Sound.hs 99;" f
tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 23;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 23;" f
tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 42;" f tryMeleeAttack src/Dodge/Creature/ReaderUpdate.hs 42;" f
tryPickupSelected src/Dodge/Update/Input/InGame.hs 184;" f tryPickupSelected src/Dodge/Update/Input/InGame.hs 196;" f
tryPlay src/Sound.hs 85;" f tryPlay src/Sound.hs 85;" f
tryPutItemInInv src/Dodge/Inventory/Add.hs 25;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 25;" f
tryPutItemInInvAt src/Dodge/Inventory/Add.hs 56;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 56;" f
@@ -5581,7 +5581,7 @@ updateAggroBee src/Dodge/Creature/Update.hs 129;" f
updateAimPos src/Dodge/Update.hs 400;" f updateAimPos src/Dodge/Update.hs 400;" f
updateAllNodes src/TreeHelp.hs 88;" f updateAllNodes src/TreeHelp.hs 88;" f
updateArc src/Dodge/Tesla.hs 44;" f updateArc src/Dodge/Tesla.hs 44;" f
updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 529;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 607;" f
updateBarrel src/Dodge/Barreloid.hs 43;" f updateBarrel src/Dodge/Barreloid.hs 43;" f
updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f
updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f
@@ -5625,14 +5625,14 @@ updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f
updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f
updateEnergyBall src/Dodge/EnergyBall.hs 32;" f updateEnergyBall src/Dodge/EnergyBall.hs 32;" f
updateEnergyBalls src/Dodge/Update.hs 775;" f updateEnergyBalls src/Dodge/Update.hs 775;" f
updateEnterRegex src/Dodge/Update/Input/InGame.hs 557;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 652;" f
updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f
updateFlame src/Dodge/Flame.hs 19;" f updateFlame src/Dodge/Flame.hs 19;" f
updateFlames src/Dodge/Update.hs 772;" f updateFlames src/Dodge/Update.hs 772;" f
updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f
updateFoodSearchChaseCrit src/Dodge/Creature/Update.hs 381;" f updateFoodSearchChaseCrit src/Dodge/Creature/Update.hs 381;" f
updateFunctionKey src/Dodge/Update/Input/InGame.hs 413;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 484;" f
updateFunctionKeys src/Dodge/Update/Input/InGame.hs 409;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 480;" f
updateGas src/Dodge/Update.hs 942;" f updateGas src/Dodge/Update.hs 942;" f
updateGusts src/Dodge/Update.hs 904;" f updateGusts src/Dodge/Update.hs 904;" f
updateHiveCrit src/Dodge/Creature/Update.hs 82;" f updateHiveCrit src/Dodge/Creature/Update.hs 82;" f
@@ -5640,30 +5640,30 @@ updateHoverCrit src/Dodge/Humanoid.hs 25;" f
updateIMl src/Dodge/Update.hs 639;" f updateIMl src/Dodge/Update.hs 639;" f
updateIMl' src/Dodge/Update.hs 642;" f updateIMl' src/Dodge/Update.hs 642;" f
updateInGameCamera src/Dodge/Update/Camera.hs 86;" f updateInGameCamera src/Dodge/Update/Camera.hs 86;" f
updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 479;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 557;" f
updateInt2Map src/Dodge/Zoning/Base.hs 94;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f
updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f
updateItemTargeting src/Dodge/Creature/State.hs 288;" f updateItemTargeting src/Dodge/Creature/State.hs 288;" f
updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 446;" f updateKeyContinueTerminal src/Dodge/Update/Input/InGame.hs 517;" f
updateKeyInGame src/Dodge/Update/Input/InGame.hs 473;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 551;" f
updateKeysInGame src/Dodge/Update/Input/InGame.hs 87;" f updateKeysInGame src/Dodge/Update/Input/InGame.hs 89;" f
updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 432;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 503;" f
updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 455;" f updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 526;" f
updateLampoid src/Dodge/Lampoid.hs 13;" f updateLampoid src/Dodge/Lampoid.hs 13;" f
updateLaser src/Dodge/Laser/Update.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 12;" f
updateLasers src/Dodge/Update.hs 517;" f updateLasers src/Dodge/Update.hs 517;" f
updateLeftParentSF src/Dodge/Item/Grammar.hs 179;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 179;" f
updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f
updateLivingCreature src/Dodge/Creature/Update.hs 61;" f updateLivingCreature src/Dodge/Creature/Update.hs 61;" f
updateLongPressInGame src/Dodge/Update/Input/InGame.hs 492;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 570;" f
updateMachine src/Dodge/Machine/Update.hs 24;" f updateMachine src/Dodge/Machine/Update.hs 24;" f
updateMagnets src/Dodge/Update.hs 408;" f updateMagnets src/Dodge/Update.hs 408;" f
updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 268;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 306;" f
updateMouseContext src/Dodge/Update.hs 421;" f updateMouseContext src/Dodge/Update.hs 421;" f
updateMouseContextGame src/Dodge/Update.hs 426;" f updateMouseContextGame src/Dodge/Update.hs 426;" f
updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 100;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 102;" f
updateMouseInGame src/Dodge/Update/Input/InGame.hs 90;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 92;" f
updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 210;" f updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 222;" f
updateObjCatMaybes src/Dodge/Update.hs 657;" f updateObjCatMaybes src/Dodge/Update.hs 657;" f
updateObjMapMaybe src/Dodge/Update.hs 650;" f updateObjMapMaybe src/Dodge/Update.hs 650;" f
updatePastWorlds src/Dodge/Update.hs 506;" f updatePastWorlds src/Dodge/Update.hs 506;" f