Allow for random choice between placements in different rooms
This commit is contained in:
@@ -31,7 +31,7 @@ airlock0 = defaultRoom
|
||||
$ \btid -> Just $ putDoubleDoorThen False col (not . cond' btid) (V2 (-1) 20) (V2 41 20) 2
|
||||
$ Just $ putDoubleDoorThen False col (cond' btid) (V2 (-1) 80) (V2 41 80) 2 Nothing
|
||||
,spanLightI (V2 (-2) 30) (V2 (-2) 70)
|
||||
,sps0 $ PutForeground $ thinHighBar 75 (V2 40 50) (V2 (-1) 50)
|
||||
,sps0 $ PutShape $ thinHighBar 75 (V2 40 50) (V2 (-1) 50)
|
||||
]
|
||||
, _rmBound = [rectNSWE 75 15 0 40]
|
||||
}
|
||||
@@ -91,7 +91,7 @@ airlockZ = defaultRoom
|
||||
inDoorps = (V2 0 0 ,) <$> arcStepwise 3 (pi/2) (V2 0 0) (V2 (-61) 0)
|
||||
cenlight = mntLS vShape (V2 90 60) (V3 90 40 50) `addPlmnt` mntLS vShape (V2 90 60) (V3 90 80 50)
|
||||
cornlight = mntLS vShape (V2 0 120) (V3 30 90 50) `addPlmnt` mntLS vShape (V2 180 120) (V3 150 90 50)
|
||||
`addPlmnt` sps0 (PutForeground (thinHighBar 50 (V2 30 90) (V2 150 90)))
|
||||
`addPlmnt` sps0 (PutShape (thinHighBar 50 (V2 30 90) (V2 150 90)))
|
||||
lighting = RandomPlacement $ takeOne [cenlight,cornlight]
|
||||
|
||||
airlock90 :: Room
|
||||
|
||||
@@ -36,7 +36,7 @@ cenLasTur = roomNgon 8 200 & rmPmnts .~
|
||||
|
||||
lightSensInsideDoor :: Room -> Room
|
||||
lightSensInsideDoor rm = rm
|
||||
& rmPmnts %~ ( (psPt atFstLnkOut $ PutForeground $ colorSH yellow $
|
||||
& rmPmnts %~ ( (psPt atFstLnkOut $ PutShape $ colorSH yellow $
|
||||
thinHighBar 0 (V2 20 (-1)) (V2 20 (-100))
|
||||
<> thinHighBar 0 (V2 0 (-100)) (V2 20 (-100))
|
||||
<> barPP 1.5 (V3 20 (-1) 0) (V3 20 (-1) 80)) : )
|
||||
@@ -51,7 +51,7 @@ lightSensInsideDoor rm = rm
|
||||
lightSensByDoor :: Room -> Room
|
||||
lightSensByDoor rm = rm
|
||||
& rmPmnts %~ (
|
||||
[ psPt atFstLnkOut $ PutForeground $ colorSH yellow
|
||||
[ psPt atFstLnkOut $ PutShape $ colorSH yellow
|
||||
$ barPP 1.5 (V3 20 (-1) 0) (V3 20 (-1) 80)
|
||||
, heightWallPS (atNthLnkOutShiftInward 1 100) 30 (rectNSEW 10 (-10) 20 (-20))
|
||||
, heightWallPS (atFstLnkOutShiftInward 100) 30 (rectNSEW 10 (-10) 20 (-20))
|
||||
|
||||
@@ -20,7 +20,7 @@ module Dodge.Room.Link
|
||||
, restrictRMInLinksPD
|
||||
) where
|
||||
import Dodge.ShiftPoint
|
||||
import Dodge.Placement.PlaceSpot
|
||||
--import Dodge.Placement.PlaceSpot
|
||||
import Dodge.LevelGen.Data
|
||||
import Dodge.RandomHelp
|
||||
import Geometry
|
||||
|
||||
@@ -44,8 +44,8 @@ twinSlowDoorRoom w h x = defaultRoom
|
||||
, _rmPath = []
|
||||
, _rmPmnts =
|
||||
[ pContID (PS (V2 0 (h-5)) pi) ( PutButton $ makeButton col id)
|
||||
$ \btid -> jsps0J (PutSlideDoor False col (cond' btid) (V2 x 1) (V2 x h) wlSpeed)
|
||||
$ ps0 (PutSlideDoor False col (cond' btid) (V2 (-x) 1) (V2 (-x) h) wlSpeed)
|
||||
$ \btid -> jsps0J (PutSlideDr False col (cond' btid) (V2 x 1) (V2 x h) wlSpeed)
|
||||
$ ps0 (PutSlideDr False col (cond' btid) (V2 (-x) 1) (V2 (-x) h) wlSpeed)
|
||||
$ \did -> jps0 (PutLS (colorLightAt (V3 0.75 0 0) (V3 0 (h-1) lampHeight) 0))
|
||||
$ \lsid -> jsps0 $ PutProp $ addColorChange lsid did $ lampCoverWhen (drmoving did) (V2 0 (h-1)) lampHeight
|
||||
]
|
||||
|
||||
@@ -49,7 +49,7 @@ roomRect x y xn yn = defaultRoom
|
||||
{ _rmPolys = [rectNSWE y 0 0 x ]
|
||||
, _rmLinks = lnks
|
||||
, _rmPath = concatMap doublePair pth
|
||||
, _rmPos = map (\p -> UnusedSpot p 0) posps
|
||||
, _rmPos = map (`UnusedSpot` 0) posps
|
||||
, _rmPmnts = []
|
||||
, _rmBound = [rectNSWE (y+5) (-5) (-5) (x+5)]
|
||||
, _rmFloor = [Tile
|
||||
@@ -232,7 +232,7 @@ centerVaultRoom w h d = do
|
||||
,sps0 $ PutWall (rectNSEW d (d - 30) (-d) (30 - d)) defaultWall
|
||||
,sps0 $ PutWall (rectNSEW (-d) (30 - d) d (d - 30)) defaultWall
|
||||
,sps0 $ PutWall (rectNSEW (-d) (30 - d) (-d) (30 - d)) defaultWall
|
||||
,sps0 $ PutForeground $ girder 70 10 10 (V2 (d-11) (-d)) (V2 (d-11) (-h))
|
||||
,sps0 $ PutShape $ girder 70 10 10 (V2 (d-11) (-d)) (V2 (d-11) (-h))
|
||||
]
|
||||
++ map (\a -> mntLS vShape (rotateV a $ V2 0 d) (rotate3z a $ V3 0 (d+30) 70))
|
||||
[0,0.5*pi,pi,1.5*pi]
|
||||
@@ -244,7 +244,7 @@ centerVaultRoom w h d = do
|
||||
col = dim $ dim $ bright red
|
||||
theDoor =
|
||||
[ pContID (PS (V2 35 (d+4)) 0) (PutButton $ makeSwitch col red id id)
|
||||
$ \btid -> jspsJ (V2 0 (d-10)) 0 (PutSlideDoor False col (cond' btid) (V2 (-21) 0) (V2 0 0) 2)
|
||||
$ sPS (V2 0 (d-10)) 0 (PutSlideDoor False col (cond' btid) (V2 21 0) (V2 0 0) 2)
|
||||
$ \btid -> jspsJ (V2 0 (d-10)) 0 (PutSlideDr False col (cond' btid) (V2 (-21) 0) (V2 0 0) 2)
|
||||
$ sPS (V2 0 (d-10)) 0 (PutSlideDr False col (cond' btid) (V2 21 0) (V2 0 0) 2)
|
||||
]
|
||||
cond' btid w' = _btState (_buttons w' IM.! btid) == BtOn
|
||||
|
||||
@@ -49,7 +49,7 @@ rezBoxesWp = do
|
||||
let aroom = rezInvBox thecol -- & rmConnectsTo .~ S.singleton (OnEdge North)
|
||||
let isnorth = S.member (OnEdge North) . _rlType
|
||||
centralRoom <- shuffleLinks $(roomRectAutoLinks w h) {_rmPmnts = []}
|
||||
& rmLinks %~ (setLinkType InLink isnorth)
|
||||
& rmLinks %~ setLinkType InLink isnorth
|
||||
onwardpassage <- maybeBlockedPassage
|
||||
let n = length $ getLinksOfType (OnEdge North) $ _rmLinks centralRoom
|
||||
let rezrooms = map adddoor
|
||||
@@ -71,8 +71,8 @@ rezBoxesWpCrit = do
|
||||
theweapon <- randBlockBreakWeapon
|
||||
--horedge <- takeOne [OnEdge North,OnEdge South]
|
||||
let centralRoom = (roomRectAutoLinks w h) {_rmPmnts = []}
|
||||
onwardpassage <- fmap
|
||||
(applyToCompRoot (rmConnectsTo .~ S.singleton (OnEdge West))) $ maybeBlockedPassage
|
||||
onwardpassage <-
|
||||
(applyToCompRoot (rmConnectsTo .~ S.singleton (OnEdge West))) <$> maybeBlockedPassage
|
||||
let bottomEdgeTest (V2 _ y,_) = y < 1
|
||||
aroom = rezInvBox thecol
|
||||
let n = length $ filter bottomEdgeTest $ map lnkPosDir $ _rmLinks centralRoom
|
||||
@@ -123,7 +123,6 @@ rezBoxes = do
|
||||
, PassDown door
|
||||
]
|
||||
(Node (PassDown centralRoom') (replicate (n-1) dbox ++ [Node (UseAll door) []]))
|
||||
where
|
||||
|
||||
|
||||
rezColor :: RandomGen g => State g LightSource
|
||||
|
||||
@@ -74,7 +74,7 @@ blockedCorridor = do
|
||||
sequence $ treeFromPost [] $ return $ UseAll $ set rmPmnts plmnts corridor
|
||||
|
||||
dirtPoly :: [Point2] -> PSType
|
||||
dirtPoly = PutBlock DirtBlock [1] dirtWall . reverse
|
||||
dirtPoly = PutBlock DirtBlock 1 [] dirtWall . reverse
|
||||
|
||||
-- | A single corridor with a destructible block blocking it.
|
||||
blockedCorridorCloseBlocks :: RandomGen g => State g Room
|
||||
|
||||
+11
-8
@@ -60,8 +60,8 @@ roomPillars = roomRect 240 240 2 2
|
||||
plmnts = spanLightI (V2 120 24) (V2 120 216)
|
||||
: mntLS vShape (V2 12 12) (V3 25 25 70)
|
||||
: mntLS vShape (V2 228 228) (V3 215 215 70)
|
||||
: sps0 (PutForeground $ thinHighBar 75 (V2 26 25) (V2 120 25))
|
||||
: sps0 (PutForeground $ thinHighBar 75 (V2 214 215) (V2 120 215))
|
||||
: sps0 (PutShape $ thinHighBar 75 (V2 26 25) (V2 120 25))
|
||||
: sps0 (PutShape $ thinHighBar 75 (V2 214 215) (V2 120 215))
|
||||
: g 180 150 90 60
|
||||
f a x b y = putBlockRect a x b y
|
||||
g a b c d = f a b a b ++ f a b c d ++ f c d a b ++ f c d c d
|
||||
@@ -150,7 +150,7 @@ miniRoom3 = do
|
||||
w <- state $ randomR (300,400)
|
||||
h <- state $ randomR (300,400)
|
||||
let cp = V2 0 (h/2+40)
|
||||
let b = PutBlock StoneBlock [5,20,20] baseBlockPane $ map toV2 [(-10,-60)
|
||||
let b = PutBlock StoneBlock 5 [20,20] baseBlockPane $ map toV2 [(-10,-60)
|
||||
,( 10,-60)
|
||||
,( 10,-80)
|
||||
,(-10,-80)
|
||||
@@ -273,15 +273,18 @@ weaponEmptyRoom = do
|
||||
weaponUnderCrits :: RandomGen g => State g (SubCompTree Room)
|
||||
weaponUnderCrits = do
|
||||
let plmnts =
|
||||
[sPS (V2 20 0) 0 $ RandPS randFirstWeapon
|
||||
,sPS (V2 20 0) (negate $ pi/2) randC1
|
||||
[--sPS (V2 20 0) 0 $ RandPS randFirstWeapon
|
||||
sPS (V2 20 0) (negate $ pi/2) randC1
|
||||
,sPS (V2 20 20) (negate $ pi/2) randC1
|
||||
]
|
||||
addwpat p = rmPmnts %~ ((PickOnePlacement 0 $ sPS p 0 $ RandPS randFirstWeapon) :)
|
||||
let continuationRoom = treeFromTrunk
|
||||
[PassDown corridorN,PassDown corridorN]
|
||||
[PassDown $ addwpat (V2 20 0) corridorN,PassDown $ addwpat (V2 20 0) corridorN]
|
||||
(singleUseAll (set rmPmnts plmnts corridorN))
|
||||
rcp <- roomCenterPillar
|
||||
deadEndRoom' <- takeOne [roomPillars,rcp]
|
||||
deadEndRoom' <- takeOne
|
||||
[ addwpat (V2 120 20) roomPillars
|
||||
, addwpat (V2 120 20) rcp]
|
||||
junctionRoom <- takeOne [PassDown tEast,PassDown tWest]
|
||||
return $ treeFromTrunk [PassDown corridorN,PassDown corridorN]
|
||||
$ Node junctionRoom
|
||||
@@ -313,7 +316,7 @@ weaponBetweenPillars = do
|
||||
critPlacementSpots <- replicateM 2 $ randDirPS $ unusedSpotAwayFromInLink 100
|
||||
let plmnts =
|
||||
sPS wpPos 0 (RandPS randFirstWeapon) :
|
||||
map (\ps -> sps ps randC1) critPlacementSpots
|
||||
map (`sps` randC1) critPlacementSpots
|
||||
theRoom = roomPillars & rmPmnts %~ (++ plmnts)
|
||||
(fmap singleUseAll . randomiseOutLinks) =<< filterLinks f theRoom
|
||||
where
|
||||
|
||||
@@ -106,14 +106,14 @@ startRoom' = do
|
||||
w <- state $ randomR (100,400)
|
||||
h <- state $ randomR (200,400)
|
||||
let plmnts =
|
||||
[ sPS (V2 0 0) 0 $ PutForeground $ girderV 40 20 10 (V2 0 (h/2)) (V2 w (h/2))
|
||||
[ sPS (V2 0 0) 0 $ PutShape $ girderV 40 20 10 (V2 0 (h/2)) (V2 w (h/2))
|
||||
--, mntLS jShape (V2 0 (h/3)) (V3 40 (h/3) 70)
|
||||
, tankSquareEmboss4 (dim orange) 50 (h-60)
|
||||
, tankSquare (dim orange) 50 50
|
||||
, tankSquare (dim orange) 50 120
|
||||
, lightSensor 10 (const id) (PS (V2 (0.8*w) (0.25*h)) 0)
|
||||
, putLasTurret 0.005 & plSpot .~ PS (V2 (0.8*w) (0.8*h)) 0
|
||||
, sps0 $ PutForeground $ colorSH orange $ pipePP 2 (V3 50 50 25) (V3 50 120 25)
|
||||
, sps0 $ PutShape $ colorSH orange $ pipePP 2 (V3 50 50 25) (V3 50 120 25)
|
||||
]
|
||||
thecol <- rezColor
|
||||
treeFromPost [PassDown $ rezBox thecol, PassDown door] . UseAll
|
||||
|
||||
@@ -23,7 +23,7 @@ telRoomLev _ = do
|
||||
w <- state $ randomR (200,300)
|
||||
h <- state $ randomR (200,300)
|
||||
return $ roomRectAutoLinks w h & rmPmnts .~
|
||||
[ sPS (V2 (w/2) (h/2)) 0 $ PutPressPlate telPP
|
||||
[ sPS (V2 (w/2) (h/2)) 0 $ PutPPlate telPP
|
||||
, sPS (V2 (w/2) (h/2+ 30)) 0 putLamp
|
||||
]
|
||||
where
|
||||
|
||||
Reference in New Issue
Block a user