27 lines
595 B
Haskell
27 lines
595 B
Haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
|
|
|
module Game ( GameState(..)
|
|
, Game
|
|
, runGame
|
|
) where
|
|
|
|
import Level
|
|
import Tank
|
|
import Texture
|
|
|
|
import Control.Monad
|
|
import Control.Monad.State
|
|
import qualified Data.Map as M
|
|
|
|
|
|
data GameState = GameState
|
|
{ level :: !Level
|
|
, tanks :: ![Tank]
|
|
, textures :: !(M.Map Texture TextureObject)
|
|
} deriving (Show)
|
|
|
|
newtype Game a = Game (StateT GameState IO a)
|
|
deriving (Monad, MonadIO, MonadState GameState)
|
|
|
|
runGame :: GameState -> Game a -> IO (a, GameState)
|
|
runGame st (Game a) = runStateT a st
|