+(define-module (dungeon-master generators town)
+ #:use-module (dungeon-master geom voronoi)
+ #:use-module (dungeon-master geom point)
+ #:export (generate))
+
+(define (random-bool)
+ (= (random 2) 1))
+
+(define pi 3.141592654)
+
+(define (generate patches)
+ "City generator from https://github.com/watabou/TownGeneratorOS/blob/master/Source/com/watabou/towngenerator/building/Model.hx"
+ (set! *random-state* (random-state-from-platform))
+ (when (= patches -1) (set! patches 15))
+ (build-patches patches))
+
+(define (build-patches patches)
+ (define* (get-points n seed #:optional (l '()))
+ (cond ((> n 0)
+ (let* ((a (+ seed (* (sqrt n) 5)))
+ (r (if (= n 0)
+ 0
+ (+ 10 (* n (+ 2 (random:exp))))))
+ (point (make-point
+ (* (cos a) r)
+ (* (sin a) r))))
+ (get-points (- n 1) seed (cons point l))))
+ (else
+ l)))
+
+ (let* ((sa (* (random:exp) 2 pi))
+ (points (get-points (* 8 patches) sa))
+ (voronoi (make-voronoi-mesh points)))
+ voronoi))