Work on rooms

This commit is contained in:
2026-03-21 18:48:44 +00:00
parent b52964f606
commit 5394450800
9 changed files with 170 additions and 173 deletions
+1 -1
View File
@@ -143,7 +143,7 @@ updateDisplaySections w cfig =
(sfclose, sclose) =
filterSectionsPair closefiltcurs plainRegex closeitms "NEARBY ITEMS" $
w ^? hud . diCloseFilter . _Just
interfaceshead = if null btitems then mempty else makehead "NEARBY INTERFACES"
interfaceshead = if null btitems then mempty else makehead "INTERFACES"
btitems =
IM.fromDistinctAscList . zip [0 ..] $
mapMaybe (closeButtonToSelectionItem w) (w ^. hud . closeButtons)
+5 -5
View File
@@ -26,11 +26,11 @@ lockRoomMultiItems =
lockRoomKeyItems :: [(Int -> State LayoutVars (MetaTree Room String), State LayoutVars ItemType)]
lockRoomKeyItems =
-- [ (lasCenSensEdge, takeOne [LASER,HELD TESLACOIL, HELD FLATSHIELD])
[ (sensorRoomRunPast LaserSensor, return LASER)
-- , (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3))
-- , (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD])
-- , (const glassLessonRunPast, takeOne [LASER])
-- , (const $ lasTunnelRunPast 400, takeOne [HELD FLATSHIELD])
-- , (sensorRoomRunPast LaserSensor, return LASER)
-- [ (const slowDoorRoomRunPast, return $ HELD (MINIGUNX 3))
-- [ (const longRoomRunPast, takeOne [HELD SNIPERRIFLE, HELD FLATSHIELD])
-- [ (const glassLessonRunPast, takeOne [LASER])
[ (const $ lasTunnelRunPast 400, takeOne [HELD FLATSHIELD])
-- , (keyCardRoomRunPast 0, return (HELD $ KEYCARD 0))
]
+1 -1
View File
@@ -90,7 +90,7 @@ damagePiezoelectric = damageStone
damagePhotovoltaic :: Damage -> ECW -> World -> (Int,World)
damagePhotovoltaic dm ecw w = case dm of
Lasering _ p t -> f (3*dmam) $ laserSpark (outTo p t) (rdir p t)
Lasering _ p t -> f (10*dmam) $ laserSpark (outTo p t) (rdir p t)
Piercing _ p t ->
f dmam $ makeSpark NormalSpark (outTo p t) (rdir p t)
. makeDustAt Stone 200 (addZ 20 (outTo p t))
@@ -16,6 +16,7 @@ module Dodge.Placement.Instance.LightSource (
spanLightY,
mntLightLnkCond',
spanLS,
mntLightLnkShape,
) where
import Color
@@ -148,6 +149,9 @@ mntLightLnkCond ps = do
shp <- takeOne [vShape, lShape, jShape, liShape]
return $ mntLSCond (fmap (fmap $ colorSH black) shp) ps
mntLightLnkShape :: (Point2 -> Point3 -> Shape) -> PlacementSpot -> Placement
mntLightLnkShape shp ps = mntLSCond (fmap (fmap $ colorSH black) shp) ps
mntLightLnkCond' :: PlacementSpot -> Placement
mntLightLnkCond' = mntLSCond (fmap (fmap $ colorSH black) vShape)
+3 -2
View File
@@ -118,8 +118,9 @@ gridRoomPos xs ys = map makeonpos (grid xs ys) <> map makeoffpos (grid (mids xs)
-- to do so)
roomRectAutoLights :: RandomGen g => Float -> Float -> State g Room
roomRectAutoLights x y = do
l1 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isInLnk rp
l2 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnk rp
shp <- takeOne [vShape, lShape, jShape, liShape]
let l1 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isInLnk rp
l2 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnk rp
return $ roomRect x y (f x) (f y)
& rmName .~ "autoRect"
& rmPmnts .~ [ l1 , l2 ]
+5 -4
View File
@@ -15,6 +15,7 @@ module Dodge.Room.Room (
critDeadEnd,
) where
import Data.Maybe
import Linear
import Color
import Dodge.Placement.Instance.Pipe
@@ -428,8 +429,8 @@ distributerRoom :: AmmoType -> Int -> State LayoutVars Room
distributerRoom atype aamount = do
i <- nextLayoutInt
i1 <- nextLayoutInt
w <- state $ randomR (100, 400)
h <- state $ randomR (200, 400)
w <- state $ randomR (100, 200)
h <- state $ randomR (200, 200)
r <- roomRectAutoLights w h
let mcstore = defaultMachine
& mcMaterial .~ Metal
@@ -446,8 +447,8 @@ distributerRoom atype aamount = do
& plSpot .~ unusedOffPathAwayFromLink 50
& plExternalID ?~ i1
thepipe gw =
let p1 = gw ^?! genPmnt . ix i . plSpot . psPos
p2 = gw ^?! genPmnt . ix i1 . plSpot . psPos
let p1 = fromMaybe (error "distributerRoom pipe") $ gw ^? genPmnt . ix i . plSpot . psPos
p2 = fromMaybe (error "distributerRoom pipe") $ gw ^? genPmnt . ix i1 . plSpot . psPos
in sps (PS p1 0)
(PutForeground
(ForegroundShape 0 0
+17 -13
View File
@@ -2,8 +2,6 @@
module Dodge.Room.SensorDoor (sensAboveDoor, sensorRoomRunPast) where
import Dodge.RoomLink
import Dodge.Room.Procedural
import Control.Monad
import qualified Data.Set as S
import Dodge.Cleat
@@ -17,6 +15,8 @@ import Dodge.Room.Door
import Dodge.Room.Link
import Dodge.Room.Modify
import Dodge.Room.Ngon
import Dodge.Room.Procedural
import Dodge.RoomLink
import Dodge.Terminal
import Dodge.Tree
import Dodge.Wire
@@ -28,8 +28,12 @@ import RandomHelp
-- for roomRectAutoLinks-- make the locked door a center door?
sensorRoom :: SensorType -> Int -> State LayoutVars (Tree Room)
sensorRoom senseType n = do
--rm <- join $ takeOne [addLightsNGon =<< roomNgon 8 200, roomRectAutoLights 200 200]
rm <- join $ takeOne [ roomRectAutoLights 200 200 <&> rmLinks %~ setOutLinks nonCornerLinks]
rm <-
join $
takeOne
[ addLightsNGon =<< roomNgon 8 200
, roomRectAutoLights 200 200 <&> rmLinks %~ setOutLinks nonCornerLinks
]
cenroom <- shuffleLinks $ sensInsideDoor senseType n rm
return $
treePost
@@ -75,7 +79,8 @@ sensAboveDoor sensetype wth ps =
sensInsideDoor :: SensorType -> Int -> Room -> Room
sensInsideDoor senseType i rm =
rm
& rmName .++~ take 4 (show senseType)
& rmName
.++~ take 4 (show senseType)
& rmPmnts
.++~ [ psPt atFstLnkOut . PutForeground $ floorWire (V2 20 0) (V2 20 (-100))
, psPt atFstLnkOut . PutForeground $ floorWire (V2 0 (-100)) (V2 20 (-100))
@@ -87,12 +92,11 @@ sensInsideDoor senseType i rm =
, sensAboveDoor senseType 10 (atFstLnkOutShiftInward 100) & plExternalID ?~ i
]
where
termpos rp rm' = isUnusedLnk rp rm'
&& all ((>30) . dist (_rpPos rp) . _rpPos) (filter usedlnks $ rm' ^. rmPos)
termpos rp rm' =
isUnusedLnk rp rm'
&& all ((> 30) . dist (_rpPos rp) . _rpPos) (filter usedlnks $ rm' ^. rmPos)
usedlnks rp = case _rpType rp of
UsedOutLink {} -> True
UsedInLink {} -> True
UnusedLink {} -> False
NotLink {} -> False
UsedOutLink{} -> True
UsedInLink{} -> True
UnusedLink{} -> False
NotLink{} -> False
+46 -61
View File
@@ -2,7 +2,6 @@
module Dodge.Room.Tutorial where
import Dodge.Room.Modify
import Control.Monad
import qualified Data.IntMap.Strict as IM
import qualified Data.IntSet as IS
@@ -29,6 +28,7 @@ import Dodge.Room.Door
import Dodge.Room.LasTurret
import Dodge.Room.Link
import Dodge.Room.LongDoor
import Dodge.Room.Modify
import Dodge.Room.Ngon
import Dodge.Room.Path
import Dodge.Room.Pillar
@@ -54,48 +54,31 @@ tutAnoTree = do
foldMTRS
[ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox
, corDoor
, passthroughLockKeyLists lockRoomKeyItems itemRooms
--bbb , -- , return . tToBTree "door" $ treePost [corridor, cleatOnward door]
--bbb corDoor
--bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor)
--bbb lasRunRand
--bbb , corDoor
--bbb , passthroughLockKeyLists lockRoomKeyItems itemRooms
--bbb , -- , passthroughLockKeyLists lockRoomKeyItems itemRooms
--bbb tToBTree "door" . return <$> return (cleatOnward door)
--bbb , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor)
--bbb , -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor)
--bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor)
--bbb -- , passthroughLockKeyLists
--bbb -- [(sensorRoomRunPast ElectricSensor, takeOne
--bbb -- [-- CRAFT (ENERGYBALLCRAFT TeslaBall) ,
--bbb -- HELD SPARKGUN])]
--bbb -- itemRooms
--bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor)
--bbb -- , tToBTree "cor" . return <$> shuffleLinks (cleatOnward corridor)
--bbb tToBTree "sdr" . return . cleatOnward
--bbb <$> (shuffleLinks =<< distributerRoom BulletAmmo 100000)
--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa-- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom
--bbb -- aaa---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] []
--bbb -- aaa-- , return $ tToBTree "door" $ return $ cleatOnward door
--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa-- , tToBTree "sdr" . return . cleatOnward <$>
--bbb -- aaa-- (shuffleLinks =<< tanksPipesRoom)
--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa , return $ tToBTree "door" $ return $ cleatOnward door
--bbb -- aaa , tutHub
--bbb -- aaa , chasmSpitTerminal
--bbb -- aaa , tutLight
--bbb -- aaa , tutDrop
--bbb -- aaa , return $ tToBTree "cor" $ return $ cleatOnward corridor
--bbb -- aaa ---- , AnTree $ pickupTut
--bbb -- aaa ---- , AnTree $ weaponTut
, chasmSpitTerminal
, return $ tToBTree "cor" $ return $ cleatOnward corridor
, corDoor
, tToBTree "sdr" . return . cleatOnward
<$> (shuffleLinks =<< distributerRoom BulletAmmo 100000)
, -- , return $ tToBTree "cor" $ return $ cleatOnward corridor
-- --, tToBTree "sdr" . return . cleatOnward <$> slowDoorRoom
---- , tToBTree "sr" . return . cleatOnward <$> tanksRoom [] []
-- , return $ tToBTree "door" $ return $ cleatOnward door
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
-- , tToBTree "sdr" . return . cleatOnward <$>
-- (shuffleLinks =<< tanksPipesRoom)
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
-- , return $ tToBTree "cor" $ return $ cleatOnward corridor
return $ tToBTree "door" $ return $ cleatOnward door
, return $ tToBTree "cor" $ return $ cleatOnward corridor
, tutHub
, chasmSpitTerminal
, return $ tToBTree "cor" $ return $ cleatOnward corridor
, tutLight
, tutDrop
, return $ tToBTree "cor" $ return $ cleatOnward corridor
---- , AnTree $ pickupTut
---- , AnTree $ weaponTut
]
foldMTRS ::
@@ -131,8 +114,7 @@ tutDrop = do
isUnusedLnk
(\(p, a) -> ((p + 10 *.* unitVectorAtAngle (a - pi / 2), a), S.singleton UsedPosLow))
ss =
[ makeTermLine "--------------------------------------------"
, makeTermLine "YOU CAN ONLY CARRY A LIMITED AMOUNT OF ITEMS"
[ makeTermLine "YOU CAN ONLY CARRY A LIMITED AMOUNT OF ITEMS"
, makeTermLine "--------------------------------------------"
]
<> tlSetStatus (TerminalPressTo "CONTINUE")
@@ -273,19 +255,21 @@ midChasmSpit = do
y = 300
r <- roomRectAutoLights x y
cs <- join $ takeOne [censquare x y]
foutlnks <-
takeOne
[ \rl ->
isMidEdgeLink r North rl
|| isMidEdgeLink r East rl
|| isMidEdgeLink r West rl
, \rl -> OnEdge North `S.member` (rl ^. rlType)
&& not (FromEdge East 0 `S.member` (rl ^. rlType))
&& not (FromEdge West 0 `S.member` (rl ^. rlType))
]
shuffleLinks $
r
& rmLinks
%~ setOutLinks
( \rl ->
isMidEdgeLink r North rl
|| isMidEdgeLink r East rl
|| isMidEdgeLink r West rl
)
& rmLinks
%~ setInLinks (isMidEdgeLink r South)
& rmPmnts
.~ cs
& rmLinks %~ setOutLinks foutlnks
& rmLinks %~ setInLinks (isMidEdgeLink r South)
& rmPmnts .~ cs
where
censquare x y = do
z <- state $ randomR (40, 60)
@@ -304,8 +288,11 @@ chasmSpitTerminal :: State LayoutVars MTRS
chasmSpitTerminal = do
i1 <- nextLayoutInt
y <- midChasmSpit
l3 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 0 rp
l4 <- mntLightLnkCond $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 1 rp
shp <- takeOne [vShape, lShape, jShape, liShape]
let l3 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 0 rp
l4 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 1 rp
l5 = mntLightLnkShape shp $ resetPLUse $ rprBool $ \rp _ -> isOutLnkNum 2 rp
-- let y' = y & rmPmnts <>~ [l3, l4, l5]
let y' = y & rmPmnts <>~ [l3, l4]
return $
tToBTree "chasmTerm" $
@@ -430,9 +417,7 @@ tutHub = do
where
ds = ["DESTROY THIS TO OPEN THE DOOR"]
ss =
[ makeTermLine "---------------------------------------------"
, makeTermLine "YOU CAN INTERACT WITH SOME TERMINALS DIRECTLY"
, makeTermLine " THESE WILL DISPLAY A PROMPT SYMBOL"
[ makeTermLine "SOME TERMINALS HAVE A PROMPT"
, makeTermLine " *****"
, makeTermLine " * * TYPE OR SCROLL TO ENTER COMMANDS"
, makeTermLine " * > *"