Allow for random choice between placements in different rooms
This commit is contained in:
+21
-56
@@ -1,36 +1,35 @@
|
||||
{-# OPTIONS_GHC -Wno-unused-imports #-}
|
||||
--{-# OPTIONS_GHC -Wno-unused-imports #-}
|
||||
{- | The tree of rooms that make up a level. -}
|
||||
module Dodge.Floor
|
||||
( layoutLevelFromSeed
|
||||
( initialRoomTree
|
||||
) where
|
||||
import Geometry.Data
|
||||
import Dodge.Data
|
||||
--import Geometry.Data
|
||||
--import Dodge.Data
|
||||
import Dodge.LockAndKey
|
||||
import Dodge.Creature.State.Data
|
||||
--import Dodge.Creature.State.Data
|
||||
import Dodge.Room
|
||||
import Dodge.Placement.Instance.Button
|
||||
--import Dodge.Placement.Instance.Button
|
||||
import Dodge.Tree
|
||||
import Dodge.Annotation
|
||||
import Dodge.Creature
|
||||
import Dodge.LevelGen.Data
|
||||
import Dodge.LevelGen.Switch
|
||||
import Dodge.Item.Weapon.Launcher
|
||||
import Dodge.PlacementSpot
|
||||
import Dodge.RoomPos
|
||||
import Dodge.Room.RunPast
|
||||
import MonadHelp
|
||||
--import Dodge.Creature
|
||||
--import Dodge.LevelGen.Data
|
||||
--import Dodge.LevelGen.Switch
|
||||
--import Dodge.Item.Weapon.Launcher
|
||||
--import Dodge.PlacementSpot
|
||||
--import Dodge.RoomPos
|
||||
--import Dodge.Room.RunPast
|
||||
--import MonadHelp
|
||||
import Data.Tree
|
||||
import Color
|
||||
import Dodge.Wire
|
||||
--import Color
|
||||
--import Dodge.Wire
|
||||
|
||||
import Control.Lens
|
||||
--import Control.Lens
|
||||
import Control.Monad.State
|
||||
import Control.Monad.Loops
|
||||
--import Control.Monad.Loops
|
||||
import System.Random
|
||||
import Data.Sequence hiding (zipWith)
|
||||
import Data.Maybe
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
|
||||
--import Data.Sequence hiding (zipWith)
|
||||
--import Data.Maybe
|
||||
--import qualified Data.IntMap.Strict as IM
|
||||
|
||||
initialAnoTree :: RandomGen g => Tree [Annotation g]
|
||||
initialAnoTree = padSucWithCorridors $ treeFromTrunk
|
||||
@@ -98,38 +97,4 @@ initialRoomTree :: RandomGen g => State g (Tree Room)
|
||||
initialRoomTree = do
|
||||
expandTree <$> mapM anoToRoomTree initialAnoTree
|
||||
|
||||
layoutLevelFromSeed :: Int -> Int -> IO [Room]
|
||||
layoutLevelFromSeed i seed = do
|
||||
let i' = i + 1
|
||||
putStrLn $ "Generating level with seed " ++ show seed
|
||||
let g = mkStdGen seed
|
||||
let rmtree = inorderNumberTree $ evalState initialRoomTree g
|
||||
putStrLn "Abstract layout: "
|
||||
putStrLn $ compactDrawTree $ fmap (show . snd) rmtree
|
||||
mrs <- positionRoomsFromTree rmtree
|
||||
case mrs of
|
||||
Just rs -> do
|
||||
putStrLn $ "After " ++ show i'
|
||||
++ " attempt(s), Successful generation of level with seed "
|
||||
++ show seed
|
||||
--return (fmap setLastLinkToUsed rs)
|
||||
putStrLn $ show (Prelude.length rs) ++ " rooms in total"
|
||||
return rs
|
||||
Nothing -> do
|
||||
putStr $ "Level generation with seed " ++ show seed ++ " failed: "
|
||||
let (seed',_) = random g
|
||||
layoutLevelFromSeed i' seed'
|
||||
|
||||
compactDrawTree :: Tree String -> String
|
||||
compactDrawTree = unlines . compactDraw
|
||||
|
||||
compactDraw :: Tree String -> [String]
|
||||
compactDraw (Node x [Node y ts]) = compactDraw (Node (x++","++y) ts)
|
||||
compactDraw (Node x ts0) = lines x ++ drawSubTrees ts0
|
||||
where
|
||||
drawSubTrees [] = []
|
||||
drawSubTrees [t] =
|
||||
"|" : compactDraw t
|
||||
drawSubTrees (t:ts) =
|
||||
"|" : shift "+- " "| " (compactDraw t) ++ drawSubTrees ts
|
||||
shift first other = zipWith (++) (first : repeat other)
|
||||
|
||||
Reference in New Issue
Block a user