{- Collections of rooms that branch into multiple paths. -} module Dodge.Room.Branch where --import Geometry import Dodge.LevelGen.Data import Dodge.Room.Door import Dodge.Room.Link import Dodge.Room.Procedural --import Dodge.LevelGen.Data import Dodge.Tree import Control.Monad.State import System.Random import Data.Tree branchRectWith :: RandomGen g => State g (Tree (Either Room Room)) -> State g (Tree (Either Room Room)) branchRectWith t = do x <- state $ randomR (100,200) y <- state $ randomR (100,200) b <- t root <- randomiseOutLinks $ roomRectAutoLinks x y return $ Node (Left root) [Node (Right door) [], rToL <$> treeFromTrunk [Left door] b] where rToL :: Either a a -> Either a a rToL (Right r) = Left r rToL (Left r) = Left r