content: module Program.Program
      (programMain,
       programDraw) where
  
  import Data.IORef
  import World.World
  import Game.GameGraphics
  import Game.GameState
  import Menu.Menu
  import Game.GameMain
  import Menu.PostVictory
  
  mainCallback :: (IORef WorldState -> IO ())
  mainCallback worldStateRef = do
      worldState <- readIORef worldStateRef
  
      case gameState worldState of
           GameRunningState   -> gameMain worldStateRef mainCallback
           MainMenuState      -> menuMain worldStateRef mainCallback
           HowtoMenuState     -> howtoMain worldStateRef mainCallback
           PostVictoryState   -> postVictoryMain worldStateRef mainCallback
  
  programMain :: IORef WorldState -> IO ()
  programMain = mainCallback
  
  programDraw :: IORef WorldState -> IO ()
  programDraw worldStateRef = do
      worldState <- readIORef worldStateRef
  
      case gameState worldState of
           GameRunningState   -> gameDraw worldStateRef
           MainMenuState      -> menuDraw worldStateRef
           HowtoMenuState     -> howtoDraw worldStateRef
           PostVictoryState   -> postVictoryDraw worldStateRef
  
  