diff --git a/src/Dodge/Layout.hs b/src/Dodge/Layout.hs index 1f3483c97..b5d0048aa 100644 --- a/src/Dodge/Layout.hs +++ b/src/Dodge/Layout.hs @@ -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 diff --git a/src/Dodge/Placement/PlaceSpot.hs b/src/Dodge/Placement/PlaceSpot.hs index 0e461beb3..f43ce57a8 100644 --- a/src/Dodge/Placement/PlaceSpot.hs +++ b/src/Dodge/Placement/PlaceSpot.hs @@ -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) diff --git a/tags b/tags index 5f819a541..ee838a1f9 100644 --- a/tags +++ b/tags @@ -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