Move optic zoom scrolling to item scrolling function

Zoom scrolling behaviour has slightly changed, I'm not sure how I want
it to work yet though
This commit is contained in:
2024-12-23 13:02:56 +00:00
parent a4e1fcf384
commit cae02d8008
3 changed files with 97 additions and 80 deletions
+3 -48
View File
@@ -64,15 +64,16 @@ translateFloatingCameraKeys theinput = (camCenter -~ thetran) . (camViewFrom -~
zoomFloatingCamera :: Input -> Camera -> Camera
zoomFloatingCamera theinput
| ButtonRight `M.member` (theinput ^. mouseButtons) =
camZoom *~ (zoomSpeed ^^ negate (getSmoothScrollValue theinput))
camZoom *~ (39/40 ^^ negate (getSmoothScrollValue theinput))
| otherwise = id
-- the 39/40 is taken from zoomSpeed
updateInGameCamera :: Configuration -> World -> World
updateInGameCamera cfig w =
w
& updateBounds cfig
& wCam %~ moveZoomCamera cfig (w ^. input) (you w) w
& updateScopeZoom
-- & updateScopeZoom
& rotateCamera cfig
& over wCam (setViewDistance cfig) -- I think this should be updated after the zoom?
@@ -128,52 +129,6 @@ moveZoomCamera cfig theinput cr w campos =
viewDistanceFromItems :: Creature -> Float
viewDistanceFromItems _ = 1
-- note that your _crInvLock does not apply to this TODO check that this is what
-- is wanted
updateScopeZoom :: World -> World
updateScopeZoom w = fromMaybe w $ do
i <- you w ^? crManipulation . manObject . imSelectedItem
return $ updateScopeZoom' i w
updateScopeZoom' :: Int -> World -> World
updateScopeZoom' i w
| SDL.ButtonRight `M.member` _mouseButtons (_input w) =
w & wppointer %~ doScopeZoom (w ^. input . smoothScrollAmount) (w ^. input . mousePos)
| otherwise = w & wppointer %~ resetscope
where
wppointer = cWorld . lWorld . creatures . ix 0 . crInv . ix i . itUse . uScope
resetscope (OpticScope _ _ defz) = OpticScope (V2 0 0) defz defz
doScopeZoom :: Int -> Point2 -> Scope -> Scope
doScopeZoom scrollamount mp sc = case scrollamount of
x
| x > 10 -> (zoomInLongGun mp . zoomInLongGun mp . zoomInLongGun mp) sc
| x > 5 -> (zoomInLongGun mp . zoomInLongGun mp) sc
| x > 0 -> zoomInLongGun mp sc
| x < -10 -> (zoomOutLongGun . zoomOutLongGun . zoomOutLongGun) sc
| x < -5 -> (zoomOutLongGun . zoomOutLongGun) sc
| x < 0 -> zoomOutLongGun sc
| otherwise -> sc
zoomSpeed :: Float
zoomSpeed = 39 / 40
zoomInLongGun :: Point2 -> Scope -> Scope
zoomInLongGun mousep sc = fromMaybe sc $ do
curzoom <- sc ^? opticZoom
guard $ curzoom < 8
return $
sc & opticPos .+.+~ (1 - zoomSpeed) * zoomSpeed / curzoom *.* mousep
& opticZoom %~ (/ zoomSpeed)
zoomOutLongGun :: Scope -> Scope
zoomOutLongGun sc = fromMaybe sc $ do
curzoom <- sc ^? opticZoom
guard $ curzoom > 0.5
return $
sc & opticPos %~ (\p -> p +.+ (zoomSpeed - 1) / curzoom *.* p)
& opticZoom *~ zoomSpeed
ifConfigWallRotate :: Configuration -> M.Map MouseButton Int -> World -> World
ifConfigWallRotate cfig mbs
| _gameplay_rotate_to_wall cfig && not (SDL.ButtonRight `M.member` mbs) =
+61 -1
View File
@@ -2,6 +2,8 @@ module Dodge.Update.Scroll (
updateWheelEvent,
) where
import Control.Monad
import Geometry
import qualified Data.Map.Strict as M
import Data.Maybe
import Dodge.Base
@@ -31,7 +33,7 @@ updateWheelEvent yi w = case w ^. hud . hudElement of
-- (Just (invid,hs), _) -> doHeldScroll invid hs y w
| bdown ButtonRight -> case _rbOptions w of
EquipOptions{} -> w & rbOptions . opSel %~ scrollRBOption yi rbscrollmax
NoRightButtonOptions -> w
NoRightButtonOptions -> selectedItemScroll yi w
| bdown ButtonLeft -> w & wCam . camZoom +~ y
| invKeyDown -> changeSwapSel yi w
| otherwise -> scrollAugInvSel yi w
@@ -55,6 +57,64 @@ updateWheelEvent yi w = case w ^. hud . hudElement of
bdown b = b `M.member` _mouseButtons (_input w)
invKeyDown = ScancodeCapsLock `M.member` _pressedKeys (_input w)
selectedItemScroll :: Int -> World -> World
selectedItemScroll scrollamount w = fromMaybe w $ do
i <- you w ^? crManipulation . manObject . imSelectedItem
itm <- you w ^? crInv . ix i
return $ itemScroll scrollamount itm w
itemScroll :: Int -> Item -> World -> World
itemScroll yi itm w = case itm ^. itType of
ATTACH ZOOMSCOPE -> updateScopeZoom w
_ -> w
-- note that your _crInvLock does not apply to this TODO check that this is what
-- is wanted
updateScopeZoom :: World -> World
updateScopeZoom w = fromMaybe w $ do
i <- you w ^? crManipulation . manObject . imSelectedItem
return $ updateScopeZoom' i w
updateScopeZoom' :: Int -> World -> World
updateScopeZoom' i w
| SDL.ButtonRight `M.member` _mouseButtons (_input w) =
w & wppointer %~ doScopeZoom (w ^. input . smoothScrollAmount) (w ^. input . mousePos)
| otherwise = w & wppointer %~ resetscope
where
wppointer = cWorld . lWorld . creatures . ix 0 . crInv . ix i . itUse . uScope
resetscope (OpticScope _ _ defz) = OpticScope (V2 0 0) defz defz
doScopeZoom :: Int -> Point2 -> Scope -> Scope
doScopeZoom scrollamount mp sc = case scrollamount of
x
| x > 10 -> (zoomInLongGun mp . zoomInLongGun mp . zoomInLongGun mp) sc
| x > 5 -> (zoomInLongGun mp . zoomInLongGun mp) sc
| x > 0 -> zoomInLongGun mp sc
| x < -10 -> (zoomOutLongGun . zoomOutLongGun . zoomOutLongGun) sc
| x < -5 -> (zoomOutLongGun . zoomOutLongGun) sc
| x < 0 -> zoomOutLongGun sc
| otherwise -> sc
zoomSpeed :: Float
zoomSpeed = 39 / 40
zoomInLongGun :: Point2 -> Scope -> Scope
zoomInLongGun mousep sc = fromMaybe sc $ do
curzoom <- sc ^? opticZoom
guard $ curzoom < 8
return $
sc & opticPos .+.+~ (1 - zoomSpeed) * zoomSpeed / curzoom *.* mousep
& opticZoom %~ (/ zoomSpeed)
zoomOutLongGun :: Scope -> Scope
zoomOutLongGun sc = fromMaybe sc $ do
curzoom <- sc ^? opticZoom
guard $ curzoom > 0.5
return $
sc & opticPos %~ (\p -> p +.+ (zoomSpeed - 1) / curzoom *.* p)
& opticZoom *~ zoomSpeed
moveCombineSel :: Int -> World -> World
moveCombineSel yi =
( hud . hudElement . subInventory %~ doscroll
+33 -31
View File
@@ -3403,7 +3403,7 @@ autoDetector src/Dodge/Item/Weapon/Radar.hs 11;" f
autoEffect src/Dodge/Item/Weapon/ExtraEffect.hs 18;" f
autoGunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 514;" f
autoPistol src/Dodge/Item/Held/Stick.hs 58;" f
autoRifle src/Dodge/Item/Held/Cane.hs 76;" f
autoRifle src/Dodge/Item/Held/Cane.hs 77;" f
awakeLevelPerception src/Dodge/Creature/Perception.hs 162;" f
axisInt src/Geometry/Intersect.hs 227;" f
azure src/Color.hs 22;" f
@@ -3507,7 +3507,7 @@ bulletPayloadModule src/Dodge/Item/Scope.hs 44;" f
bulletSynthesizer src/Dodge/Item/Ammo.hs 121;" f
bulletTargetingModule src/Dodge/Item/Scope.hs 41;" f
bulletWeapons src/Dodge/Combine/Combinations.hs 247;" f
burstRifle src/Dodge/Item/Held/Cane.hs 82;" f
burstRifle src/Dodge/Item/Held/Cane.hs 83;" f
buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 520;" f
cFilledRect src/Dodge/CharacterEnums.hs 6;" f
cWireRect src/Dodge/CharacterEnums.hs 10;" f
@@ -3585,7 +3585,7 @@ cleatSide src/Dodge/Cleat.hs 27;" f
click1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 428;" f
clickGetCreature src/Dodge/Debug.hs 83;" f
clipV src/Geometry/Vector.hs 47;" f
clipZoom src/Dodge/Update/Camera.hs 221;" f
clipZoom src/Dodge/Update/Camera.hs 175;" f
clockCycle src/Dodge/Clock.hs 9;" f
closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 71;" f
closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 56;" f
@@ -3929,7 +3929,7 @@ displayControls src/Dodge/Menu.hs 206;" f
displayFrameTicks src/Dodge/Render/Picture.hs 39;" f
displayFreeSlots src/Dodge/DisplayInventory.hs 226;" f
displayIndents src/Dodge/DisplayInventory.hs 123;" f
displayPulse src/Dodge/Item/Display.hs 93;" f
displayPulse src/Dodge/Item/Display.hs 97;" f
displaySectionsSizes src/Dodge/DisplayInventory.hs 118;" f
displayTerminalLineString src/Dodge/Update.hs 443;" f
dist src/Geometry/Vector.hs 179;" f
@@ -3999,7 +3999,7 @@ doRoomInPlacements src/Dodge/Layout.hs 97;" f
doRoomOutPlacements src/Dodge/Layout.hs 107;" f
doRoomPlacements src/Dodge/Layout.hs 122;" f
doRoomShift src/Dodge/Room/Link.hs 33;" f
doScopeZoom src/Dodge/Update/Camera.hs 147;" f
doScopeZoom src/Dodge/Update/Scroll.hs 85;" f
doSectionSize src/Dodge/DisplayInventory.hs 248;" f
doSideEffects appDodge/Main.hs 118;" f
doStep src/Dodge/ArcStep.hs 9;" f
@@ -4013,7 +4013,7 @@ doThrust src/Dodge/Projectile/Update.hs 74;" f
doTimeScroll src/Dodge/Update.hs 206;" f
doTmTm src/Dodge/TmTm.hs 6;" f
doTmWdWd src/Dodge/WorldEffect.hs 101;" f
doWallRotate src/Dodge/Update/Camera.hs 194;" f
doWallRotate src/Dodge/Update/Camera.hs 148;" f
doWdBl src/Dodge/WorldBool.hs 10;" f
doWdCrBl src/Dodge/CreatureEffect.hs 37;" f
doWdCrCr src/Dodge/CreatureEffect.hs 12;" f
@@ -4227,14 +4227,14 @@ fadeTLS src/Dodge/LightSource/Update.hs 14;" f
fallSmallBounce src/Dodge/Prop/Moving.hs 28;" f
fallSmallBounce' src/Dodge/Prop/Moving.hs 33;" f
fallSmallBounceDamage src/Dodge/Prop/Moving.hs 11;" f
farWallDistDirection src/Dodge/Update/Camera.hs 232;" f
farWallDistDirection src/Dodge/Update/Camera.hs 186;" f
fdiv src/ShortShow.hs 27;" f
feet src/Dodge/Creature/Picture.hs 53;" f
ffoldM src/Framebuffer/Update.hs 79;" f
filter3 src/FoldableHelp.hs 76;" f
filterSectionsPair src/Dodge/DisplayInventory.hs 193;" f
findBlips src/Dodge/RadarSweep.hs 44;" f
findBoundDists src/Dodge/Update/Camera.hs 241;" f
findBoundDists src/Dodge/Update/Camera.hs 195;" f
findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f
findClosePoint src/Dodge/LevelGen/StaticWalls/Deprecated.hs 74;" f
findIndex src/IntMapHelp.hs 85;" f
@@ -4336,8 +4336,8 @@ geometryTests test/Spec.hs 17;" f
geometryUnitTests test/Spec.hs 22;" f
geqConstr src/SameConstr.hs 21;" f
getAmmoLinks src/Dodge/Item/Grammar.hs 81;" f
getArguments src/Dodge/Update/Scroll.hs 152;" f
getArguments' src/Dodge/Update/Scroll.hs 140;" f
getArguments src/Dodge/Update/Scroll.hs 210;" f
getArguments' src/Dodge/Update/Scroll.hs 198;" f
getAvailableListLines src/Dodge/SelectionList.hs 10;" f
getBulletTrajectory src/Dodge/HeldUse.hs 430;" f
getBulletType src/Dodge/HeldUse.hs 404;" f
@@ -4402,7 +4402,7 @@ gridPoints'' src/Grid.hs 74;" f
gridPointsOff src/Grid.hs 62;" f
groupSplitItemAmounts src/Dodge/Combine.hs 51;" f
gruntS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 502;" f
guardDisconnectedID src/Dodge/Update/Scroll.hs 73;" f
guardDisconnectedID src/Dodge/Update/Scroll.hs 131;" f
gut1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 536;" f
gut2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 388;" f
gut3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 368;" f
@@ -4470,7 +4470,7 @@ humanoidAIList src/Dodge/Humanoid.hs 181;" f
iShape src/Dodge/Placement/Instance/LightSource.hs 73;" f
icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f
icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f
ifConfigWallRotate src/Dodge/Update/Camera.hs 177;" f
ifConfigWallRotate src/Dodge/Update/Camera.hs 131;" f
ildtPropagate src/Dodge/DoubleTree.hs 57;" f
impulsiveAIBefore src/Dodge/Creature/Impulse.hs 22;" f
inLink src/Dodge/RoomLink.hs 113;" f
@@ -4607,6 +4607,7 @@ itemNumberDisplay src/Dodge/Item/Display.hs 82;" f
itemRooms src/Dodge/LockAndKey.hs 39;" f
itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 27;" f
itemSPic src/Dodge/Item/Draw/SPic.hs 34;" f
itemScroll src/Dodge/Update/Scroll.hs 64;" f
itemString src/Dodge/Item/Display.hs 47;" f
itemToBreakLists src/Dodge/Item/Grammar.hs 50;" f
itemToFunction src/Dodge/Item/Grammar.hs 87;" f
@@ -4836,7 +4837,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 583;" f
maybeOpenTerminal src/Dodge/Update.hs 123;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 111;" f
maybeWarmupStatus src/Dodge/Item/Display.hs 99;" f
maybeWarmupStatus src/Dodge/Item/Display.hs 103;" f
mcApplyDamage src/Dodge/Machine/Update.hs 108;" f
mcKillBut src/Dodge/Machine/Destroy.hs 34;" f
mcKillTerm src/Dodge/Machine/Destroy.hs 26;" f
@@ -4889,7 +4890,7 @@ minCrIXOn src/Dodge/Zoning/Creature.hs 45;" f
minOn src/FoldableHelp.hs 35;" f
mini1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 334;" f
miniGunCrit src/Dodge/Creature.hs 62;" f
miniGunX src/Dodge/Item/Held/Cane.hs 95;" f
miniGunX src/Dodge/Item/Held/Cane.hs 96;" f
miniGunXPict src/Dodge/Item/Draw/SPic.hs 345;" f
miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 340;" f
miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 528;" f
@@ -4920,7 +4921,7 @@ mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 58;" f
mouseCursorType src/Dodge/Render/Picture.hs 80;" f
mouseWorldPos src/Dodge/Base/Coordinate.hs 48;" f
moveBullet src/Dodge/Bullet.hs 182;" f
moveCombineSel src/Dodge/Update/Scroll.hs 58;" f
moveCombineSel src/Dodge/Update/Scroll.hs 116;" f
moveHammerUp src/Dodge/Hammer.hs 5;" f
moveInverseShockwave src/Dodge/Shockwave/Update.hs 53;" f
moveLSThen src/Dodge/Placement/Instance/LightSource.hs 30;" f
@@ -4984,7 +4985,7 @@ normalizeAnglePi src/Dodge/Base.hs 132;" f
normalizeColor src/Color.hs 76;" f
normalizeV src/Geometry/Vector.hs 43;" f
normalizeV3 src/Geometry/Vector3D.hs 84;" f
nullCommand src/Dodge/Update/Scroll.hs 143;" f
nullCommand src/Dodge/Update/Scroll.hs 201;" f
numColor src/Color.hs 128;" f
numDrawableVertices src/Shader/Parameters.hs 34;" f
numGLushort src/Shader/Parameters.hs 29;" f
@@ -5436,15 +5437,15 @@ rotate3 src/Geometry/Vector3D.hs 48;" f
rotate3x src/Geometry/Vector3D.hs 60;" f
rotate3y src/Geometry/Vector3D.hs 66;" f
rotate3z src/Geometry/Vector3D.hs 54;" f
rotateCamera src/Dodge/Update/Camera.hs 208;" f
rotateCameraBy src/Dodge/Update/Camera.hs 205;" f
rotateCamera src/Dodge/Update/Camera.hs 162;" f
rotateCameraBy src/Dodge/Update/Camera.hs 159;" f
rotateProp src/Dodge/Prop/Update.hs 49;" f
rotateSH src/Shape.hs 256;" f
rotateSHq src/Shape.hs 165;" f
rotateSHx src/Shape.hs 264;" f
rotateSP src/ShapePicture.hs 57;" f
rotateTo src/Polyhedra/Geodesic.hs 64;" f
rotateToOverlappingWall src/Dodge/Update/Camera.hs 183;" f
rotateToOverlappingWall src/Dodge/Update/Camera.hs 137;" f
rotateToZ src/Quaternion.hs 34;" f
rotateV src/Geometry/Vector.hs 105;" f
rotateVAround src/Geometry/Vector.hs 112;" f
@@ -5496,10 +5497,10 @@ screenPosAbs src/Dodge/ScreenPos.hs 15;" f
screenToWorldPos src/Dodge/Base/Coordinate.hs 53;" f
scrollAugInvSel src/Dodge/Inventory.hs 199;" f
scrollAugNextInSection src/Dodge/Inventory.hs 212;" f
scrollCommandStrings src/Dodge/Update/Scroll.hs 135;" f
scrollCommands src/Dodge/Update/Scroll.hs 132;" f
scrollCommandStrings src/Dodge/Update/Scroll.hs 193;" f
scrollCommands src/Dodge/Update/Scroll.hs 190;" f
scrollDebugInfoInt src/Dodge/Debug.hs 47;" f
scrollRBOption src/Dodge/Update/Scroll.hs 109;" f
scrollRBOption src/Dodge/Update/Scroll.hs 167;" f
scrollSelectionSections src/Dodge/SelectionSections.hs 26;" f
scrollTimeBack src/Dodge/Update.hs 216;" f
scrollTimeForward src/Dodge/Update.hs 238;" f
@@ -5529,6 +5530,7 @@ selSecSelSize src/Dodge/SelectionSections.hs 180;" f
selSecYint src/Dodge/SelectionSections.hs 189;" f
selectCreatureDebugItem src/Dodge/Debug.hs 39;" f
selectUse src/Dodge/SelectUse.hs 10;" f
selectedItemScroll src/Dodge/Update/Scroll.hs 58;" f
sensAboveDoor src/Dodge/Room/SensorDoor.hs 63;" f
sensInsideDoor src/Dodge/Room/SensorDoor.hs 69;" f
senseDamage src/Dodge/Machine/Update.hs 154;" f
@@ -5572,7 +5574,7 @@ setTargetMv src/Dodge/Creature/ReaderUpdate.hs 74;" f
setTile src/Dodge/Layout.hs 68;" f
setTiles src/Dodge/Layout.hs 65;" f
setToggle src/Dodge/Prop/Update.hs 46;" f
setViewDistance src/Dodge/Update/Camera.hs 227;" f
setViewDistance src/Dodge/Update/Camera.hs 181;" f
setViewPos src/Dodge/Creature/ReaderUpdate.hs 61;" f
setViewport src/Dodge/Render.hs 388;" f
setVol src/Dodge/Config/Update.hs 30;" f
@@ -5844,7 +5846,7 @@ terminalReturnEffect src/Dodge/Terminal.hs 276;" f
terminalSPic src/Dodge/Machine/Draw.hs 29;" f
terminalScreenGlow src/Dodge/Machine/Update.hs 34;" f
terminalShape src/Dodge/Machine/Draw.hs 32;" f
terminalWheelEvent src/Dodge/Update/Scroll.hs 78;" f
terminalWheelEvent src/Dodge/Update/Scroll.hs 136;" f
teslaGun src/Dodge/Item/Held/BatteryGuns.hs 21;" f
teslaGunPic src/Dodge/Item/Draw/SPic.hs 387;" f
teslaParams src/Dodge/Item/Held/BatteryGuns.hs 37;" f
@@ -6032,7 +6034,7 @@ updateAttachedItems src/Dodge/Creature/State.hs 256;" f
updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 455;" f
updateBarrel src/Dodge/Barreloid.hs 45;" f
updateBarreloid src/Dodge/Barreloid.hs 13;" f
updateBounds src/Dodge/Update/Camera.hs 251;" f
updateBounds src/Dodge/Update/Camera.hs 205;" f
updateBulVel src/Dodge/Bullet.hs 40;" f
updateBullet src/Dodge/Bullet.hs 23;" f
updateBullets src/Dodge/Update.hs 541;" f
@@ -6108,8 +6110,8 @@ updateRadarSweeps src/Dodge/Update.hs 561;" f
updateRandNode src/TreeHelp.hs 108;" f
updateRenderSplit appDodge/Main.hs 106;" f
updateRootItemID src/Dodge/Inventory/Location.hs 35;" f
updateScopeZoom src/Dodge/Update/Camera.hs 133;" f
updateScopeZoom' src/Dodge/Update/Camera.hs 138;" f
updateScopeZoom src/Dodge/Update/Scroll.hs 71;" f
updateScopeZoom' src/Dodge/Update/Scroll.hs 76;" f
updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f
updateSection src/Dodge/DisplayInventory.hs 301;" f
updateSectionsPositioning src/Dodge/DisplayInventory.hs 274;" f
@@ -6331,8 +6333,8 @@ zoneWall src/Dodge/Zoning/Wall.hs 65;" f
zonesAroundPoint src/Dodge/Zoning/Base.hs 89;" f
zonesExtract src/Dodge/Zoning/Base.hs 54;" f
zoomFloatingCamera src/Dodge/Update/Camera.hs 64;" f
zoomFromItem src/Dodge/Update/Camera.hs 217;" f
zoomInLongGun src/Dodge/Update/Camera.hs 161;" f
zoomOutLongGun src/Dodge/Update/Camera.hs 169;" f
zoomFromItem src/Dodge/Update/Camera.hs 171;" f
zoomInLongGun src/Dodge/Update/Scroll.hs 99;" f
zoomOutLongGun src/Dodge/Update/Scroll.hs 107;" f
zoomScope src/Dodge/Item/Scope.hs 17;" f
zoomSpeed src/Dodge/Update/Camera.hs 158;" f
zoomSpeed src/Dodge/Update/Scroll.hs 96;" f