Allow for ordering of in placements, not fully tested yet

This commit is contained in:
2025-09-24 23:01:22 +01:00
parent eab27fea8b
commit f51868c84c
10 changed files with 87 additions and 76 deletions
+17 -18
View File
@@ -1,9 +1,10 @@
--{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TupleSections #-}
module Dodge.Layout (
generateLevelFromRoomList,
tilesFromRooms,
) where
import Data.List (sortOn)
import Dodge.Path.Translate
import qualified Control.Foldl as L
import Control.Lens
@@ -13,7 +14,7 @@ import Data.Graph.Inductive (labEdges, labNodes)
import Data.List (nubBy)
import Data.Maybe
import Data.Tile
import Data.Traversable
--import Data.Traversable
import Dodge.Data.GenWorld
import Dodge.Default.Wall
import Dodge.GameRoom
@@ -79,26 +80,24 @@ shuffleRoomPos rm = do
return $ rm & rmPos .~ newPos
doInPlacements :: GenWorld -> GenWorld
doInPlacements w =
let (gw, rms) = mapAccumR doRoomInPlacements w (_genRooms w)
in gw & genRooms .~ rms
doRoomInPlacements :: GenWorld -> Room -> (GenWorld, Room)
doRoomInPlacements w rm = foldr f (w, rm) $ _rmInPmnt rm
doInPlacements w = foldl' (\gw (i,(_,f)) -> placeSpot' i gw (f gw)) w
. sortOn fst
$ foldMap g $ w ^. genRooms
where
f plf (w', r') = placeSpot (w', r') (plf w')
g rm = (rm^?! rmMID . _Just,) <$> (rm ^. rmInPmnt)
-- let (gw, rms) = mapAccumR doRoomInPlacements w (_genRooms w)
-- in gw & genRooms .~ rms
--doRoomInPlacements :: GenWorld -> Room -> (GenWorld, Room)
--doRoomInPlacements w rm = foldr f (w, rm) $ _rmInPmnt rm
-- where
-- f plf (w', r') = placeSpot (w', r') (plf w')
doIndividualPlacements :: GenWorld -> GenWorld
doIndividualPlacements gw = foldl' doRoomPlacements' gw (_genRooms gw)
-- let (gw', rms) = mapAccumR doRoomPlacements gw (_genRooms gw)
-- in gw' & genRooms .~ rms
doIndividualPlacements gw = foldl' doRoomPlacements gw (_genRooms gw)
doRoomPlacements :: GenWorld -> Room -> (GenWorld, Room)
doRoomPlacements w rm = foldl' placeSpot (w, rm & rmPmnts .~ mempty)
$ _rmPmnts rm
doRoomPlacements' :: GenWorld -> Room -> GenWorld
doRoomPlacements' w rm = foldl' (placeSpot' i) (w & genRooms . ix i . rmPmnts .~ mempty)
doRoomPlacements :: GenWorld -> Room -> GenWorld
doRoomPlacements w rm = foldl' (placeSpot' i) (w & genRooms . ix i . rmPmnts .~ mempty)
$ _rmPmnts rm
where
i = rm ^?! rmMID . _Just