keid-core-0.1.6.0: src/Engine/Camera/Event/Handler.hs
module Engine.Camera.Event.Handler
( handler
) where
import RIO
import Engine.Camera qualified as Camera
import Engine.Camera.Controls qualified as Controls
import Engine.Camera.Event.Type (Event)
import Engine.Camera.Event.Type qualified as Event
import Engine.Worker qualified as Worker
handler
:: MonadIO m
=> m Controls.ViewProcess
-> m Controls.ControlsProcess
-> Event
-> m ()
handler getViewP getCameraControls = \case
Event.Zoom delta -> do
cameraView <- getViewP
Worker.pushInput cameraView \voi -> voi
{ Camera.orbitDistance =
max 0.5 $ Camera.orbitDistance voi - delta * 0.5
}
Event.Pan delta -> do
cameraView <- getViewP
Controls.panInstant cameraView delta
Event.PanHorizontal delta -> do
controls <- getCameraControls
Worker.modifyConfig (Controls.panHorizontal controls) $
const delta
Event.PanVertical delta -> do
controls <- getCameraControls
Worker.modifyConfig (Controls.panVertical controls) $
const delta
Event.TurnAzimuth delta -> do
controls <- getCameraControls
Worker.modifyConfig (Controls.turnAzimuth controls) $
const delta
Event.TurnInclination delta -> do
controls <- getCameraControls
Worker.modifyConfig (Controls.turnInclination controls) $
const delta