module Main where import Graphics.Rendering.OpenGL.GL import qualified GameShell data TestEventHandler = TestEventHandler { elapsed :: Float, frames :: Int } initializeTest handler = do putStrLn "initializing" return handler openGLContextCreatedTest handler = do putStrLn "OpenGL context created" return handler openGLContextWillBeDestroyedTest handler = do putStrLn "OpenGL context will be destroyed" return handler openGLContextStateInvalidatedTest handler = do putStrLn "OpenGL context state invalidated" clearColor $= Color4 0.0 0.5 0.0 0.0 return handler openGLContextResizedTest w h handler = do putStrLn ("OpenGL context resized to " ++ (show w) ++ "x" ++ (show h)) viewport $= (Position 0 0, Size (fromIntegral w) (fromIntegral h)) return handler fps (oldElapsed, oldFrames) dt = let newElapsed = oldElapsed + dt newFrames = oldFrames + 1 in if newElapsed > 1.0 then do let framesPerSecond = (fromIntegral newFrames) / newElapsed putStrLn $ (show framesPerSecond) ++ " fps" return (0.0, 0) else return (newElapsed, newFrames) displayTest dt handler = do clear [ColorBuffer] (newElapsed, newFrames) <- fps (elapsed handler, frames handler) dt return TestEventHandler { elapsed = newElapsed, frames = newFrames } mousePressedTest button handler = do putStrLn ("Mouse button " ++ (show button) ++ " pressed") return handler mouseReleasedTest button handler = do putStrLn ("Mouse button " ++ (show button) ++ " released") return handler mouseMovedByTest dx dy handler = do putStrLn ("Mouse moved by (" ++ (show dx) ++ ", " ++ (show dy) ++ ")") return handler mouseMovedToTest x y handler = do putStrLn ("Mouse moved to (" ++ (show x) ++ ", " ++ (show y) ++ ")") return handler keyPressedTest k handler = do putStrLn ("Key " ++ (show k) ++ " pressed") return handler keyReleasedTest k handler = do putStrLn ("Key " ++ (show k) ++ " released") return handler textInputTest s handler = do putStrLn ("Text input: " ++ s) return handler instance GameShell.EventHandlerObject TestEventHandler where initialize = initializeTest openGLContextCreated = openGLContextCreatedTest openGLContextWillBeDestroyed = openGLContextWillBeDestroyedTest openGLContextStateInvalidated = openGLContextStateInvalidatedTest openGLContextResized = openGLContextResizedTest display = displayTest mousePressed = mousePressedTest mouseReleased = mouseReleasedTest mouseMovedBy = mouseMovedByTest mouseMovedTo = mouseMovedToTest keyPressed = keyPressedTest keyReleased = keyReleasedTest textInput = textInputTest main = do GameShell.start TestEventHandler { elapsed = 0.0, frames = 0 }