From 34ddd018252327a37f2d318a721c28f7abf87606 Mon Sep 17 00:00:00 2001 From: jgk Date: Sun, 28 Mar 2021 20:44:09 +0200 Subject: [PATCH] Broken level generation with error message on run --- src/Dodge/Floor.hs | 74 +++++++++++++++---------------- src/Dodge/LevelGen/StaticWalls.hs | 15 ++++--- 2 files changed, 47 insertions(+), 42 deletions(-) diff --git a/src/Dodge/Floor.hs b/src/Dodge/Floor.hs index 920bcd929..60008b30a 100644 --- a/src/Dodge/Floor.hs +++ b/src/Dodge/Floor.hs @@ -33,44 +33,44 @@ lev1 = do ( [return $ return $ Right deadEndRoom ] --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door --- ,glassSwitchBack >>= randomiseLinks] --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door] --- ++ [miniRoom3] --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door] --- ++ [roomCCrits] --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door] --- ++[roomMiniIntro] --- ++ [longRoom >>= randomiseLinks] --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door] + ++ [return $ connectRoom corridor + ,return $ connectRoom door + ,glassSwitchBack >>= randomiseLinks] + ++ [return $ connectRoom corridor + ,return $ connectRoom door] + ++ [miniRoom3] + ++ [return $ connectRoom corridor + ,return $ connectRoom door] + ++ [roomCCrits] + ++ [return $ connectRoom corridor + ,return $ connectRoom door] + ++[roomMiniIntro] + ++ [longRoom >>= randomiseLinks] + ++ [return $ connectRoom corridor + ,return $ connectRoom door] ++ firstWeapon --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door] --- ++ [randomiseLinks =<< pistolerRoom] --- ++ [return $ connectRoom door] --- ++ [randomiseLinks =<< shooterRoom] --- ++ (replicate 3 $ randomiseLinks corridor) --- ++ [return $ connectRoom (set rmPS [PS (20,40) 0 basicLS] corridor)] --- ++ [return $ connectRoom corridor] --- ++ (replicate 3 $ randomiseLinks corridor) --- ++ [return $ connectRoom corridor] --- ++[return $ connectRoom corridor,return $ connectRoom door] --- ++ [shootingRange] --- ++ (replicate 3 $ randomiseLinks corridor) --- ++[roomMiniIntro] --- ++ (replicate 3 $ randomiseLinks corridor) --- ++ [return $ connectRoom corridor --- ,return $ connectRoom door --- ,slowDoorRoom] --- ++ [return $ connectRoom corridor --- ,spawnerRoom --- ,return $ connectRoom corridor --- ] + ++ [return $ connectRoom corridor + ,return $ connectRoom door] + ++ [randomiseLinks =<< pistolerRoom] + ++ [return $ connectRoom door] + ++ [randomiseLinks =<< shooterRoom] + ++ (replicate 3 $ randomiseLinks corridor) + ++ [return $ connectRoom (set rmPS [PS (20,40) 0 basicLS] corridor)] + ++ [return $ connectRoom corridor] + ++ (replicate 3 $ randomiseLinks corridor) + ++ [return $ connectRoom corridor] + ++[return $ connectRoom corridor,return $ connectRoom door] + ++ [shootingRange] + ++ (replicate 3 $ randomiseLinks corridor) + ++[roomMiniIntro] + ++ (replicate 3 $ randomiseLinks corridor) + ++ [return $ connectRoom corridor + ,return $ connectRoom door + ,slowDoorRoom] + ++ [return $ connectRoom corridor + ,spawnerRoom + ,return $ connectRoom corridor + ] ) $ randomiseLinks corridor diff --git a/src/Dodge/LevelGen/StaticWalls.hs b/src/Dodge/LevelGen/StaticWalls.hs index c46ed66b1..95f4010ac 100644 --- a/src/Dodge/LevelGen/StaticWalls.hs +++ b/src/Dodge/LevelGen/StaticWalls.hs @@ -20,12 +20,16 @@ import qualified Data.Set as S -- ie returns a new set of walls with a hole determined by anticlockwise ordering of the points cutWalls' :: [Point2] -> IM.IntMap Wall -> IM.IntMap Wall cutWalls' qs walls = - IM.filter (not.wallIsZeroLength) - . fuseWallsWith zs - .createPolyWalls rs + nubWalls . IM.filter (not.wallIsZeroLength) - . removeWallsInPolygon ps - $ fuseWallsWith zs cwals + . fuseWallsWith zs + . createPolyWalls rs + . IM.filter (not.wallIsZeroLength) +-- . removeWallsInPolygon ps +-- $ fuseWallsWith zs cwals + . fuseWallsWith zs + $ removeWallsInPolygon ps + cwals where (zs,cwals) = cutWallsWithPoints ps walls ps = orderPolygon qs @@ -38,6 +42,7 @@ cutWalls' qs walls = -- also remove any walls that ended up zero length -- draw the required new walls along the polygon boundary +-- the following checks one of the corners of cut walls at each step cutWalls :: [Point2] -> IM.IntMap Wall -> IM.IntMap Wall cutWalls ps wls = case mapMaybe (flip checkWallRight newWalls) newWallsList of [] -> newWalls