Allow specifying seed on startup

Allow specifying the seed for the game's global RNG on startup, and
print the seed when the game exits. This'll allow us to more reliably
reproduce bugs - yay!
This commit is contained in:
Griffin Smith 2019-10-12 12:59:42 -04:00
parent d2b81df6b8
commit f1197be186
4 changed files with 68 additions and 25 deletions

View file

@ -6,6 +6,7 @@ module Xanthous.Game.Lenses
, characterPosition
, updateCharacterVision
, getInitialState
, initialStateFromSeed
-- * Collisions
, Collision(..)
@ -16,6 +17,7 @@ import Xanthous.Prelude
--------------------------------------------------------------------------------
import System.Random
import Control.Monad.State
import Control.Monad.Random (getRandom)
--------------------------------------------------------------------------------
import Xanthous.Game.State
import Xanthous.Data
@ -28,9 +30,12 @@ import Xanthous.Entities.Creature (Creature)
--------------------------------------------------------------------------------
getInitialState :: IO GameState
getInitialState = do
_randomGen <- getStdGen
let char = mkCharacter
getInitialState = initialStateFromSeed <$> getRandom
initialStateFromSeed :: Int -> GameState
initialStateFromSeed seed =
let _randomGen = mkStdGen seed
char = mkCharacter
(_characterEntityID, _entities)
= EntityMap.insertAtReturningID
(Position 0 0)
@ -42,7 +47,7 @@ getInitialState = do
_debugState = DebugState
{ _allRevealed = False
}
pure GameState {..}
in GameState {..}
positionedCharacter :: Lens' GameState (Positioned Character)