Work on placements

This commit is contained in:
2025-09-23 12:59:28 +01:00
parent a9ecd7de2e
commit ef90e5702b
3 changed files with 59 additions and 66 deletions
-1
View File
@@ -109,7 +109,6 @@ doIndividualPlacements gw =
in gw' & genRooms .~ rms
doRoomPlacements :: GenWorld -> Room -> (GenWorld, Room)
--doRoomPlacements w rm = foldl' (\wr -> fst . placeSpot wr) (w, rm) $ _rmPmnts rm
doRoomPlacements w rm = foldl' (\wr -> fst . placeSpot wr) (w, rm & rmPmnts .~ mempty)
$ _rmPmnts rm
+10 -12
View File
@@ -39,12 +39,13 @@ placeSpot (w, rm) plmnt = case plmnt of
placePlainPSSpot
:: GenWorld -> Room -> Placement -> DPoint2 -> ((GenWorld, Room), [Placement])
placePlainPSSpot w rm plmnt shift =
let (i, w') = placeSpotID (shiftPSBy shift (_plSpot plmnt)) (_plType plmnt) w
let (i, w') = placeSpotID rm (shiftPSBy shift (_plSpot plmnt)) (_plType plmnt) w
newplmnt = plmnt & plMID ?~ i
in maybe ((w', rm & rmPmnts .:~ newplmnt), [newplmnt]) (recrPlace newplmnt w') (_plIDCont plmnt (w') newplmnt)
in maybe ((w', rm & rmPmnts .:~ newplmnt), [newplmnt])
(recrPlace newplmnt w') (_plIDCont plmnt w' newplmnt)
where
recrPlace newplmnt w' pl =
let (wr, newplmnts) = placeSpot (w', rm) pl
let (wr, newplmnts) = placeSpot (w', rm & rmPmnts .:~ newplmnt) pl
in (wr, newplmnt : newplmnts)
-- this should be tidied up
@@ -78,14 +79,10 @@ placeSpotRoomRand rm i f plmnt w =
let (ps, g) = runState (_rmRandPSs rm !! i) $ w ^. gwWorld . randGen
in placeSpot (w & gwWorld . randGen .~ g, rm) (plmnt & plSpot .~ f ps)
--placeSpotID :: PlacementSpot -> PSType -> GenWorld -> (Int, GenWorld)
--placeSpotID ps pt gw =
-- let (i, w) = placeSpotID' ps pt (_gwWorld gw)
-- in (i, gw & gwWorld .~ w)
-- the Int here is some id that is assigned when the placement is placed
placeSpotID :: PlacementSpot -> PSType -> GenWorld -> (Int, GenWorld)
placeSpotID ps pt w = case pt of
placeSpotID :: Room -> PlacementSpot -> PSType -> GenWorld -> (Int, GenWorld)
placeSpotID rm ps pt w = case pt of
PutTrigger cnd -> plNewID (gwWorld . cWorld . lWorld . triggers) cnd w
PutMod mdi -> plNewUpID (gwWorld . cWorld . lWorld . modifications) mdID mdi w
PutProp prp -> plNewUpID (gwWorld . cWorld . lWorld . props) prID (mvProp p rot prp) w
@@ -107,7 +104,7 @@ placeSpotID ps pt w = case pt of
PutMachine pps mc wl mitm -> plMachine (map doShift pps) mc wl mitm p rot w
PutLS ls -> plNewUpID (gwWorld . cWorld . lWorld . lightSources) lsID (mvLS p' rot ls) w
PutPPlate pp -> plNewUpID (gwWorld . cWorld . lWorld . pressPlates) ppID (mvPP p rot pp) w
RandPS rgn -> evaluateRandPS rgn ps w
RandPS rgn -> evaluateRandPS rm rgn ps w
PutDoor col eo f pss -> plDoor col eo f (map (bimap doShift doShift) pss) w
PutCoord cp -> plNewID (gwWorld . coordinates) (doShift cp) w
PutSlideDr wl dr eo off a b ->
@@ -130,8 +127,9 @@ placeSpotID ps pt w = case pt of
rot = _psRot ps
doShift = shiftPointBy (p, rot)
evaluateRandPS :: State StdGen PSType -> PlacementSpot -> GenWorld -> (Int, GenWorld)
evaluateRandPS rgen ps w = placeSpotID ps evaluatedType (set (gwWorld . randGen) g w)
evaluateRandPS
:: Room -> State StdGen PSType -> PlacementSpot -> GenWorld -> (Int, GenWorld)
evaluateRandPS rm rgen ps w = placeSpotID rm ps evaluatedType (set (gwWorld . randGen) g w)
where
(evaluatedType, g) = runState rgen (_randGen $ _gwWorld w)
+49 -53
View File
@@ -587,7 +587,6 @@ InDream src/Dodge/Data/Scenario.hs 19;" C
InInv src/Dodge/Data/Item/Location.hs 27;" C
InLink src/Dodge/Data/Room.hs 44;" C
InParallelUniverse src/Dodge/Data/Scenario.hs 21;" C
InPlacement src/Dodge/Data/GenWorld.hs 127;" t
InRealWorld src/Dodge/Data/Scenario.hs 18;" C
InSimulation src/Dodge/Data/Scenario.hs 20;" C
InVoid src/Dodge/Data/Item/Location.hs 37;" C
@@ -1868,7 +1867,7 @@ _fullscreenShader src/Data/Preload/Render.hs 20;" f
_futureWorlds src/Dodge/Data/World.hs 67;" f
_futureWorlds src/Dodge/Data/World.hs 73;" f
_gameplay_rotate_to_wall src/Dodge/Data/Config.hs 55;" f
_genPlacements src/Dodge/Data/GenWorld.hs 26;" f
_genPmnt src/Dodge/Data/GenWorld.hs 26;" f
_genRooms src/Dodge/Data/GenWorld.hs 25;" f
_getAttentiveTo src/Dodge/Data/Creature/Perception.hs 61;" f
_getCombAmount src/Dodge/Data/CombAmount.hs 12;" f
@@ -1936,8 +1935,6 @@ _impulseUseTarget src/Dodge/Data/ActionPlan.hs 53;" f
_impulseUseTargetCID src/Dodge/Data/ActionPlan.hs 50;" f
_impulsesListList src/Dodge/Data/ActionPlan.hs 98;" f
_input src/Dodge/Data/World.hs 43;" f
_ipPlacement src/Dodge/Data/GenWorld.hs 128;" f
_ipPlacementID src/Dodge/Data/GenWorld.hs 129;" f
_isWarming src/Dodge/Data/Item/Params.hs 23;" f
_ispCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 33;" f
_ispCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 31;" f
@@ -2236,29 +2233,29 @@ _rkSmoke src/Dodge/Data/Projectile.hs 36;" f
_rlDir src/Dodge/Data/Room.hs 26;" f
_rlPos src/Dodge/Data/Room.hs 25;" f
_rlType src/Dodge/Data/Room.hs 24;" f
_rmBound src/Dodge/Data/GenWorld.hs 111;" f
_rmChildren src/Dodge/Data/GenWorld.hs 122;" f
_rmClusterStatus src/Dodge/Data/GenWorld.hs 124;" f
_rmConnectsTo src/Dodge/Data/GenWorld.hs 119;" f
_rmEndWires src/Dodge/Data/GenWorld.hs 118;" f
_rmFloor src/Dodge/Data/GenWorld.hs 112;" f
_rmBound src/Dodge/Data/GenWorld.hs 110;" f
_rmChildren src/Dodge/Data/GenWorld.hs 121;" f
_rmClusterStatus src/Dodge/Data/GenWorld.hs 123;" f
_rmConnectsTo src/Dodge/Data/GenWorld.hs 118;" f
_rmEndWires src/Dodge/Data/GenWorld.hs 117;" f
_rmFloor src/Dodge/Data/GenWorld.hs 111;" f
_rmHeight src/Dodge/Data/Room.hs 38;" f
_rmInPmnt src/Dodge/Data/GenWorld.hs 108;" f
_rmLinkEff src/Dodge/Data/GenWorld.hs 98;" f
_rmLinks src/Dodge/Data/GenWorld.hs 96;" f
_rmMID src/Dodge/Data/GenWorld.hs 120;" f
_rmMParent src/Dodge/Data/GenWorld.hs 121;" f
_rmName src/Dodge/Data/GenWorld.hs 113;" f
_rmOutPmnt src/Dodge/Data/GenWorld.hs 110;" f
_rmMID src/Dodge/Data/GenWorld.hs 119;" f
_rmMParent src/Dodge/Data/GenWorld.hs 120;" f
_rmName src/Dodge/Data/GenWorld.hs 112;" f
_rmOutPmnt src/Dodge/Data/GenWorld.hs 109;" f
_rmPath src/Dodge/Data/GenWorld.hs 106;" f
_rmPmnts src/Dodge/Data/GenWorld.hs 107;" f
_rmPolys src/Dodge/Data/GenWorld.hs 95;" f
_rmPos src/Dodge/Data/GenWorld.hs 105;" f
_rmRandPSs src/Dodge/Data/GenWorld.hs 116;" f
_rmShift src/Dodge/Data/GenWorld.hs 114;" f
_rmStartWires src/Dodge/Data/GenWorld.hs 117;" f
_rmType src/Dodge/Data/GenWorld.hs 123;" f
_rmViewpoints src/Dodge/Data/GenWorld.hs 115;" f
_rmRandPSs src/Dodge/Data/GenWorld.hs 115;" f
_rmShift src/Dodge/Data/GenWorld.hs 113;" f
_rmStartWires src/Dodge/Data/GenWorld.hs 116;" f
_rmType src/Dodge/Data/GenWorld.hs 122;" f
_rmViewpoints src/Dodge/Data/GenWorld.hs 114;" f
_rmWidth src/Dodge/Data/Room.hs 37;" f
_rpDir src/Dodge/Data/Room.hs 16;" f
_rpLinkStatus src/Dodge/Data/Room.hs 18;" f
@@ -2582,7 +2579,7 @@ addHighGirder src/Dodge/Room/Modify/Girder.hs 132;" f
addHighGirder' src/Dodge/Room/Modify/Girder.hs 142;" f
addIndefiniteArticle src/StringHelp.hs 17;" f
addNodes src/Dodge/Path.hs 115;" f
addPane src/Dodge/Placement/PlaceSpot.hs 146;" f
addPane src/Dodge/Placement/PlaceSpot.hs 143;" f
addPlmnt src/Dodge/LevelGen/PlacementHelper.hs 87;" f
addPointPolygon src/Geometry/Polygon.hs 102;" f
addPolyWall src/Dodge/LevelGen/StaticWalls.hs 141;" f
@@ -2602,14 +2599,14 @@ advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f
aimDelaySweep src/Dodge/Render/Picture.hs 272;" f
aimStanceInfo src/Dodge/Item/Info.hs 244;" f
aimTurn src/Dodge/Creature/YourControl.hs 180;" f
airlock src/Dodge/Room/Airlock.hs 23;" f
airlock0 src/Dodge/Room/Airlock.hs 65;" f
airlock90 src/Dodge/Room/Airlock.hs 163;" f
airlockCrystal src/Dodge/Room/Airlock.hs 202;" f
airlockDoor src/Dodge/Room/Airlock.hs 91;" f
airlockDoubleDoor src/Dodge/Room/Airlock.hs 94;" f
airlockSimple src/Dodge/Room/Airlock.hs 106;" f
airlockZ src/Dodge/Room/Airlock.hs 131;" f
airlock src/Dodge/Room/Airlock.hs 24;" f
airlock0 src/Dodge/Room/Airlock.hs 67;" f
airlock90 src/Dodge/Room/Airlock.hs 165;" f
airlockCrystal src/Dodge/Room/Airlock.hs 204;" f
airlockDoor src/Dodge/Room/Airlock.hs 93;" f
airlockDoubleDoor src/Dodge/Room/Airlock.hs 96;" f
airlockSimple src/Dodge/Room/Airlock.hs 108;" f
airlockZ src/Dodge/Room/Airlock.hs 133;" f
allVisibleWalls src/Dodge/Base/Collide.hs 215;" f
alongSegBy src/Geometry.hs 41;" f
alteRifle src/Dodge/Item/Held/Cane.hs 22;" f
@@ -3125,7 +3122,7 @@ debugSelectCreatureMessage src/Dodge/Debug.hs 79;" f
decodeSensorType src/Dodge/Terminal.hs 72;" f
decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f
decomposeTree src/Dodge/Tree/Compose.hs 57;" f
decontamRoom src/Dodge/Room/Airlock.hs 28;" f
decontamRoom src/Dodge/Room/Airlock.hs 29;" f
decoratedBlock src/Dodge/Placement/Instance/Block.hs 10;" f
decorationToShape src/Dodge/Placement/TopDecoration.hs 9;" f
decreaseAwareness src/Dodge/Creature/Perception.hs 119;" f
@@ -3317,7 +3314,7 @@ doWdP2f src/Dodge/WdP2f.hs 12;" f
doWdWd src/Dodge/WorldEffect.hs 28;" f
doWorldEvents src/Dodge/Update.hs 412;" f
doWorldPos src/Dodge/WorldPos.hs 7;" f
door src/Dodge/Room/Door.hs 13;" f
door src/Dodge/Room/Door.hs 14;" f
doorBetween src/Dodge/Placement/Instance/Door.hs 39;" f
doorMechanism src/Dodge/DrWdWd.hs 24;" f
doorMechanismStepwise src/Dodge/DrWdWd.hs 59;" f
@@ -3535,7 +3532,7 @@ errorHead src/ListHelp.hs 76;" f
errorIsLHS src/Geometry.hs 66;" f
errorNormalizeV src/Geometry.hs 55;" f
errorPointInPolygon src/Geometry.hs 47;" f
evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 133;" f
evaluateRandPS src/Dodge/Placement/PlaceSpot.hs 130;" f
evenOddSplit src/Dodge/Base.hs 160;" f
exitTerminalSubInv src/Dodge/WorldEffect.hs 116;" f
expandLine src/Dodge/Picture.hs 30;" f
@@ -3650,9 +3647,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 152;" f
gameRoomFromRoom src/Dodge/Layout.hs 151;" f
gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f
gameRoomsFromRooms src/Dodge/Layout.hs 149;" f
gameRoomsFromRooms src/Dodge/Layout.hs 148;" f
gameplayMenu src/Dodge/Menu.hs 136;" f
gameplayMenuOptions src/Dodge/Menu.hs 139;" f
gasType src/Dodge/HeldUse.hs 1141;" f
@@ -3696,7 +3693,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 199;" f
getTiles src/Dodge/Layout.hs 198;" f
getViewpoints src/Dodge/Viewpoints.hs 29;" f
getVolleyBurst src/Dodge/HeldUse.hs 125;" f
getWallSPic src/Dodge/Render/Walls.hs 51;" f
@@ -4305,18 +4302,18 @@ multiLookupTrie src/SimpleTrie.hs 57;" f
multiLookupTrieI src/SimpleTrie.hs 66;" f
muout src/Dodge/RoomLink.hs 129;" f
muzFlareAt src/Dodge/HeldUse.hs 674;" f
mvButton src/Dodge/Placement/PlaceSpot.hs 154;" f
mvCr src/Dodge/Placement/PlaceSpot.hs 160;" f
mvFS src/Dodge/Placement/PlaceSpot.hs 163;" f
mvButton src/Dodge/Placement/PlaceSpot.hs 151;" f
mvCr src/Dodge/Placement/PlaceSpot.hs 157;" f
mvFS src/Dodge/Placement/PlaceSpot.hs 160;" f
mvGust src/Dodge/Update.hs 770;" f
mvLS src/Dodge/Placement/PlaceSpot.hs 220;" f
mvLS src/Dodge/Placement/PlaceSpot.hs 218;" f
mvP src/Dodge/Wall/Move.hs 54;" f
mvPP src/Dodge/Placement/PlaceSpot.hs 157;" f
mvPP src/Dodge/Placement/PlaceSpot.hs 154;" f
mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f
mvPointMeleeTarg src/Dodge/Creature/Boid.hs 314;" f
mvPointToward src/Dodge/Base.hs 136;" f
mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f
mvProp src/Dodge/Placement/PlaceSpot.hs 151;" f
mvProp src/Dodge/Placement/PlaceSpot.hs 148;" f
mvPs src/Dodge/Wall/Move.hs 58;" f
myIntersectLineLine src/Geometry/Intersect.hs 207;" f
myIntersectSegSeg src/Geometry/Intersect.hs 185;" f
@@ -4455,23 +4452,22 @@ pjRemoteSetDirection src/Dodge/Projectile/Update.hs 225;" f
plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f
plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f
plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f
plMachine src/Dodge/Placement/PlaceSpot.hs 166;" f
plMachine' src/Dodge/Placement/PlaceSpot.hs 195;" f
plMachine src/Dodge/Placement/PlaceSpot.hs 163;" f
plMachine' src/Dodge/Placement/PlaceSpot.hs 193;" f
plNew src/Dodge/Base/NewID.hs 19;" f
plNewID src/Dodge/Base/NewID.hs 7;" f
plNewUpID src/Dodge/Base/NewID.hs 13;" f
plNewUsing src/Dodge/Base/NewID.hs 27;" f
plRRpt src/Dodge/LevelGen/PlacementHelper.hs 33;" f
plSlideDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 78;" f
plTurret src/Dodge/Placement/PlaceSpot.hs 172;" f
placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 209;" f
plTurret src/Dodge/Placement/PlaceSpot.hs 169;" f
placeMachineWalls src/Dodge/Placement/PlaceSpot.hs 207;" f
placePlainPSSpot src/Dodge/Placement/PlaceSpot.hs 39;" f
placeSpot src/Dodge/Placement/PlaceSpot.hs 30;" f
placeSpotID src/Dodge/Placement/PlaceSpot.hs 81;" f
placeSpotID' src/Dodge/Placement/PlaceSpot.hs 87;" f
placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 70;" f
placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 51;" f
placeWallPoly src/Dodge/Placement/PlaceSpot.hs 140;" f
placeSpotID src/Dodge/Placement/PlaceSpot.hs 84;" f
placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 71;" f
placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 52;" f
placeWallPoly src/Dodge/Placement/PlaceSpot.hs 137;" f
plainRegex src/Dodge/DisplayInventory.hs 189;" f
playIfFree src/Sound.hs 137;" f
playPositionalSoundQueue src/Sound.hs 145;" f
@@ -4974,7 +4970,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 116;" f
setupWorldBounds src/Dodge/Layout.hs 115;" f
sfInvColor src/Dodge/Item/InventoryColor.hs 12;" f
shadVBOptr src/Shader.hs 40;" f
shaderTypeExt src/Shader/Compile.hs 172;" f
@@ -5271,7 +5267,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 196;" f
tilesFromRooms src/Dodge/Layout.hs 195;" f
tilesToLine src/Shader/AuxAddition.hs 66;" f
timeFlowUpdate src/Dodge/Update.hs 167;" f
timeScroller src/Dodge/Item/Held/Utility.hs 42;" f
@@ -5361,7 +5357,7 @@ treePaths src/TreeHelp.hs 138;" f
treePost src/TreeHelp.hs 45;" f
treeToPotentialFunction src/Dodge/Item/Grammar.hs 143;" f
triLootRoom src/Dodge/Room/Treasure.hs 22;" f
triggerDoorRoom src/Dodge/Room/Door.hs 30;" f
triggerDoorRoom src/Dodge/Room/Door.hs 31;" f
triggerSwitch src/Dodge/Placement/Instance/Button.hs 47;" f
triggerSwitchSPic src/Dodge/Placement/Instance/Button.hs 14;" f
triggerSwitchSPicLight src/Dodge/Placement/Instance/Button.hs 31;" f
@@ -5615,7 +5611,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 137;" f
wallsFromRooms src/Dodge/Layout.hs 136;" f
wallsToDraw src/Dodge/Render/Walls.hs 17;" f
warmupSound src/Dodge/HeldUse.hs 1421;" f
warningRooms src/Dodge/Room/Warning.hs 26;" f