From 705f0320358c0bd22f0c61ae456bc46fb04f04e2 Mon Sep 17 00:00:00 2001 From: nek0 Date: Wed, 29 Mar 2017 00:43:59 +0200 Subject: [PATCH] change keyboard event handling --- examples/example04.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/example04.hs b/examples/example04.hs index 0d7a66a..4e179bf 100644 --- a/examples/example04.hs +++ b/examples/example04.hs @@ -35,7 +35,7 @@ data UserData = UserData , actors :: M.Map String (Actor String) , foreground :: G.GeglBuffer , updateActors :: [Actor String] - , keyDown :: Maybe SDL.Keycode + , keysDown :: [SDL.Keycode] , cameraX :: Double } @@ -126,7 +126,7 @@ load = do , actors = actorMap , foreground = buffer , updateActors = [] - , keyDown = Nothing + , keysDown = [] , cameraX = 0 } @@ -157,8 +157,9 @@ update dt = do ud <- getAffection traceM $ show (1 / dt) ++ " FPS" + -- traceM $ show $ keysDown ud - maybe (return ()) (\code -> do + mapM_ (\code -> do let vel = 400 -- velocity in Pixels per second leg = vel * dt (G.PropertyDouble xpos) <- @@ -195,7 +196,7 @@ update dt = do , updateActors = (nmap M.! "rect") : updateActors ud , cameraX = cameraX ud + offset } - ) (keyDown ud) + ) (keysDown ud) handle :: SDL.EventPayload -> Affection UserData () handle (SDL.KeyboardEvent dat) = @@ -204,11 +205,13 @@ handle (SDL.KeyboardEvent dat) = if (SDL.keyboardEventKeyMotion dat == SDL.Pressed) then putAffection ud - { keyDown = Just $ SDL.keysymKeycode $ SDL.keyboardEventKeysym dat + { keysDown = + SDL.keysymKeycode (SDL.keyboardEventKeysym dat) : keysDown ud } else putAffection ud - { keyDown = Nothing + { keysDown = + delete (SDL.keysymKeycode $ SDL.keyboardEventKeysym dat) (keysDown ud) } handle (SDL.WindowClosedEvent _) = do