Correct non-pushing of partially destroyed doors

This commit is contained in:
2022-06-23 15:20:50 +01:00
parent 56b9b2dd9e
commit 85406d06c1
6 changed files with 23 additions and 4 deletions
+10
View File
@@ -12,6 +12,7 @@ import Dodge.Tree
import Geometry.ConvexPoly
--import Dodge.LevelGen.LevelStructure
import Data.Foldable
import System.Directory
import System.Random
import Control.Lens
@@ -26,9 +27,18 @@ generateWorldFromSeed i = do
writeFile "log/aGeneratedRoomLayout" ""
(roomList,bounds) <- layoutLevelFromSeed 0 i
return $ saveLevelStartSlot
$ postGenerationProcessing
$ generateLevelFromRoomList roomList initialWorld{_randGen=mkStdGen i}
& roomClipping .~ bounds
postGenerationProcessing :: World -> World
postGenerationProcessing w = foldl' assignPushDoors w (_doors w)
assignPushDoors :: World -> Door -> World
assignPushDoors w dr = case dr ^?! drSupport of
SupportedBy i -> w & doors . ix i . drPushes .~ Just (_drID dr)
_ -> w
layoutLevelFromSeed :: Int -> Int -> IO (IM.IntMap Room,[ConvexPoly])
layoutLevelFromSeed i seed = do
let i' = i + 1