This commit is contained in:
2021-11-22 13:21:26 +00:00
parent 09e774d009
commit b4759e4a27
8 changed files with 30 additions and 116 deletions
+13 -21
View File
@@ -77,7 +77,7 @@ glassLesson = do
corridors <- replicateM i $ PassDown <$> randomiseOutLinks corridor
return $ Node (PassDown botRoom) [singleUseNone door,uppers, treeFromPost (PassDown door : corridors) $ UseAll door]
where
uppers = Node (PassDown door) [deadRoom topRoom]
uppers = Node (PassDown door) [singleUseNone topRoom]
botRoom = set rmPmnts botplmnts $ roomRect 200 200 1 1
topRoom = set rmPmnts topplmnts $ roomRect 200 200 1 1
botplmnts =
@@ -171,7 +171,7 @@ miniRoom3 = do
,sPS cp (pi/8+7*pi/4) b
,sPS (V2 (w/2) (h/2)) 0 putLamp
]
fmap connectRoom $ randomiseOutLinks $ set rmPmnts plmnts $ roomRectAutoLinks w h
fmap singleUseAll $ randomiseOutLinks $ set rmPmnts plmnts $ roomRectAutoLinks w h
rot90Around :: Point2 -> Point2 -> Point2
rot90Around cen p = cen +.+ vNormal (p -.- cen)
@@ -179,17 +179,9 @@ rot90Around cen p = cen +.+ vNormal (p -.- cen)
-- So, the idea is to attach outer children to the bottommost right nodes
-- inside an inner tree
roomMiniIntro :: RandomGen g => State g (SubCompTree Room)
roomMiniIntro = fmap (g . expandTreeBy f) $ sequence $ treeFromPost
[return $ connectRoom door
,join $ takeOne [miniTree2,glassLesson]
]
$ connectRoom <$> randomiseOutLinks corridor
where
f (Node (UseAll x) xs) = Node (UseAll (UseAll x)) $ map f xs
f (Node (PassDown x) xs) = Node (PassDown (PassDown x)) $ map f xs
g (Node (UseAll x) []) = Node (UseAll x) []
g (Node (UseAll x) xs) = Node (PassDown x) $ map g xs
g (Node y ys) = Node y $ map g ys
roomMiniIntro = do
midroom <- join $ takeOne [miniTree2,glassLesson]
return $ chainUses $ [return $ UseAll door, midroom,return $ UseAll corridor]
roomCenterPillar :: RandomGen g => State g Room
roomCenterPillar = changeLinkTo ((\p -> dist p (V2 120 0) < 10) . fst)
@@ -272,7 +264,7 @@ weaponEmptyRoom = do
,mntLightLnkCond unusedLnkToPS
]
treeFromTrunk [PassDown corridor]
<$> ((fmap connectRoom . randomiseOutLinks) =<<
<$> ((fmap singleUseAll . randomiseOutLinks) =<<
changeLinkTo ((\p -> dist p (V2 (w/2) 0) < 10) . fst) (set rmPmnts plmnts $ roomRect w h 2 2)
)
@@ -285,14 +277,14 @@ weaponUnderCrits = do
]
let continuationRoom = treeFromTrunk
[PassDown corridorN,PassDown corridorN]
(connectRoom (set rmPmnts plmnts corridorN))
(singleUseAll (set rmPmnts plmnts corridorN))
rcp <- roomCenterPillar
deadEndRoom' <- takeOne [roomPillars,rcp]
junctionRoom <- takeOne [PassDown tEast,PassDown tWest]
return $ treeFromTrunk [PassDown corridorN,PassDown corridorN]
$ Node junctionRoom
[continuationRoom
,deadRoom deadEndRoom'
,singleUseNone deadEndRoom'
]
weaponBehindPillar :: RandomGen g => State g (SubCompTree Room)
@@ -310,7 +302,7 @@ weaponBehindPillar = do
[PassDown corridor
,PassDown $ over rmLinks tail $ over rmPmnts (++ plmnts1) rcp
]
(connectRoom $ set rmPmnts [sPS (V2 20 60) (negate $ pi/2) randC1] corridorN)
(singleUseAll $ set rmPmnts [sPS (V2 20 60) (negate $ pi/2) randC1] corridorN)
weaponBetweenPillars :: RandomGen g => State g (SubCompTree Room)
weaponBetweenPillars = do
@@ -324,7 +316,7 @@ weaponBetweenPillars = do
,sPS crPos2 (d crPos2) randC1
]
theRoom = roomPillars & rmPmnts %~ (++ plmnts)
(fmap connectRoom . randomiseOutLinks) =<< filterLinks f theRoom
(fmap singleUseAll . randomiseOutLinks) =<< filterLinks f theRoom
where
f (_,a) = a == 0
@@ -336,8 +328,8 @@ weaponLongCorridor = do
]
i1 <- state $ randomR (2,5)
i2 <- state $ randomR (2,5)
let branch1 = treeFromTrunk (replicate i1 $ PassDown corridorN) (connectRoom $ putCrs connectingRoom)
let branch2 = treeFromTrunk (replicate i2 $ PassDown corridorN) (deadRoom $ putWp corridor)
let branch1 = treeFromTrunk (replicate i1 $ PassDown corridorN) (singleUseAll $ putCrs connectingRoom)
let branch2 = treeFromTrunk (replicate i2 $ PassDown corridorN) (singleUseNone $ putWp corridor)
return $ Node (PassDown root) [branch1,branch2]
where
putCrs = over rmPmnts (++ [sPS (V2 10 40) (-pi/2) randC1 ,sPS (V2 (-10) 40) (-pi/2) randC1 ])
@@ -512,4 +504,4 @@ spawnerRoom = do
roomWithSpawner <- roomC x y <&>
rmPmnts %~ (spNoID (PSRoomRand 0) (PutCrit spawnerCrit) :)
aRoom <- airlock
return $ treeFromTrunk [PassDown aRoom,PassDown corridor] $ connectRoom roomWithSpawner
return $ treeFromTrunk [PassDown aRoom,PassDown corridor] $ singleUseAll roomWithSpawner