Add dungeon level generation
Add a dungeon level generator, which: 1. generates an infinite sequence of rectangular rooms within the dimensions of the level 2. removes any duplicates from that sequence 3. Generates a graph from the delaunay triangulation of the centerpoints of those rooms 4. Generates the minimum-spanning-tree of that delaunay triangulation, with weights given by line length in points 5. Adds back a subset (default 10-15%) of edges from the delaunay triangulation to the graph 6. Uses the resulting graph to draw corridors between the rooms, using a random point on the near edge of each room to pick the points of the corridors
This commit is contained in:
		
							parent
							
								
									6f427fe4d6
								
							
						
					
					
						commit
						e76567b9e7
					
				
					 20 changed files with 680 additions and 103 deletions
				
			
		|  | @ -1,10 +1,10 @@ | |||
| -- | | ||||
| 
 | ||||
| -------------------------------------------------------------------------------- | ||||
| module Xanthous.DataSpec (main, test) where | ||||
| 
 | ||||
| -------------------------------------------------------------------------------- | ||||
| import Test.Prelude hiding (Right, Left, Down) | ||||
| import Xanthous.Data | ||||
| import Data.Group | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| main :: IO () | ||||
| main = defaultMain test | ||||
|  | @ -35,11 +35,12 @@ test = testGroup "Xanthous.Data" | |||
|           (not . isUnit) (Position @Int 1 13) @? "isUnit $ Position 1 13" | ||||
|       ] | ||||
|     ] | ||||
| 
 | ||||
|   , testGroup "Direction" | ||||
|     [ testProperty "opposite is involutive" $ \(dir :: Direction) -> | ||||
|         opposite (opposite dir) == dir | ||||
|     , testProperty "opposite provides inverse" $ \dir -> | ||||
|         invert (asPosition dir) == asPosition (opposite dir) | ||||
|         invert (asPosition dir) === asPosition (opposite dir) | ||||
|     , testProperty "asPosition isUnit" $ \dir -> | ||||
|         dir /= Here ==> isUnit (asPosition dir) | ||||
|     , testGroup "Move" | ||||
|  | @ -53,4 +54,29 @@ test = testGroup "Xanthous.Data" | |||
|       , testCase "DownRight" $ move DownRight mempty @?= Position 1 1 | ||||
|       ] | ||||
|     ] | ||||
| 
 | ||||
|   , testGroup "Corner" | ||||
|     [ testGroup "instance Opposite" | ||||
|       [ testProperty "involutive" $ \corner -> | ||||
|           opposite (opposite corner) === corner | ||||
|       ] | ||||
|     ] | ||||
| 
 | ||||
|   , testGroup "Edge" | ||||
|     [ testGroup "instance Opposite" | ||||
|       [ testProperty "involutive" $ \edge -> | ||||
|           opposite (opposite edge) === edge | ||||
|       ] | ||||
|     ] | ||||
| 
 | ||||
|   , testGroup "Box" | ||||
|     [ testGroup "boxIntersects" | ||||
|       [ testProperty "True" $ \dims -> | ||||
|           boxIntersects (Box @Word (V2 1 1) (V2 2 2)) | ||||
|                         (Box (V2 2 2) dims) | ||||
|       , testProperty "False" $ \dims -> | ||||
|           not $ boxIntersects (Box @Word (V2 1 1) (V2 2 2)) | ||||
|                             (Box (V2 4 2) dims) | ||||
|       ] | ||||
|     ] | ||||
|   ] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue