Allow for complex room bounds for clip checks

This commit is contained in:
jgk
2021-05-03 00:57:17 +02:00
parent f71724ae8b
commit 2bf23db935
14 changed files with 92 additions and 152 deletions
+8 -52
View File
@@ -1,3 +1,5 @@
{- |
The tree of rooms that make up a level. -}
module Dodge.Floor
( levx
) where
@@ -33,17 +35,19 @@ import Control.Lens
import Control.Monad.State
import Control.Monad.Loops
import System.Random
{- |
A test level tree. -}
roomTreex :: RandomGen g => State g (Maybe [Room])
roomTreex = do
struct' <- aTreeStrut
-- let struct = treeFromPost [[SpecificRoom $ fmap (pure . Right) pistolerRoom]] [EndRoom]
let struct = treeFromPost [[Corridor,SpecificRoom $ fmap (pure . Right) testRoom]] [EndRoom]
let struct = treeFromPost [[Corridor,SpecificRoom $ fmap (pure . Right) randomFourCornerRoom]] [EndRoom]
let t' = padCorridors struct
t = treeFromTrunk
[[StartRoom]
,[Corridor]
,[SpecificRoom $ (pure . pure . Right) $ airlockCrystal 20]
,[BossAno $ addArmour launcherCrit & crHP +~ 800
& crState . crDropsOnDeath .~ DropSpecific [0] ]
,[Corridor]
,[DoorAno]
,[SpecificRoom $ fmap (pure . Right)
@@ -55,7 +59,7 @@ roomTreex = do
]
,[FirstWeapon]
,[Corridor]
,[SpecificRoom $ fmap (pure . Right) testRoom]
,[SpecificRoom $ fmap (pure . Right) randomFourCornerRoom]
,[Corridor]
,[OrAno
[[SpecificRoom $ branchRectWith $ fmap (pure . Left) armouredChasers]
@@ -74,51 +78,3 @@ roomTreex = do
levx :: RandomGen g => State g [Room]
levx = untilJust roomTreex
lev1' :: RandomGen g => State g (Tree Room)
lev1' = do
firstWeapon <- takeOne $ [[branchRectWith weaponRoom,longBlockedCorridor]] ++ replicate 5 [weaponRoom]
iterateWhile boundClip $ fmap (shiftRoomTree . expandTreeBy id)
$ sequence $ treeFromPost
(
[return $ return $ Right deadEndRoom
]
++ [return $ connectRoom corridor
,return $ connectRoom door
,glassSwitchBack >>= (fmap connectRoom . randomiseOutLinks)]
++ [return $ connectRoom corridor
,return $ connectRoom door]
++ [miniRoom3]
++ [return $ connectRoom corridor
,return $ connectRoom door]
++ [roomCCrits]
++ [return $ connectRoom corridor
,return $ connectRoom door]
++[roomMiniIntro]
++ [longRoom >>= (fmap connectRoom . randomiseOutLinks)]
++ [return $ connectRoom corridor
,return $ connectRoom door]
++ firstWeapon
++ [return $ connectRoom corridor
,return $ connectRoom door]
++ [(fmap connectRoom . randomiseOutLinks) =<< pistolerRoom]
++ [return $ connectRoom door]
++ [(fmap connectRoom . randomiseOutLinks) =<< shooterRoom]
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
++ [return $ connectRoom (set rmPS [PS (20,40) 0 basicLS] corridor)]
++ [return $ connectRoom corridor]
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
++ [return $ connectRoom corridor]
++[return $ connectRoom corridor,return $ connectRoom door]
++ [shootingRange]
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
++[roomMiniIntro]
++ (replicate 3 $ (fmap connectRoom . randomiseOutLinks) corridor)
++ [return $ connectRoom corridor
,return $ connectRoom door
,slowDoorRoom]
++ [return $ connectRoom corridor
,spawnerRoom
,return $ connectRoom corridor
]
)
$ (fmap connectRoom . randomiseOutLinks) corridor