Cleanup in/outplacements
This commit is contained in:
@@ -21,8 +21,8 @@ defaultRoom = Room
|
|||||||
, _rmShift = (V2 0 0 , 0)
|
, _rmShift = (V2 0 0 , 0)
|
||||||
, _rmViewpoints = []
|
, _rmViewpoints = []
|
||||||
, _rmRandPSs = []
|
, _rmRandPSs = []
|
||||||
, _rmLabel = Nothing
|
-- , _rmLabel = Nothing
|
||||||
, _rmTakeFrom = Nothing
|
-- , _rmTakeFrom = Nothing
|
||||||
, _rmStartWires = IM.empty
|
, _rmStartWires = IM.empty
|
||||||
, _rmEndWires = IM.empty
|
, _rmEndWires = IM.empty
|
||||||
, _rmConnectsTo = S.member OutLink
|
, _rmConnectsTo = S.member OutLink
|
||||||
|
|||||||
+16
-22
@@ -42,8 +42,8 @@ generateLevelFromRoomList gr' w = over gWorld initWallZoning
|
|||||||
. over gWorld setupWorldBounds
|
. over gWorld setupWorldBounds
|
||||||
. placeWires
|
. placeWires
|
||||||
. doAfterPlacements
|
. doAfterPlacements
|
||||||
. doPartialPlacements
|
. doInPlacements
|
||||||
. doExtendedPlacements
|
. doOutPlacements
|
||||||
. doIndividualPlacements
|
. doIndividualPlacements
|
||||||
. setFloors
|
. setFloors
|
||||||
. worldToGenWorld rs'
|
. worldToGenWorld rs'
|
||||||
@@ -127,33 +127,27 @@ doAfterPlacement pmntis gw = gRandify gw $ do
|
|||||||
let (newgw,rm) = fst $ placeSpot (gw,_gRooms gw IM.! i) pmnt
|
let (newgw,rm) = fst $ placeSpot (gw,_gRooms gw IM.! i) pmnt
|
||||||
return $ newgw & gRooms . ix i .~ rm
|
return $ newgw & gRooms . ix i .~ rm
|
||||||
|
|
||||||
doPartialPlacements :: ( IM.IntMap [Placement],GenWorld) -> GenWorld
|
doInPlacements :: ( IM.IntMap [Placement],GenWorld) -> GenWorld
|
||||||
doPartialPlacements (im,w) = let (gw,rms) = mapAccumR (doPartialPlacement im) w (_gRooms w)
|
doInPlacements (im,w) = let (gw,rms) = mapAccumR (doRoomInPlacements im) w (_gRooms w)
|
||||||
in gw {_gRooms = rms}
|
in gw {_gRooms = rms}
|
||||||
|
|
||||||
doPartialPlacement :: IM.IntMap [Placement] -> GenWorld -> Room -> (GenWorld, Room)
|
doRoomInPlacements :: IM.IntMap [Placement] -> GenWorld -> Room -> (GenWorld, Room)
|
||||||
doPartialPlacement im w rm = case _rmInPmnt rm of
|
doRoomInPlacements im w rm = foldr f (w,rm) $ _rmInPmnt rm
|
||||||
[] -> (w, rm)
|
where
|
||||||
(InPlacement f i:xs) ->
|
f (InPlacement plf i) (w',r') = fst $ placeSpot (w',r') (plf $ im IM.! i)
|
||||||
let (w',r') = fst $ placeSpot (w,rm) (f (im IM.! i))
|
|
||||||
in doPartialPlacement im w' (r' & rmInPmnt %~ tail)
|
|
||||||
-- TODO rather than explicitly recursing and changing the room, this should be done
|
|
||||||
-- with a fold over the list of in placements
|
|
||||||
|
|
||||||
doExtendedPlacements :: GenWorld -> ( IM.IntMap [Placement], GenWorld)
|
doOutPlacements :: GenWorld -> ( IM.IntMap [Placement], GenWorld)
|
||||||
doExtendedPlacements w = let ((pmnts,gw),rms) = mapAccumR doExtendedPlacement (IM.empty,w) (_gRooms w)
|
doOutPlacements w = let ((pmnts,gw),rms) = mapAccumR doRoomOutPlacements (IM.empty,w) (_gRooms w)
|
||||||
in (pmnts,gw{_gRooms = rms})
|
in (pmnts,gw{_gRooms = rms})
|
||||||
|
|
||||||
doExtendedPlacement :: (IM.IntMap [Placement], GenWorld)
|
doRoomOutPlacements :: (IM.IntMap [Placement], GenWorld)
|
||||||
-> Room
|
-> Room
|
||||||
-> ( (IM.IntMap [Placement], GenWorld) , Room )
|
-> ( (IM.IntMap [Placement], GenWorld) , Room )
|
||||||
doExtendedPlacement (im,w) rm = case _rmOutPmnt rm of
|
doRoomOutPlacements imw r = foldr f ( imw, r ) $ _rmOutPmnt r
|
||||||
[] -> ( (im,w) , rm )
|
where
|
||||||
(OutPlacement plmnt i:xs) ->
|
f (OutPlacement pl i) ( (im,w) , rm ) =
|
||||||
let ((neww,newrm),plmnts) = placeSpot (w,rm) plmnt
|
let ((neww,newrm),plmnts) = placeSpot (w,rm) pl
|
||||||
in doExtendedPlacement (IM.insert i plmnts im, neww) (newrm & rmOutPmnt %~ tail)
|
in ((IM.insert i plmnts im, neww) , newrm )
|
||||||
-- TODO rather than explicitly recursing and changing the room, this should be done
|
|
||||||
-- with a fold over the list of out placements
|
|
||||||
|
|
||||||
doIndividualPlacements :: GenWorld -> GenWorld
|
doIndividualPlacements :: GenWorld -> GenWorld
|
||||||
doIndividualPlacements gw = let (gw', rms) = mapAccumR doRoomPlacements gw (_gRooms gw)
|
doIndividualPlacements gw = let (gw', rms) = mapAccumR doRoomPlacements gw (_gRooms gw)
|
||||||
|
|||||||
@@ -85,8 +85,6 @@ data Room = Room
|
|||||||
, _rmShift :: (Point2, Float)
|
, _rmShift :: (Point2, Float)
|
||||||
, _rmViewpoints :: [Point2]
|
, _rmViewpoints :: [Point2]
|
||||||
, _rmRandPSs :: [State StdGen (Point2,Float)]
|
, _rmRandPSs :: [State StdGen (Point2,Float)]
|
||||||
, _rmLabel :: Maybe Int
|
|
||||||
, _rmTakeFrom :: Maybe Int
|
|
||||||
, _rmStartWires :: IM.IntMap RoomWire
|
, _rmStartWires :: IM.IntMap RoomWire
|
||||||
, _rmEndWires :: IM.IntMap RoomWire
|
, _rmEndWires :: IM.IntMap RoomWire
|
||||||
, _rmConnectsTo :: S.Set RoomLinkType -> Bool
|
, _rmConnectsTo :: S.Set RoomLinkType -> Bool
|
||||||
|
|||||||
@@ -69,14 +69,14 @@ lightSensByDoor outplid rm = rm
|
|||||||
|
|
||||||
lasSensorTurretTest :: RandomGen g => Int -> State g (SubCompTree Room)
|
lasSensorTurretTest :: RandomGen g => Int -> State g (SubCompTree Room)
|
||||||
lasSensorTurretTest n = do
|
lasSensorTurretTest n = do
|
||||||
cenroom <- shuffleLinks $ lightSensInsideDoor n cenLasTur & rmLabel ?~ n
|
cenroom <- shuffleLinks $ lightSensInsideDoor n cenLasTur
|
||||||
let doorroom = switchDoorRoom n & rmTakeFrom ?~ n
|
let doorroom = switchDoorRoom n
|
||||||
return $ treeFromPost [PassDown door,PassDown cenroom,PassDown doorroom] (UseAll door)
|
return $ treeFromPost [PassDown door,PassDown cenroom,PassDown doorroom] (UseAll door)
|
||||||
|
|
||||||
lasCenSensEdge :: RandomGen g => Int -> State g (SubCompTree Room)
|
lasCenSensEdge :: RandomGen g => Int -> State g (SubCompTree Room)
|
||||||
lasCenSensEdge n = do
|
lasCenSensEdge n = do
|
||||||
cenroom <- shuffleLinks $ (lightSensByDoor n cenLasTur) {_rmLabel = Just n}
|
cenroom <- shuffleLinks $ lightSensByDoor n cenLasTur
|
||||||
let doorroom = (switchDoorRoom n) {_rmTakeFrom = Just n}
|
let doorroom = switchDoorRoom n
|
||||||
return $ treeFromTrunk [PassDown door] $ Node (PassDown cenroom)
|
return $ treeFromTrunk [PassDown door] $ Node (PassDown cenroom)
|
||||||
[ treeFromPost [PassDown doorroom] (UseAll door)
|
[ treeFromPost [PassDown doorroom] (UseAll door)
|
||||||
, treeFromPost [PassDown door] (UseLabel 0 corridor)
|
, treeFromPost [PassDown door] (UseLabel 0 corridor)
|
||||||
|
|||||||
@@ -58,10 +58,9 @@ runPastRoom i = do
|
|||||||
critroom = linkcor & rmPmnts .:~ plRRpt 0 randC1
|
critroom = linkcor & rmPmnts .:~ plRRpt 0 randC1
|
||||||
aswitchroom = corridorWallN
|
aswitchroom = corridorWallN
|
||||||
{_rmOutPmnt = [OutPlacement (putLitButOnPosExtTrig red useUnusedLnk) i]
|
{_rmOutPmnt = [OutPlacement (putLitButOnPosExtTrig red useUnusedLnk) i]
|
||||||
,_rmLabel = Just i
|
|
||||||
,_rmPmnts = []
|
,_rmPmnts = []
|
||||||
}
|
}
|
||||||
switchdoor = switchDoorRoom i & rmTakeFrom ?~ i
|
switchdoor = switchDoorRoom i
|
||||||
n = length $ filter theedgetest $ map lnkPosDir $ _rmLinks cenroom
|
n = length $ filter theedgetest $ map lnkPosDir $ _rmLinks cenroom
|
||||||
controom = treeFromPost [PassDown switchdoor,PassDown linkcor] (UseAll door)
|
controom = treeFromPost [PassDown switchdoor,PassDown linkcor] (UseAll door)
|
||||||
critrooms :: [SubCompTree Room]
|
critrooms :: [SubCompTree Room]
|
||||||
|
|||||||
Reference in New Issue
Block a user