34 lines
886 B
Haskell
34 lines
886 B
Haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
|
|
|
module MainLoop ( MainState(..)
|
|
, Main(..)
|
|
, runMain
|
|
) where
|
|
|
|
import Game
|
|
import GLDriver
|
|
import Player
|
|
import Texture
|
|
import Model
|
|
|
|
import Control.Monad.State
|
|
import Control.Monad.Trans
|
|
import Data.Time
|
|
import qualified Data.Map as M
|
|
|
|
|
|
data MainState = MainState
|
|
{ run :: !Bool
|
|
, driver :: !SomeDriver
|
|
, time :: !UTCTime
|
|
, players :: ![SomePlayer]
|
|
, textures :: !(M.Map Texture TextureObject)
|
|
, models :: !(M.Map Model InterleavedObj)
|
|
, gameState :: !GameState
|
|
}
|
|
|
|
newtype Main a = Main (StateT MainState IO a)
|
|
deriving (Monad, MonadState MainState, MonadIO)
|
|
|
|
runMain :: MainState -> Main a -> IO (a, MainState)
|
|
runMain st (Main a) = runStateT a st
|