module EventHandler where import Control.Monad (when) import Control.Concurrent.MVar import Control.Lens as Lens 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 ) zero <$> readMVar evs let retval = mmodel !+! plusModel when (not $ plusModel == zero) $ print ("Current Position of object: " <> show (Lens.view translation $ retval)) return retval ) return mview ) return mproj )