X-Git-Url: https://git.jsancho.org/?p=dungeon-master.git;a=blobdiff_plain;f=dungeon-master%2Fgenerators%2Ftown.scm;fp=dungeon-master%2Fgenerators%2Ftown.scm;h=745a6425544a5aee5c32e13499fae665f4652ba6;hp=0000000000000000000000000000000000000000;hb=695ecf94f5bb10ced4e66b0b4d036de9965c02ca;hpb=4e1254800a1c453aba76b8ccd5b632f38a71aed7 diff --git a/dungeon-master/generators/town.scm b/dungeon-master/generators/town.scm new file mode 100644 index 0000000..745a642 --- /dev/null +++ b/dungeon-master/generators/town.scm @@ -0,0 +1,34 @@ +(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))