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
+5 -9
View File
@@ -2,8 +2,7 @@
{- |
The tree of rooms that make up a level. -}
module Dodge.Floor
( levx
, layoutLevel
( layoutLevelFromSeed
) where
import Geometry.Data
import Dodge.Data
@@ -104,21 +103,18 @@ initialRoomTree :: RandomGen g => State g (Tree Room)
initialRoomTree = do
expandTreeBy id <$> mapM annoToRoomTree initialAnoTree
levx :: RandomGen g => Int -> State g ([Room] , Int)
levx _ = untilJustCount $ shiftExpandTree <$> initialRoomTree
layoutLevel :: Int -> IO [Room]
layoutLevel seed = do
layoutLevelFromSeed :: Int -> IO [Room]
layoutLevelFromSeed seed = do
putStrLn $ "Generating level with seed: " ++ show seed
let g = mkStdGen seed
let rmtree = evalState initialRoomTree g
mrs <- shiftRoomSearchIO [] (singleton rmtree)
mrs <- positionRooms rmtree
case mrs of
Just rs -> return (fmap setLastLinkToUsed rs)
Nothing -> do
putStrLn "Level generation failed"
let (seed',_) = random g
layoutLevel seed'
layoutLevelFromSeed seed'
where
setLastLinkToUsed rm = case _rmLinks rm of
(_:_) -> rm