module Game.LambdaHack.Server.State
( StateServer(..), emptyStateServer
, DebugModeSer(..), defDebugModeSer
) where
import Data.Binary
import qualified Data.EnumMap.Strict as EM
import qualified Data.HashMap.Strict as HM
import Data.Text (Text)
import qualified System.Random as R
import Game.LambdaHack.Common.Actor
import Game.LambdaHack.Common.AtomicCmd
import Game.LambdaHack.Common.Item
import Game.LambdaHack.Common.Perception
import Game.LambdaHack.Server.Config
import Game.LambdaHack.Server.Fov
data StateServer = StateServer
{ sdisco :: !Discovery
, sdiscoRev :: !DiscoRev
, sitemRev :: !ItemRev
, sflavour :: !FlavourMap
, sacounter :: !ActorId
, sicounter :: !ItemId
, sundo :: ![Atomic]
, sper :: !Pers
, srandom :: !R.StdGen
, scenario :: !Text
, sconfig :: Config
, squit :: !Bool
, sbkpSave :: !Bool
, sdebugSer :: !DebugModeSer
, sdebugNxt :: !DebugModeSer
}
deriving (Show)
data DebugModeSer = DebugModeSer
{ sknowMap :: !Bool
, sknowEvents :: !Bool
, sniffIn :: !Bool
, sniffOut :: !Bool
, sallClear :: !Bool
, stryFov :: !(Maybe FovMode)
, sdebugCli :: !Bool
}
deriving Show
emptyStateServer :: StateServer
emptyStateServer =
StateServer
{ sdisco = EM.empty
, sdiscoRev = EM.empty
, sitemRev = HM.empty
, sflavour = emptyFlavourMap
, sacounter = toEnum 0
, sicounter = toEnum 0
, sundo = []
, sper = EM.empty
, srandom = R.mkStdGen 42
, scenario = "campaign"
, sconfig = undefined
, squit = False
, sbkpSave = False
, sdebugSer = defDebugModeSer
, sdebugNxt = defDebugModeSer
}
defDebugModeSer :: DebugModeSer
defDebugModeSer = DebugModeSer { sknowMap = False
, sknowEvents = False
, sniffIn = False
, sniffOut = False
, sallClear = False
, stryFov = Nothing
, sdebugCli = False
}
instance Binary StateServer where
put StateServer{..} = do
put sdisco
put sdiscoRev
put sitemRev
put sflavour
put sacounter
put sicounter
put sundo
put (show srandom)
put scenario
put sconfig
put sdebugSer
get = do
sdisco <- get
sdiscoRev <- get
sitemRev <- get
sflavour <- get
sacounter <- get
sicounter <- get
sundo <- get
g <- get
scenario <- get
sconfig <- get
sdebugSer <- get
let srandom = read g
sper = EM.empty
squit = False
sbkpSave = False
sdebugNxt = defDebugModeSer
return StateServer{..}
instance Binary DebugModeSer where
put DebugModeSer{..} = do
put sknowMap
put sknowEvents
put sniffIn
put sniffOut
put sallClear
put stryFov
put sdebugCli
get = do
sknowMap <- get
sknowEvents <- get
sniffIn <- get
sniffOut <- get
sallClear <- get
stryFov <- get
sdebugCli <- get
return DebugModeSer{..}