module EventHandler where import Control.Concurrent.MVar import Linear import qualified SDL import qualified Graphics.Rendering.OpenGL as GL moveQuad :: MVar (M44 GL.GLfloat) -> MVar (M44 GL.GLfloat) -> MVar (M44 GL.GLfloat) -> MVar [SDL.Event] -> IO () moveQuad proj view model evs = modifyMVar_ proj (\mproj -> do modifyMVar_ view (\mview -> do modifyMVar_ model (\mmodel -> do plusModel <- foldl (\acc ev -> case SDL.eventPayload ev of (SDL.KeyboardEvent ( SDL.KeyboardEventData _ SDL.Pressed _ (SDL.Keysym _ code mod) )) -> let trans = mkTransformationMat (identity :: M33 GL.GLfloat) ( ( if not (SDL.keyModifierLeftShift mod) then (-1) else 1 ) * ( case code of SDL.KeycodeX -> V3 1 0 0 SDL.KeycodeY -> V3 0 1 0 _ -> V3 0 0 0 ) ) !-! (identity :: M44 GL.GLfloat) in acc !+! trans _ -> acc !+! (V4 (V4 0 0 0 0) (V4 0 0 0 0) (V4 0 0 0 0) (V4 0 0 0 0) ) ) (V4 (V4 0 0 0 0) (V4 0 0 0 0) (V4 0 0 0 0) (V4 0 0 0 0) ) <$> readMVar evs return $ mmodel !+! plusModel ) return mview ) return mproj )