Working inter-room placements
This commit is contained in:
+12
-8
@@ -1,11 +1,12 @@
|
||||
--{-# LANGUAGE TupleSections #-}
|
||||
module Dodge.Layout
|
||||
( generateLevelFromRoomList
|
||||
, doPartialPlacements
|
||||
, doExtendedPlacements
|
||||
-- , doPartialPlacements
|
||||
-- , doExtendedPlacements
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.LevelGen
|
||||
import Dodge.LevelGen.Data
|
||||
import Dodge.LevelGen.StaticWalls
|
||||
import Dodge.LevelGen.Pathing
|
||||
import Dodge.Wall.Zone
|
||||
@@ -34,6 +35,8 @@ generateLevelFromRoomList :: [Room] -> World -> World
|
||||
generateLevelFromRoomList gr w
|
||||
= initWallZoning
|
||||
. setupWorldBounds
|
||||
. doPartialPlacements rs
|
||||
. doExtendedPlacements rs
|
||||
. flip (foldl' doRoomPlacements) rs
|
||||
$ w { _walls = wallsFromRooms rs
|
||||
, _floorTiles = floorsFromRooms rs
|
||||
@@ -47,25 +50,26 @@ generateLevelFromRoomList gr w
|
||||
rs = zipWith addTile zs gr
|
||||
zs = map fromIntegral $ randomRs (0,63::Int) $ _randGen w
|
||||
|
||||
doPartialPlacements :: [Room] -> (IM.IntMap Int,World) -> World
|
||||
doPartialPlacements :: [Room] -> (IM.IntMap [Placement],World) -> World
|
||||
doPartialPlacements rms (im,w) = foldr (doPartialPlacement im) w rms
|
||||
|
||||
doPartialPlacement :: IM.IntMap Int -> Room -> World -> World
|
||||
doPartialPlacement :: IM.IntMap [Placement] -> Room -> World -> World
|
||||
doPartialPlacement im rm w = case _rmPartialPmnt rm of
|
||||
Nothing -> w
|
||||
Just fi -> case _rmTakeFrom rm of
|
||||
Nothing -> w
|
||||
Just i -> fst $ fst $ placeSpot (w,rm) (fi (im IM.! i))
|
||||
|
||||
doExtendedPlacements :: [Room] -> World -> (IM.IntMap Int, World)
|
||||
doExtendedPlacements :: [Room] -> World -> (IM.IntMap [Placement], World)
|
||||
doExtendedPlacements rms w = foldr doExtendedPlacement (IM.empty,w) rms
|
||||
|
||||
doExtendedPlacement :: Room -> (IM.IntMap Int, World) -> (IM.IntMap Int, World)
|
||||
doExtendedPlacement :: Room -> (IM.IntMap [Placement], World) -> (IM.IntMap [Placement], World)
|
||||
doExtendedPlacement rm (im,w) = case _rmExtendedPmnt rm of
|
||||
Nothing -> (im,w)
|
||||
Just _ -> case _rmLabel rm of
|
||||
Just plmnt -> case _rmLabel rm of
|
||||
Nothing -> (im,w)
|
||||
Just i -> undefined
|
||||
Just i -> let ((neww,_),plmnts) = placeSpot (w,rm) plmnt
|
||||
in (IM.insert i plmnts im, neww)
|
||||
|
||||
doRoomPlacements :: World -> Room -> World
|
||||
doRoomPlacements w rm = fst $ foldl' (\wr -> fst . placeSpot wr) (w,rm) $ _rmPmnts rm
|
||||
|
||||
Reference in New Issue
Block a user