Cleanup: broken pathfinding
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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 = []})
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user