packages feed

Eternal10Seconds-0.1: Input.hs

module Input where

import qualified Graphics.UI.SDL as SDL

-- 入力
data Input = Input {
    inputKey :: [SDL.SDLKey],
    inputMouse :: (Bool, Bool, Bool)
}

emptyInput = Input [] (False, False, False)

hasKey :: Input -> SDL.SDLKey -> Bool
hasKey input key = elem key (inputKey input)

addKey :: Input -> SDL.SDLKey -> Input
addKey i@Input { inputKey = keys } key = if elem key keys then i else i { inputKey = key:keys }

eraseKey :: Input -> SDL.SDLKey -> Input
eraseKey i@Input { inputKey = keys } key = i { inputKey = filter (/= key) keys }

-- イベントによる更新
updateInput :: Input -> SDL.Event -> Input
updateInput input (SDL.KeyDown (SDL.Keysym key mod ucode)) = addKey input key
updateInput input (SDL.KeyUp (SDL.Keysym key mod ucode)) = eraseKey input key
updateInput input SDL.Quit = addKey input SDL.SDLK_ESCAPE
updateInput input _ = input