Work on slime crits
This commit is contained in:
+17
-11
@@ -6,13 +6,12 @@ module Dodge.Layout (
|
||||
shuffleRoomPos,
|
||||
) where
|
||||
|
||||
import Control.Monad
|
||||
-- import Dodge.Path.Translate
|
||||
import qualified Control.Foldl as L
|
||||
import Control.Lens
|
||||
import Control.Monad
|
||||
import Data.Foldable
|
||||
import Data.Function
|
||||
import Linear
|
||||
-- import Data.Graph.Inductive (labEdges, labNodes)
|
||||
import Data.List (nubBy, sortOn)
|
||||
import Data.Maybe
|
||||
@@ -33,6 +32,7 @@ import Dodge.Wall.Zone
|
||||
import Dodge.Zoning.Pathing
|
||||
import Geometry
|
||||
import qualified IntMapHelp as IM
|
||||
import Linear
|
||||
import RandomHelp
|
||||
|
||||
generateLevelFromRoomList :: IM.IntMap Room -> World -> GenWorld
|
||||
@@ -68,9 +68,12 @@ randomCompass w =
|
||||
setTiles :: GenWorld -> GenWorld
|
||||
setTiles gw = foldr setTile gw . reverse . IM.elems $ _genRooms gw
|
||||
|
||||
-- setTiles gw = foldl' (flip setTile) gw . reverse . IM.elems $ _genRooms gw
|
||||
|
||||
roomTileZeroShift :: Room -> Point2A
|
||||
roomTileZeroShift rm = fromMaybe (rm ^. rmShift)
|
||||
$ rm ^? rmFloor . tiles . ix 0 . tileZeroShift . _Just
|
||||
roomTileZeroShift rm =
|
||||
fromMaybe (rm ^. rmShift) $
|
||||
rm ^? rmFloor . tiles . ix 0 . tileZeroShift . _Just
|
||||
|
||||
setTile :: Room -> GenWorld -> GenWorld
|
||||
setTile r gw = case _rmFloor r of
|
||||
@@ -78,16 +81,18 @@ setTile r gw = case _rmFloor r of
|
||||
pid <- r ^. rmMParent
|
||||
rm <- gw ^? genRooms . ix pid
|
||||
guard $ rm ^? rmFloor . tiles . ix 0 . tileArrayZ == xs ^? ix 0 . tileArrayZ
|
||||
return $ gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor . tiles . ix 0 . tileZeroShift
|
||||
?~ roomTileZeroShift rm
|
||||
return $
|
||||
gw
|
||||
& genRooms . ix (fromJust (_rmMID r)) . rmFloor . tiles . ix 0 . tileZeroShift
|
||||
?~ roomTileZeroShift rm
|
||||
InheritFloor ->
|
||||
gw & genRooms . ix (fromJust (_rmMID r)) . rmFloor .~ Tiled [t & tilePoly .~ poly]
|
||||
where
|
||||
t = fromMaybe (Tile poly (V2 0 0) (V2 1 0) 16 Nothing) $ do
|
||||
pid <- r ^. rmMParent
|
||||
rm <- gw ^? genRooms . ix pid
|
||||
(rm ^? rmFloor . tiles . ix 0)
|
||||
<&> tileZeroShift ?~ roomTileZeroShift rm
|
||||
pid <- r ^. rmMParent
|
||||
rm <- gw ^? genRooms . ix pid
|
||||
(rm ^? rmFloor . tiles . ix 0)
|
||||
<&> tileZeroShift ?~ roomTileZeroShift rm
|
||||
poly =
|
||||
orderPolygon
|
||||
. convexHullSafe
|
||||
@@ -108,7 +113,7 @@ doInPlacements w =
|
||||
g rm = (rm ^?! rmMID . _Just,) <$> (rm ^. rmInPmnt)
|
||||
rplaceSpot i gw rx = placeSpot i (gw & gwWorld . randGen .~ gen) x
|
||||
where
|
||||
(x,gen) = runState rx (gw ^. gwWorld . randGen)
|
||||
(x, gen) = runState rx (gw ^. gwWorld . randGen)
|
||||
|
||||
doIndividualPlacements :: GenWorld -> GenWorld
|
||||
doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw)
|
||||
@@ -219,6 +224,7 @@ tilesFromRooms = concatMap (getTiles . _rmFloor . doRoomShift)
|
||||
getTiles :: Floor -> [Tile]
|
||||
getTiles fl = case fl of
|
||||
Tiled xs -> xs
|
||||
-- _ -> []
|
||||
_ -> error "tiles not correctly set for some room"
|
||||
|
||||
-- divideWall :: Wall -> [Wall]
|
||||
|
||||
Reference in New Issue
Block a user