Files
shinu/shinu.lisp
2017-03-09 08:20:48 +01:00

48 lines
1.4 KiB
Common Lisp
Executable File

#!/usr/local/bin/sbcl --script
(load "snek/src/load")
(setf *random-state* (make-random-state t))
(defvar *file* "out~a.png")
(defvar *size* 1000)
(defmacro rand () `(random 1.0))
(defun rand-rgba (opacity)
(list (rand) (rand) (rand) opacity))
(defun main ()
(let* ((mid (* *size* .5))
(repeat (random 25))
(grains (random 10))
(itt (random 2000))
(bg (rand-rgba 1.0))
(active (rand-rgba 0.6))
(sand (sandpaint* *size* :active active :bg bg)))
(loop for i in (linspace 100 900 repeat)
for j from 1 to repeat do
(format t "~a/~a (~a)~%" j repeat (/ j repeat))
(let ((snk (snek*))
(va (list 0 0))
(vb (list 0 0))
(p1 (list 100 i))
(p2 (list 900 i)))
(loop for k from 1 to itt do
(let ((v1 (insert-vert (l-on-line k itt p1 p2) into snk))
(v2 (insert-vert (ladd va (l-on-line k itt p1 p2)) into snk)))
(setf va (ladd va (l-rand-in-circle (* 0.7 j))))
(setf vb (ladd vb (l-rand-in-circle (* 0.001 j))))
(with-snek (snk)
(with-all-verts (snk v)
(move-vert v (ladd (l-rand-in-circle 0.1) vb)))
(join-verts v1 v2))
(sandpaint-edges sand snk grains)
(sandpaint-verts sand snk)
(sandpaint-save sand (format nil *file* j))))))))
(main)