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
		
			
				
	
	
		
			32 lines
		
	
	
	
		
			996 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
	
		
			996 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { nixpkgs ? import ./nixpkgs.nix {} }:
 | |
| let inherit (nixpkgs) pkgs;
 | |
| in self: super: with pkgs.haskell.lib; rec {
 | |
|   generic-arbitrary = appendPatch
 | |
|     super.generic-arbitrary
 | |
|     [ ./build/generic-arbitrary-export-garbitrary.patch ];
 | |
| 
 | |
|   hgeometry =
 | |
|     appendPatch
 | |
|       (self.callHackageDirect {
 | |
|         pkg = "hgeometry";
 | |
|         ver = "0.9.0.0";
 | |
|         sha256 = "02hyvbqm57lr47w90vdgl71cfbd6lvwpqdid9fcnmxkdjbq4kv6b";
 | |
|       } {}) [ ./build/hgeometry-fix-haddock.patch ];
 | |
| 
 | |
|   hgeometry-combinatorial =
 | |
|     self.callHackageDirect {
 | |
|       pkg = "hgeometry-combinatorial";
 | |
|       ver = "0.9.0.0";
 | |
|       sha256 = "12k41wd9fd1y3jd5djwcpwg2s1cva87wh14i0m1yn49zax9wl740";
 | |
|     } {};
 | |
| 
 | |
|   vinyl = pkgs.haskell.lib.overrideSrc
 | |
|     (pkgs.haskell.lib.markUnbroken super.vinyl)
 | |
|     rec {
 | |
|       src = nixpkgs.fetchzip {
 | |
|         url = "mirror://hackage/vinyl-${version}/vinyl-${version}.tar.gz";
 | |
|         sha256 = "190ffrmm76fh8fi9afkcda2vldf89y7dxj10434h28mbpq55kgsx";
 | |
|       };
 | |
|       version = "0.12.0";
 | |
|     };
 | |
| }
 |