cuboid-0.1: Main.hs
{-# LANGUAGE Arrows #-}
module Main where
import FRP.Yampa
import Graphics.UI.GLUT hiding (Level,Vector3(..),normalize)
import Data.IORef
import Graphics
import Input
import GameLogic
-- | Main, initializes Yampa and sets up reactimation loop
main :: IO ()
main = do
newInput <- newIORef NoEvent
rh <- reactInit (initGL >> return NoEvent) (\_ _ b -> b >> return False)
(parseInput >>> calculateState >>> game)
displayCallback $= return ()
keyboardMouseCallback $= Just
(\k ks m _ -> writeIORef newInput (Event $ Keyboard k ks m))
idleCallback $= Just (idle newInput rh)
mainLoop
-- | Reactimation iteration, supplying the input
idle :: IORef (Event Input) -> ReactHandle (Event Input) (IO ()) -> IO ()
idle newInput rh = do
newInput' <- readIORef newInput
react rh (1, Just newInput')
return ()