-
Notifications
You must be signed in to change notification settings - Fork 17
/
SDLInput.hs
26 lines (21 loc) · 1020 Bytes
/
SDLInput.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module DinoRush.Wrapper.SDLInput where
import qualified SDL
import Control.Monad.IO.Class (MonadIO(..))
keycodePressed :: SDL.Keycode -> SDL.EventPayload -> Bool
keycodePressed keycode event = case event of
SDL.KeyboardEvent SDL.KeyboardEventData{keyboardEventKeysym = SDL.Keysym{keysymKeycode = code}, keyboardEventKeyMotion = motion, keyboardEventRepeat } ->
code == keycode &&
motion == SDL.Pressed &&
not keyboardEventRepeat
_ -> False
keycodeReleased :: SDL.Keycode -> SDL.EventPayload -> Bool
keycodeReleased keycode event = case event of
SDL.KeyboardEvent SDL.KeyboardEventData{keyboardEventKeysym = SDL.Keysym{keysymKeycode = code}, keyboardEventKeyMotion = motion, keyboardEventRepeat } ->
code == keycode &&
motion == SDL.Released &&
not keyboardEventRepeat
_ -> False
class Monad m => SDLInput m where
pollEventPayloads :: m [SDL.EventPayload]
pollEventPayloads' :: MonadIO m => m [SDL.EventPayload]
pollEventPayloads' = liftIO $ map SDL.eventPayload <$> SDL.pollEvents