nyx-game-1.0.1.0: src/Play/Engine/Settings.hs
{-# LANGUAGE TemplateHaskell #-}
module Play.Engine.Settings where
import qualified SDL
import qualified Control.Monad.State as SM
import Control.Monad.Except
import Data.Tuple
import Play.Engine.Types
import Play.Engine.Input
import Control.Lens
data Settings
= Settings
{ _windowSize :: !Size
, _keyMap :: ![(Key, SDL.Scancode)]
, _keyStats :: !Keys
, _joyKeyStats :: !Keys
, _muteMusic :: !Bool
, _windowScale :: WindowScale
}
deriving (Show)
data WindowScale
= SmallWindow
| NormalWindow
deriving Show
makeLenses ''Settings
type Result a = SM.StateT Settings (Except [String]) a
runResult settings m = fmap swap $ runExcept $ SM.runStateT m settings
def :: Settings
def = Settings
{ _windowSize = Point 800 600
, _keyMap = defKeyMap
, _keyStats = initKeyStats
, _joyKeyStats = initKeyStats
, _muteMusic = False
, _windowScale = NormalWindow
}