Cleanup: broken pathfinding

This commit is contained in:
2021-11-16 18:05:47 +00:00
parent cb8cbe03a4
commit ebe9ad6b90
42 changed files with 491 additions and 301 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{-# LANGUAGE TupleSections #-}
{- Rooms that contain two doors and a switch alternating both. -}
module Dodge.Room.Airlock where
import Dodge.Placements
import Dodge.Placement.Instance
import Dodge.Room.Foreground
import Dodge.Default.Room
import Dodge.Default.Wall
+1 -1
View File
@@ -3,7 +3,7 @@ module Dodge.Room.Boss
where
import Dodge.Data
import Dodge.Default.Room
import Dodge.Placements
import Dodge.Placement.Instance
import Dodge.LevelGen.Data
import Dodge.Room.Procedural
import Dodge.Room.Link
+1 -1
View File
@@ -5,7 +5,7 @@ import Dodge.LevelGen.Data
import Dodge.Default.Room
--import Dodge.LevelGen.Data
--import Dodge.LightSources.Lamp
import Dodge.Placements
import Dodge.Placement.Instance
import Geometry
import Tile
+1 -1
View File
@@ -4,7 +4,7 @@ module Dodge.Room.Door
import Geometry
import Dodge.Data
import Dodge.Default.Room
import Dodge.Placements
import Dodge.Placement.Instance
import Color
import Data.Maybe
+1 -1
View File
@@ -1,7 +1,7 @@
module Dodge.Room.Furniture
where
import Dodge.Data
import Dodge.LevelGen
import Dodge.Placement.PlaceSpot
import Dodge.LevelGen.Data
import Dodge.Room.Foreground
import Dodge.Default.Wall
+16 -1
View File
@@ -9,6 +9,8 @@ module Dodge.Room.Link
, shiftRoomBy
, shiftLinkBy
, doRoomShift
, sortOutLinksOn
, filterSortOutLinksOn
, randomiseAllLinks
, filterLinks
, changeLinkTo
@@ -18,7 +20,7 @@ module Dodge.Room.Link
, invShiftLinkBy
, finalLinksUpdate
) where
import Dodge.LevelGen
import Dodge.Placement.PlaceSpot
import Dodge.LevelGen.Data
import Dodge.RandomHelp
import Geometry
@@ -34,6 +36,19 @@ randomiseOutLinks r = do
newLinks <- shuffle $ init $ _rmLinks r
return $ r {_rmLinks = newLinks ++ [last $ _rmLinks r]}
sortOutLinksOn :: Ord b => ((Point2,Float) -> b) -> Room -> Room
sortOutLinksOn f = rmLinks %~ dosort
where
dosort [] = []
dosort xs = sortOn f (init xs) ++ [last xs]
filterSortOutLinksOn :: Ord b => ((Point2,Float) -> Bool) -> ((Point2,Float) -> b) -> Room -> Room
filterSortOutLinksOn test f = rmLinks %~ dosort
where
dosort [] = []
dosort xs = let (ys,zs) = partition test (init xs)
in sortOn f ys ++ zs ++ [last xs]
{- Shuffle all links of a room randomly. -}
randomiseAllLinks :: RandomGen g => Room -> State g Room
randomiseAllLinks r = do
+1 -3
View File
@@ -6,7 +6,7 @@ module Dodge.Room.LongDoor
import Dodge.Data
import Dodge.Default.Room
import Dodge.LevelGen.Data
import Dodge.Placements
import Dodge.Placement.Instance
import Dodge.Room.Link
import Dodge.Room.Procedural
--import Dodge.Layout.Tree.Either
@@ -140,5 +140,3 @@ slowDoorRoom = do
proom <- southPillarsRoom x y h
addButtonSlowDoor x h (proom & rmPmnts %~ (++ (crits ++ barrels ++ lsources)))
randC1 :: PSType
randC1 = RandPS $ takeOne $ map PutCrit $ armourChaseCrit : replicate 50 chaseCrit
+2 -2
View File
@@ -11,7 +11,7 @@ module Dodge.Room.Procedural
) where
import Dodge.Data
import Dodge.Default.Wall
import Dodge.Placements
import Dodge.Placement.Instance
import Dodge.Room.Link
import Dodge.Room.Path
import Dodge.Default.Room
@@ -21,7 +21,7 @@ import Dodge.Room.Foreground
import Dodge.Item.Weapon
import Dodge.Item.Weapon.Launcher
import Dodge.RandomHelp
import Dodge.LevelGen
import Dodge.Placement.PlaceSpot
import Dodge.LevelGen.Data
import Dodge.LevelGen.Switch
import Dodge.Creature
+15 -2
View File
@@ -5,12 +5,12 @@ import Geometry
import Dodge.Default.Room
import Dodge.LevelGen.Data
import Dodge.Room.Link
import Dodge.Placements
import Dodge.Placement.Instance
import Dodge.Room.Corridor
import Dodge.Room.Furniture
--import Dodge.LevelGen.Data
--import Dodge.Default.Wall
--import Dodge.RandomHelp
import Dodge.RandomHelp
import Dodge.Creature
import Dodge.Layout.Tree.Polymorphic
@@ -75,6 +75,19 @@ blockedCorridor = do
]
sequence $ treeFromPost [] $ return $ Right $ set rmPmnts plmnts corridor
-- | A single corridor with a destructible block blocking it.
blockedCorridor' :: RandomGen g => State g Room
blockedCorridor' = do
r <- state $ randomR (0,pi)
theblocks <- takeOne [ [sPS (V2 20 40) r $ PutBlock [1] thecol $ reverse $ square 10]
, [ sPS (V2 5 40) r $ PutBlock [1] thecol $ reverse $ square 10
, sPS (V2 35 40) (r+0.5) $ PutBlock [1] thecol $ reverse $ square 10
]
]
return $ corridor & rmPmnts .~ theblocks
where
thecol = V4 (150/256) ( 75/256) 0 ( 250/256)
lasTunnel :: Room
lasTunnel = defaultRoom
{ _rmPolys = polys
+1 -2
View File
@@ -9,14 +9,13 @@ import Dodge.RandomHelp
import Dodge.Default.Wall
import Dodge.Layout.Tree.Polymorphic
import Dodge.Layout.Tree.Either
import Dodge.Placements
import Dodge.Placement.Instance
--import Dodge.LevelGen.Data
import Dodge.Room.Procedural
import Dodge.Room.Corridor
import Dodge.Room.Link
import Dodge.Room.Door
import Dodge.Room.Airlock
import Dodge.Room.LongDoor
import Geometry
import Picture
import Tile
+42 -6
View File
@@ -1,14 +1,18 @@
module Dodge.Room.Start where
import Dodge.LevelGen.Data
import Dodge.Data
import Dodge.Room.Door
import Dodge.Room.Link
import Dodge.Room.Procedural
import Dodge.Room.Foreground
import Dodge.Room.Furniture
import Dodge.Placements
import Dodge.Room.RoadBlock
import Dodge.Placement.Instance
import Dodge.Layout.Tree.Polymorphic
import Dodge.Item.Random
--import Dodge.LevelGen.Data
import Geometry.Data
import Padding
import Color
import Shape
@@ -20,17 +24,49 @@ import System.Random
rezBox :: Room
--rezBox = shiftRoomBy (V2 (-20) (-10),0) $ roomRect 40 20 1 1
rezBox = roomRect 40 40 1 1
& rmPmnts .~ [ spanColLightI (V3 0 0.5 0) 95 (V2 0 1) (V2 40 1) ]
rezBox = roomRect 40 60 1 1
& rmPmnts .~ [ spanColLightI (V3 0 0 0.5) 95 (V2 0 1) (V2 40 1) ]
rezInvBox :: Room
rezInvBox = roomRect 40 40 1 1
& rmPmnts .~ [ spanColLightI (V3 0 0.5 0) 95 (V2 0 39) (V2 40 39) ]
rezInvBox = roomRect 40 60 1 1
& rmPmnts .~ [ spanColLightI (V3 0 0 0.5) 95 (V2 0 59) (V2 40 59) ]
crRezBox :: Room
crRezBox = rezInvBox -- & rmPmnts %~ (sPS (V2 20 0) pi randC1 :)
wpRezBox :: Item -> Room
wpRezBox wp = rezInvBox & rmPmnts %~ (sPS (V2 15 30) 1 (PutFlIt wp) :)
startRoom :: RandomGen g => State g (Tree (Either Room Room))
startRoom = do
w <- state $ randomR (100,400)
h <- state $ randomR (100,200)
h <- state $ randomR (40,40)
theweapon <- randBlockBreakWeapon
let bottomEdgeTest (V2 _ y,_) = y < 1
bottomLeftTest (V2 x y,_) = y < 1 && x < 21
centralRoom <- filterSortOutLinksOn bottomEdgeTest ((\(V2 a b) -> (b,a)) . fst) <$>
(randomiseOutLinks =<< changeLinkTo bottomLeftTest
((roomRectAutoLinks w h) {_rmPmnts = []}))
let n = length $ filter bottomEdgeTest $ _rmLinks centralRoom
i <- state $ randomR (0,n-3)
j <- state $ randomR (i,n-2)
blcor <- blockedCorridor'
let rezrooms = map adddoor
$ insertAt i (wpRezBox theweapon)
$ insertAt j crRezBox
$ replicate (n-3) rezInvBox
return $ treeFromTrunk [Left rezBox
, Left door
]
(Node (Left centralRoom) (rezrooms ++ [onwardtree blcor]))
where
adddoor rm = treeFromPost [Left door] (Left rm)
onwardtree blcor = treeFromPost [Left door] (Right blcor)
randomRezBoxes :: RandomGen g => State g (Tree (Either Room Room))
randomRezBoxes = do
w <- state $ randomR (100,400)
h <- state $ randomR (40,40)
let bottomEdgeTest (V2 _ y,_) = y < 1
centralRoom <- randomiseOutLinks =<< changeLinkTo bottomEdgeTest
((roomRectAutoLinks w h) {_rmPmnts = []})
+1 -1
View File
@@ -5,7 +5,7 @@ import Dodge.Data
import Dodge.Base
import Dodge.LevelGen.Data
import Dodge.Room.Procedural
import Dodge.Placements
import Dodge.Placement.Instance
--import Dodge.LevelGen.Data
import Geometry
import Picture
+1 -1
View File
@@ -5,7 +5,7 @@ Typically dead ends.
module Dodge.Room.Treasure
where
import Dodge.Data
import Dodge.Placements
import Dodge.Placement.Instance
import Dodge.Default.Room
import Dodge.LevelGen.Data
import Geometry