diff options
Diffstat (limited to 'src/MainLoop.hs')
-rw-r--r-- | src/MainLoop.hs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/MainLoop.hs b/src/MainLoop.hs new file mode 100644 index 0000000..94b5e9d --- /dev/null +++ b/src/MainLoop.hs @@ -0,0 +1,31 @@ +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module MainLoop ( MainState(..) + , MainT(..) + , Main + , runMain + ) where + +import Game +import GLDriver +import Player + +import Control.Monad.State +import Control.Monad.Trans +import Data.Time + + +data MainState = MainState + { run :: !Bool + , driver :: !SomeDriver + , time :: !UTCTime + , players :: ![SomePlayer] + } + +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 |