gloss-1.13.2.2: Graphics/Gloss/Interface/Pure/Game.hs
{-# LANGUAGE ExplicitForAll #-}
-- We export this stuff separately so we don't clutter up the
-- API of the Graphics.Gloss module.
-- | This game mode lets you manage your own input. Pressing ESC will still abort the program,
-- but you don't get automatic pan and zoom controls like with `displayInWindow`.
module Graphics.Gloss.Interface.Pure.Game
( module Graphics.Gloss.Data.Display
, module Graphics.Gloss.Data.Picture
, module Graphics.Gloss.Data.Color
, play
, Event(..), Key(..), SpecialKey(..), MouseButton(..), KeyState(..), Modifiers(..))
where
import Graphics.Gloss.Data.Display
import Graphics.Gloss.Data.Picture
import Graphics.Gloss.Data.Color
import Graphics.Gloss.Internals.Interface.Game
import Graphics.Gloss.Internals.Interface.Backend
-- | Play a game in a window. Like `simulate`, but you manage your own input events.
play :: Display -- ^ Display mode.
-> Color -- ^ Background color.
-> Int -- ^ Number of simulation steps to take for each second of real time.
-> world -- ^ The initial world.
-> (world -> Picture) -- ^ A function to convert the world a picture.
-> (Event -> world -> world)
-- ^ A function to handle input events.
-> (Float -> world -> world)
-- ^ A function to step the world one iteration.
-- It is passed the period of time (in seconds) needing to be advanced.
-> IO ()
play display backColor simResolution
worldStart worldToPicture worldHandleEvent worldAdvance
= do _ <- playWithBackendIO defaultBackendState
display backColor simResolution
worldStart
(return . worldToPicture)
(\event world -> return $ worldHandleEvent event world)
(\time world -> return $ worldAdvance time world)
True
return ()