Work on slime crits

This commit is contained in:
2026-04-13 19:54:11 +01:00
parent 8a57aa2f2c
commit b8bec2c830
14 changed files with 294 additions and 260 deletions
+17 -11
View File
@@ -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]