34 lines
833 B
Haskell
34 lines
833 B
Haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
|
|
|
module MainLoop ( MainState(..)
|
|
, MainT(..)
|
|
, Main
|
|
, runMain
|
|
) where
|
|
|
|
import Game
|
|
import GLDriver
|
|
import Player
|
|
import Texture
|
|
|
|
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)
|
|
}
|
|
|
|
newtype MainT m a = MainT (StateT MainState m a)
|
|
deriving (Monad, MonadState MainState, MonadIO, MonadTrans)
|
|
|
|
type Main = MainT Game
|
|
|
|
runMain :: MainState -> Main a -> Game (a, MainState)
|
|
runMain st (MainT a) = runStateT a st
|