piyo-0.1.0.0: src/Piyo/Internal/InputState.hs
module Piyo.Internal.InputState
( updateInputs
, mkAction
, extractPayload
, payloadToAction
, getKey
)
where
import qualified SDL
import Data.List
import Piyo.Internal.Common
import Piyo.Internal.Types
updateInputs :: KeyMotion -> [Input] -> [Input]
updateInputs (Pressed i) is = union is [i]
updateInputs (Released i) is = is \\ [i]
mkAction :: Maybe SDL.Event -> Action
mkAction = maybe Idle (payloadToAction . extractPayload)
extractPayload :: SDL.Event -> SDL.EventPayload
extractPayload (SDL.Event _ p) = p
payloadToAction :: SDL.EventPayload -> Action
payloadToAction SDL.QuitEvent = Quit
payloadToAction (SDL.KeyboardEvent k) = getKey k
payloadToAction _ = Idle
getKey :: SDL.KeyboardEventData -> Action
getKey (SDL.KeyboardEventData _ SDL.Pressed False keysym) =
case SDL.keysymKeycode keysym of
SDL.KeycodeEscape -> Quit
SDL.KeycodeUp -> KeyInput (Pressed BtnUp)
SDL.KeycodeDown -> KeyInput (Pressed BtnDown)
SDL.KeycodeLeft -> KeyInput (Pressed BtnLeft)
SDL.KeycodeRight -> KeyInput (Pressed BtnRight)
SDL.KeycodeZ -> KeyInput (Pressed BtnA)
SDL.KeycodeX -> KeyInput (Pressed BtnB)
_ -> Idle
getKey (SDL.KeyboardEventData _ SDL.Released False keysym) =
case SDL.keysymKeycode keysym of
SDL.KeycodeEscape -> Quit
SDL.KeycodeUp -> KeyInput (Released BtnUp)
SDL.KeycodeDown -> KeyInput (Released BtnDown)
SDL.KeycodeLeft -> KeyInput (Released BtnLeft)
SDL.KeycodeRight -> KeyInput (Released BtnRight)
SDL.KeycodeZ -> KeyInput (Pressed BtnA)
SDL.KeycodeX -> KeyInput (Pressed BtnB)
_ -> Idle
getKey _ = Idle