module Engine.Events.CursorPos where
import RIO
import Geomancy (Vec2, vec2)
import GHC.Float (double2Float)
import UnliftIO.Resource (ReleaseKey)
import Engine.Types (StageRIO)
import Engine.Window.CursorPos qualified as CursorPos
import Engine.Worker qualified as Worker
import Engine.Events (Sink)
callback
:: ( Worker.HasInput cursor
, Worker.GetInput cursor ~ Vec2
)
=> cursor
-> Sink e rs
-> StageRIO rs ReleaseKey
callback :: cursor -> Sink e rs -> StageRIO rs ReleaseKey
callback cursor
cursorVar = Callback rs -> StageRIO rs ReleaseKey
forall st. Callback st -> StageRIO st ReleaseKey
CursorPos.callback (Callback rs -> StageRIO rs ReleaseKey)
-> (Sink e rs -> Callback rs)
-> Sink e rs
-> StageRIO rs ReleaseKey
forall b c a. (b -> c) -> (a -> b) -> a -> c
. cursor -> Sink e rs -> Callback rs
forall cursor e rs.
(HasInput cursor, GetInput cursor ~ Vec2) =>
cursor -> Sink e rs -> Callback rs
handler cursor
cursorVar
handler
:: ( Worker.HasInput cursor
, Worker.GetInput cursor ~ Vec2
)
=> cursor
-> Sink e rs
-> CursorPos.Callback rs
handler :: cursor -> Sink e rs -> Callback rs
handler cursor
cursorVar Sink e rs
_sink Double
windowX Double
windowY = do
cursor -> (GetInput cursor -> GetInput cursor) -> StageRIO rs ()
forall (m :: * -> *) var.
(MonadIO m, HasInput var) =>
var -> (GetInput var -> GetInput var) -> m ()
Worker.pushInput cursor
cursorVar \GetInput cursor
_old ->
Float -> Float -> Vec2
vec2 (Double -> Float
double2Float Double
windowX) (Double -> Float
double2Float Double
windowY)