Allow for ordering of in placements, not fully tested yet

This commit is contained in:
2025-09-24 23:01:22 +01:00
parent eab27fea8b
commit f51868c84c
10 changed files with 87 additions and 76 deletions
+28 -22
View File
@@ -6,7 +6,9 @@ Room layout (compact):
|
+- 6,7
|
8,9,10,11,12,13,14,15,16,17,18,19
+- 8,9,10,11,12,13,14,15,16,17,18,19
|
20,21
Layout with room names:
tutRezBox-0
@@ -25,27 +27,31 @@ doorToggle-6gon-3
| |
| autoRect-7
|
Corridor-8
+- Corridor-8
| |
| autoDoor-9
| |
| Corridor-10
| |
| Corridor-11
| |
| roomCenterPillar-12
| |
| corridorN-13
| |
| autoDoor-14
| |
| Corridor-15
| |
| 6gon-16
| |
| defaultRoom-17
| |
| autoRect-18
| |
| Corridor-19
|
autoDoor-9
triggerDoorRoom-20
|
Corridor-10
|
Corridor-11
|
roomCenterPillar-12
|
corridorN-13
|
autoDoor-14
|
Corridor-15
|
6gon-16
|
defaultRoom-17
|
autoRect-18
|
Corridor-19
autoRect-21
+1 -1
View File
@@ -1,4 +1,4 @@
Generating level with seed 7114951007332849727
After 1 attempt(s), Successful generation of level with seed 7114951007332849727
20 rooms in total
22 rooms in total
+5 -1
View File
@@ -37,7 +37,11 @@ Seed: 7114951007332849727
| |
| 2:0:4:autoRect
|
2:0:5:Corridor
+- 2:0:5:Corridor
|
2:0:6:triggerDoorRoom
|
2:0:7:autoRect
3:0:corDoor
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -107,7 +107,7 @@ data Room = Room
, _rmPos :: [RoomPos]
, _rmPath :: S.Set (Point2, Point2)
, _rmPmnts :: [Placement]
, _rmInPmnt :: [GenWorld -> Placement]
, _rmInPmnt :: [(Int,GenWorld -> Placement)]
, _rmBound :: [[Point2]]
, _rmFloor :: Floor
, _rmName :: String
+17 -18
View File
@@ -1,9 +1,10 @@
--{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TupleSections #-}
module Dodge.Layout (
generateLevelFromRoomList,
tilesFromRooms,
) where
import Data.List (sortOn)
import Dodge.Path.Translate
import qualified Control.Foldl as L
import Control.Lens
@@ -13,7 +14,7 @@ import Data.Graph.Inductive (labEdges, labNodes)
import Data.List (nubBy)
import Data.Maybe
import Data.Tile
import Data.Traversable
--import Data.Traversable
import Dodge.Data.GenWorld
import Dodge.Default.Wall
import Dodge.GameRoom
@@ -79,26 +80,24 @@ shuffleRoomPos rm = do
return $ rm & rmPos .~ newPos
doInPlacements :: GenWorld -> GenWorld
doInPlacements w =
let (gw, rms) = mapAccumR doRoomInPlacements w (_genRooms w)
in gw & genRooms .~ rms
doRoomInPlacements :: GenWorld -> Room -> (GenWorld, Room)
doRoomInPlacements w rm = foldr f (w, rm) $ _rmInPmnt rm
doInPlacements w = foldl' (\gw (i,(_,f)) -> placeSpot' i gw (f gw)) w
. sortOn fst
$ foldMap g $ w ^. genRooms
where
f plf (w', r') = placeSpot (w', r') (plf w')
g rm = (rm^?! rmMID . _Just,) <$> (rm ^. rmInPmnt)
-- let (gw, rms) = mapAccumR doRoomInPlacements w (_genRooms w)
-- in gw & genRooms .~ rms
--doRoomInPlacements :: GenWorld -> Room -> (GenWorld, Room)
--doRoomInPlacements w rm = foldr f (w, rm) $ _rmInPmnt rm
-- where
-- f plf (w', r') = placeSpot (w', r') (plf w')
doIndividualPlacements :: GenWorld -> GenWorld
doIndividualPlacements gw = foldl' doRoomPlacements' gw (_genRooms gw)
-- let (gw', rms) = mapAccumR doRoomPlacements gw (_genRooms gw)
-- in gw' & genRooms .~ rms
doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw)
doRoomPlacements :: GenWorld -> Room -> (GenWorld, Room)
doRoomPlacements w rm = foldl' placeSpot (w, rm & rmPmnts .~ mempty)
$ _rmPmnts rm
doRoomPlacements' :: GenWorld -> Room -> GenWorld
doRoomPlacements' w rm = foldl' (placeSpot' i) (w & genRooms . ix i . rmPmnts .~ mempty)
doRoomPlacements :: GenWorld -> Room -> GenWorld
doRoomPlacements w rm = foldl' (placeSpot' i) (w & genRooms . ix i . rmPmnts .~ mempty)
$ _rmPmnts rm
where
i = rm ^?! rmMID . _Just
+1 -1
View File
@@ -42,7 +42,7 @@ decontamRoom i =
]
-- & rmOutPmnt . at i ?~
-- analyser (NoItemZone ps) (PS 50 0) (PS mcpos 0)
& rmInPmnt .~ [f]
& rmInPmnt .~ [(0,f)]
& rmBound .~ [rectNSWE 75 15 0 40, switchcut]
where
f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do
+1 -1
View File
@@ -34,7 +34,7 @@ triggerDoorRoom i =
{ _rmPolys = [rectNSWE 40 0 0 40]
, _rmLinks = [uncurry outLink (V2 20 35, 0), uncurry inLink (V2 20 5, pi)]
, _rmPath = doublePairSet (V2 20 35, V2 20 5)
, _rmInPmnt = [f]
, _rmInPmnt = [(0,f)]
, _rmName = "triggerDoorRoom"
-- door extends into side walls (for shadows as rendered 12/03/21)
-- note no bounds
+3 -3
View File
@@ -80,7 +80,7 @@ tutDrop = do
return $
tToBTree "TutDrop" $
treePost
[x & rmInPmnt .:~ t j, y, cleatOnward rm]
[x & rmInPmnt .:~ (0,t j), y, cleatOnward rm]
where
t j = \ gw -> let x = gw ^? genInts . ix j
in putMessageTerminal
@@ -112,7 +112,7 @@ tutRooms is = do
x <-
shuffleLinks
. analyserByDoorWithPrompt sensorTut (RequireEquipment (AMMOMAG DRUMMAG)) i
. (rmInPmnt .:~ a)
. (rmInPmnt .:~ (0,a))
=<< addDoorAtNthLinkToggleTerminal 1 ss j
<$> roomNgon 6 100
bcor <- blockedCorridor
@@ -125,7 +125,7 @@ tutRooms is = do
[ treeFromPost [triggerDoorRoom i] r1
, treeFromPost [triggerDoorRoom j] r2
, bcor
-- , treeFromPost [triggerDoorRoom k] r2
, treeFromPost [triggerDoorRoom k] r2
]
where
ss =
+29 -27
View File
@@ -2612,10 +2612,10 @@ ammoMagSPic src/Dodge/Item/Draw/SPic.hs 145;" f
amr src/Dodge/Item/Held/Rod.hs 34;" f
anRoom src/Dodge/Floor.hs 117;" f
analyser src/Dodge/Placement/Instance/Analyser.hs 12;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 121;" f
analyserByDoorWithPrompt src/Dodge/Room/LasTurret.hs 124;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 81;" f
analyserByNthLinkWithPrompt src/Dodge/Room/LasTurret.hs 100;" f
analyserByDoor src/Dodge/Room/LasTurret.hs 113;" f
analyserByDoorWithPrompt src/Dodge/Room/LasTurret.hs 116;" f
analyserByNthLink src/Dodge/Room/LasTurret.hs 83;" f
analyserByNthLinkWithPrompt src/Dodge/Room/LasTurret.hs 97;" f
analyserWithPrompt src/Dodge/Placement/Instance/Analyser.hs 15;" f
andOrRegex src/Dodge/DisplayInventory.hs 78;" f
angleBetween src/Geometry.hs 161;" f
@@ -3288,7 +3288,7 @@ doQuicksave src/Dodge/Save.hs 77;" f
doRandImpulse src/Dodge/RandImpulse.hs 7;" f
doRegexInput src/Dodge/Update/Input/InGame.hs 447;" f
doRoomInPlacements src/Dodge/Layout.hs 86;" f
doRoomPlacements src/Dodge/Layout.hs 96;" f
doRoomPlacements src/Dodge/Layout.hs 94;" f
doRoomShift src/Dodge/Room/Link.hs 33;" f
doScopeZoom src/Dodge/Update/Scroll.hs 91;" f
doSectionSize src/Dodge/DisplayInventory.hs 211;" f
@@ -3604,7 +3604,7 @@ floorItemSPic src/Dodge/Render/ShapePicture.hs 122;" f
floorWire src/Dodge/Wire.hs 13;" f
foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 558;" f
foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 554;" f
foldMTRS src/Dodge/Room/Tutorial.hs 54;" f
foldMTRS src/Dodge/Room/Tutorial.hs 55;" f
foldPairs src/ListHelp.hs 37;" f
foldrWhileArb src/ListHelp.hs 110;" f
followImpulse src/Dodge/Creature/Impulse.hs 39;" f
@@ -3642,9 +3642,9 @@ gLauncher src/Dodge/Item/Held/Launcher.hs 24;" f
gRandify src/Dodge/Randify.hs 11;" f
gadgetEffect src/Dodge/HeldUse.hs 46;" f
gameOverMenu src/Dodge/Menu.hs 189;" f
gameRoomFromRoom src/Dodge/Layout.hs 136;" f
gameRoomFromRoom src/Dodge/Layout.hs 141;" f
gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f
gameRoomsFromRooms src/Dodge/Layout.hs 133;" f
gameRoomsFromRooms src/Dodge/Layout.hs 138;" f
gameplayMenu src/Dodge/Menu.hs 136;" f
gameplayMenuOptions src/Dodge/Menu.hs 139;" f
gasType src/Dodge/HeldUse.hs 1141;" f
@@ -3688,7 +3688,7 @@ getRootItemInvID src/Dodge/Inventory/Location.hs 35;" f
getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f
getSmoothScrollValue src/Dodge/SmoothScroll.hs 21;" f
getSplitString src/Dodge/Debug/Terminal.hs 128;" f
getTiles src/Dodge/Layout.hs 183;" f
getTiles src/Dodge/Layout.hs 188;" f
getViewpoints src/Dodge/Viewpoints.hs 29;" f
getVolleyBurst src/Dodge/HeldUse.hs 125;" f
getWallSPic src/Dodge/Render/Walls.hs 51;" f
@@ -3764,8 +3764,8 @@ headLampShape src/Dodge/Item/Draw/SPic.hs 455;" f
headMap src/Dodge/DoubleTree.hs 249;" f
headPQ src/Dodge/Creature/HandPos.hs 115;" f
healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 492;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 78;" f
healthTest src/Dodge/Room/LasTurret.hs 127;" f
healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 80;" f
healthTest src/Dodge/Room/LasTurret.hs 119;" f
heightWallPS src/Dodge/Placement/Instance/Wall.hs 13;" f
heldAimStance src/Dodge/Item/AimStance.hs 24;" f
heldAimZoom src/Dodge/Update/Camera.hs 149;" f
@@ -3980,8 +3980,8 @@ justify src/Justify.hs 9;" f
k src/ShortShow.hs 44;" f
k' src/ShortShow.hs 44;" f
keyCard src/Dodge/Item/Held/Utility.hs 20;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 75;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 63;" f
keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 77;" f
keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 65;" f
keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f
keyPic src/Dodge/Item/Draw/SPic.hs 471;" f
keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f
@@ -3993,12 +3993,12 @@ lamp src/Dodge/Creature/Lamp.hs 21;" f
lampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 8;" f
lampCoverWhen src/Dodge/Placement/Instance/LightSource/Cover.hs 19;" f
lampCrSPic src/Dodge/Render/ShapePicture.hs 74;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 146;" f
lasCenSensEdge src/Dodge/Room/LasTurret.hs 138;" f
lasGunPic src/Dodge/Item/Draw/SPic.hs 424;" f
lasPulseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 139;" f
lasTunnel src/Dodge/Room/LasTurret.hs 158;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 199;" f
lasSensorTurretTest src/Dodge/Room/LasTurret.hs 131;" f
lasTunnel src/Dodge/Room/LasTurret.hs 150;" f
lasTunnelRunPast src/Dodge/Room/LasTurret.hs 191;" f
lasTurret src/Dodge/Placement/Instance/Turret.hs 40;" f
laser src/Dodge/Item/Held/BatteryGuns.hs 34;" f
lastMap src/Dodge/DoubleTree.hs 253;" f
@@ -4028,7 +4028,7 @@ leftWristPQ src/Dodge/Creature/HandPos.hs 81;" f
legsSPic src/Dodge/Item/Draw/SPic.hs 480;" f
liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f
light src/Color.hs 104;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 49;" f
lightSensByDoor src/Dodge/Room/LasTurret.hs 50;" f
lightSensInsideDoor src/Dodge/Room/LasTurret.hs 38;" f
lightSensor src/Dodge/Placement/Instance/Sensor.hs 42;" f
lightsToRender src/Dodge/Render/Lights.hs 14;" f
@@ -4459,6 +4459,7 @@ plTurret src/Dodge/Placement/PlaceSpot.hs 173;" f
placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 211;" f
placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 40;" f
placeSpot src/Dodge/Placement/PlaceSpot.hs 31;" f
placeSpot' src/Dodge/Layout.hs 100;" f
placeSpotID src/Dodge/Placement/PlaceSpot.hs 87;" f
placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 74;" f
placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 55;" f
@@ -4909,7 +4910,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 194;" f
sensorRoom src/Dodge/Room/SensorDoor.hs 26;" f
sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 46;" f
sensorSPic src/Dodge/Machine/Draw.hs 81;" f
sensorTut src/Dodge/Room/Tutorial.hs 159;" f
sensorTut src/Dodge/Room/Tutorial.hs 170;" f
sensorTypeDamages src/Dodge/Machine/Update.hs 228;" f
sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f
sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f
@@ -4935,7 +4936,7 @@ setOutLinks src/Dodge/RoomLink.hs 48;" f
setOutLinksByType src/Dodge/RoomLink.hs 57;" f
setOutLinksPD src/Dodge/RoomLink.hs 77;" f
setRBCreatureTargeting src/Dodge/Creature/State.hs 288;" f
setRoomInt src/Dodge/Room/Tutorial.hs 60;" f
setRoomInt src/Dodge/Room/Tutorial.hs 61;" f
setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f
setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f
setShaderSource src/Shader/Compile.hs 290;" f
@@ -4945,6 +4946,7 @@ setTargetMv src/Dodge/Creature/ReaderUpdate.hs 76;" f
setTile src/Dodge/Layout.hs 66;" f
setTiles src/Dodge/Layout.hs 63;" f
setToggle src/Dodge/Prop/Update.hs 44;" f
setTreeInts src/Dodge/Room/Tutorial.hs 68;" f
setViewDistance src/Dodge/Update/Camera.hs 236;" f
setViewPos src/Dodge/Creature/ReaderUpdate.hs 63;" f
setViewport src/Dodge/Render.hs 440;" f
@@ -4966,7 +4968,7 @@ setupVBOStatic src/Shader/Compile.hs 116;" f
setupVBOVAO src/Shader/Compile.hs 200;" f
setupVertexAttribPointer src/Shader/Compile.hs 224;" f
setupVertexAttribs src/Shader/Compile.hs 218;" f
setupWorldBounds src/Dodge/Layout.hs 100;" f
setupWorldBounds src/Dodge/Layout.hs 105;" f
sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f
shadVBOptr src/Shader.hs 40;" f
shaderTypeExt src/Shader/Compile.hs 172;" f
@@ -5263,7 +5265,7 @@ thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 92;" f
threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f
throwItem src/Dodge/Creature/Action.hs 211;" f
tileTexCoords src/Tile.hs 11;" f
tilesFromRooms src/Dodge/Layout.hs 180;" f
tilesFromRooms src/Dodge/Layout.hs 185;" f
tilesToLine src/Shader/AuxAddition.hs 66;" f
timeFlowUpdate src/Dodge/Update.hs 167;" f
timeScroller src/Dodge/Item/Held/Utility.hs 42;" f
@@ -5381,11 +5383,11 @@ turnTo src/Dodge/Movement/Turn.hs 8;" f
turret src/Dodge/Placement/Instance/Turret.hs 37;" f
turretItemOffset src/Dodge/Item/HeldOffset.hs 21;" f
tutAnoTree src/Dodge/Room/Tutorial.hs 39;" f
tutDrop src/Dodge/Room/Tutorial.hs 67;" f
tutRezBox src/Dodge/Room/Tutorial.hs 169;" f
tutDrop src/Dodge/Room/Tutorial.hs 73;" f
tutRezBox src/Dodge/Room/Tutorial.hs 180;" f
tutRoomTree src/Dodge/Floor.hs 21;" f
tutRooms src/Dodge/Room/Tutorial.hs 100;" f
tutorialMessage1 src/Dodge/Room/Tutorial.hs 191;" f
tutRooms src/Dodge/Room/Tutorial.hs 106;" f
tutorialMessage1 src/Dodge/Room/Tutorial.hs 202;" f
tweenAngles src/Geometry/Vector.hs 195;" f
twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f
twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f
@@ -5607,7 +5609,7 @@ wallBuffer src/Dodge/WallCreatureCollisions.hs 52;" f
wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f
wallLine src/Dodge/Placement/Instance/Wall.hs 71;" f
wallToSurface src/Dodge/Base/Collide.hs 172;" f
wallsFromRooms src/Dodge/Layout.hs 121;" f
wallsFromRooms src/Dodge/Layout.hs 126;" f
wallsToDraw src/Dodge/Render/Walls.hs 17;" f
warmupSound src/Dodge/HeldUse.hs 1421;" f
warningRooms src/Dodge/Room/Warning.hs 26;" f