{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleContexts #-} module Affection.Subsystems.AffectionKeyboard where import Affection.Types import Affection.Util import Affection.MessageBus import Affection.Subsystems.Class import Control.Concurrent.STM as STM import Control.Monad.IO.Class (liftIO) import qualified SDL consumeSDLKeyboardEvents :: (Participant ak KeyboardMessage us) => ak -> [SDL.EventPayload] -> Affection us [SDL.EventPayload] consumeSDLKeyboardEvents ak = doConsume where doConsume [] = return [] doConsume (e:es) = do ts <- getElapsedTime case e of SDL.KeyboardEvent dat -> do partEmit ak (MsgKeyboardEvent ts (SDL.keyboardEventWindow dat) (SDL.keyboardEventKeyMotion dat) (SDL.keyboardEventRepeat dat) (SDL.keyboardEventKeysym dat) ) doConsume es _ -> fmap (e :) (doConsume es)