Random tree structure generation of rooms
This commit is contained in:
+65
-47
@@ -1,5 +1,6 @@
|
||||
module Dodge.Floor
|
||||
( lev1
|
||||
, levx
|
||||
, generateLevel
|
||||
)
|
||||
where
|
||||
@@ -9,10 +10,14 @@ import Dodge.Data
|
||||
import Dodge.Room
|
||||
import Dodge.Room.Procedural
|
||||
import Dodge.Room.Data
|
||||
import Dodge.Room.Link
|
||||
import Dodge.Base
|
||||
import Dodge.Layout
|
||||
import Dodge.Layout.Tree.Polymorphic
|
||||
import Dodge.Layout.Tree.Either
|
||||
import Dodge.Layout.Tree.GenerateStructure
|
||||
import Dodge.Layout.Tree.Annotate
|
||||
import Dodge.Layout.Tree.Shift
|
||||
import Dodge.Creature
|
||||
import Dodge.SoundLogic
|
||||
import Dodge.RandomHelp
|
||||
@@ -20,62 +25,75 @@ import Dodge.LightSources
|
||||
import Dodge.LevelGen.Data
|
||||
|
||||
import Data.Tree
|
||||
|
||||
import Data.Maybe (fromJust,isNothing)
|
||||
import Control.Lens
|
||||
import Control.Monad.State
|
||||
|
||||
import Control.Monad.Loops
|
||||
|
||||
import System.Random
|
||||
|
||||
roomTreex :: RandomGen g => State g (Maybe [Room])
|
||||
roomTreex = do
|
||||
struct <- aTreeStrut
|
||||
let t = padCorridors $ fmap (const []) struct
|
||||
fmap shiftExpandTree $ mapM annoToRoom t
|
||||
|
||||
levx :: RandomGen g => State g [Room]
|
||||
levx = fmap fromJust $ iterateWhile isNothing roomTreex
|
||||
|
||||
lev1 :: RandomGen g => State g (Tree Room)
|
||||
lev1 = do
|
||||
struct <- aTreeStrut
|
||||
let t = padCorridors $ fmap (const []) struct
|
||||
fmap shiftRoomTree $ mapM annoToRoom t
|
||||
|
||||
lev1' :: RandomGen g => State g (Tree Room)
|
||||
lev1' = do
|
||||
firstWeapon <- takeOne $ [[branchRectWith weaponRoom,blockedCorridor]] ++ replicate 5 [weaponRoom]
|
||||
iterateWhile boundClip $ fmap (shiftRoomTree . expandTreeBy id)
|
||||
$ sequence $ treePost
|
||||
(
|
||||
[return $ return $ Right deadEndRoom
|
||||
]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door
|
||||
,glassSwitchBack >>= randomiseLinks]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ [miniRoom3]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ [roomCCrits]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++[roomMiniIntro]
|
||||
++ [longRoom >>= randomiseLinks]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ firstWeapon
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ [randomiseLinks =<< pistolerRoom]
|
||||
++ [return $ connectRoom door]
|
||||
++ [randomiseLinks =<< shooterRoom]
|
||||
++ (replicate 3 $ randomiseLinks corridor)
|
||||
++ [return $ connectRoom (set rmPS [PS (20,40) 0 basicLS] corridor)]
|
||||
++ [return $ connectRoom corridor]
|
||||
++ (replicate 3 $ randomiseLinks corridor)
|
||||
++ [return $ connectRoom corridor]
|
||||
++[return $ connectRoom corridor,return $ connectRoom door]
|
||||
++ [shootingRange]
|
||||
++ (replicate 3 $ randomiseLinks corridor)
|
||||
++[roomMiniIntro]
|
||||
++ (replicate 3 $ randomiseLinks corridor)
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door
|
||||
,slowDoorRoom]
|
||||
++ [return $ connectRoom corridor
|
||||
,spawnerRoom
|
||||
,return $ connectRoom corridor
|
||||
]
|
||||
)
|
||||
$ randomiseLinks corridor
|
||||
$ sequence $ treePost
|
||||
(
|
||||
[return $ return $ Right deadEndRoom
|
||||
]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door
|
||||
,glassSwitchBack >>= (fmap connectRoom . randLinks)]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ [miniRoom3]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ [roomCCrits]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++[roomMiniIntro]
|
||||
++ [longRoom >>= (fmap connectRoom . randLinks)]
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ firstWeapon
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door]
|
||||
++ [(fmap connectRoom . randLinks) =<< pistolerRoom]
|
||||
++ [return $ connectRoom door]
|
||||
++ [(fmap connectRoom . randLinks) =<< shooterRoom]
|
||||
++ (replicate 3 $ (fmap connectRoom . randLinks) corridor)
|
||||
++ [return $ connectRoom (set rmPS [PS (20,40) 0 basicLS] corridor)]
|
||||
++ [return $ connectRoom corridor]
|
||||
++ (replicate 3 $ (fmap connectRoom . randLinks) corridor)
|
||||
++ [return $ connectRoom corridor]
|
||||
++[return $ connectRoom corridor,return $ connectRoom door]
|
||||
++ [shootingRange]
|
||||
++ (replicate 3 $ (fmap connectRoom . randLinks) corridor)
|
||||
++[roomMiniIntro]
|
||||
++ (replicate 3 $ (fmap connectRoom . randLinks) corridor)
|
||||
++ [return $ connectRoom corridor
|
||||
,return $ connectRoom door
|
||||
,slowDoorRoom]
|
||||
++ [return $ connectRoom corridor
|
||||
,spawnerRoom
|
||||
,return $ connectRoom corridor
|
||||
]
|
||||
)
|
||||
$ (fmap connectRoom . randLinks) corridor
|
||||
|
||||
roomToLevel2 :: RandomGen g => State g (Tree (Either Room Room))
|
||||
roomToLevel2 = join $ takeOne
|
||||
|
||||
Reference in New Issue
Block a user