packages feed

keid-core-0.1.0.0: src/Engine/Events/CursorPos.hs

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 cursorVar = CursorPos.callback . handler cursorVar

handler
  :: ( Worker.HasInput cursor
     , Worker.GetInput cursor ~ Vec2
     )
  => cursor
  -> Sink e rs
  -> CursorPos.Callback rs
handler cursorVar _sink windowX windowY = do
  -- logDebug $ "CursorPos event: " <> displayShow (windowX, windowY)
  Worker.pushInput cursorVar \_old ->
    vec2 (double2Float windowX) (double2Float windowY)