Improve diagnostics for level generation

This commit is contained in:
2021-11-11 17:08:03 +00:00
parent f706e541b9
commit da22d9833a
4 changed files with 80 additions and 41 deletions
+3 -15
View File
@@ -11,14 +11,11 @@ import Dodge.WorldEvent.Cloud
import Dodge.SoundLogic
import Dodge.SoundLogic.LoadSound
import Geometry.Data
import Dodge.Room.Data
import System.Random
import System.Timeout
import qualified Data.Set as S
import qualified Data.IntMap.Strict as IM
import qualified Data.Map as M
import Control.Monad.State
firstWorld :: IO World
firstWorld = do
@@ -28,18 +25,9 @@ firstWorld = do
-- let g = mkStdGen i
-- (roomList,n) <- f g
-- putStrLn $ "Had to go through "++ show n ++ " random generators"
roomList <- layoutLevel i
return $ generateLevelFromRoomList roomList $ initialWorld -- note this uses a random generator defined elsewhere
where
f :: StdGen -> IO ([Room],Int)
f g = do
mayrs <- timeout 10000000 . return $ evalState (levx 1) g
case mayrs of
Nothing -> do
let i = fst $ random g
putStrLn $ "Timeout; trying new seed: " ++ show i
f (mkStdGen i)
Just rs -> return rs
roomList <- layoutLevelFromSeed i
return $ generateLevelFromRoomList roomList
$ initialWorld -- note this uses a random generator defined elsewhere
initialWorld :: World
initialWorld = defaultWorld