summary refs log tree commit diff
path: root/lib/cells.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cells.fnl')
-rw-r--r--lib/cells.fnl20
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/cells.fnl b/lib/cells.fnl
index 3a43010..e415f21 100644
--- a/lib/cells.fnl
+++ b/lib/cells.fnl
@@ -17,18 +17,26 @@
       (set x (+ x 1))))
   x)
 
+(fn neighbors< [f threshold]
+  (var x 0)
+  ;; nnn this could be faster maybe
+  (for [k 1 8]
+    (when (< (cell.aliveness (f (. neighbors k))) threshold)
+      (set x (+ x 1))))
+  x)
+
 (local life
   {cell.init
    (fn [self]
      (setmetatable {} self))
    cell.birth
    (fn [self get]
-     (if (= (neighbors> get 0) 3)
+     (if (= (neighbors> get 0.5) 3)
          self
          nil))
    cell.update
    (fn [self get]
-     (let [n (neighbors> get 0)]
+     (let [n (neighbors> get 0.5)]
        (if (or (= n 3)
                (= n 2))
          self
@@ -65,12 +73,12 @@
 
 (local boom
   {cell.init
-   (fn [self]
-     (setmetatable {:life 1} self))
+   (fn [self x]
+     (setmetatable {:life (or x 1)} self))
    cell.birth
    (fn [self get]
      (if (and (> self.life 0.08)
-              (> (neighbors> get (* (if (> self.life 0.9) 0.3 0.1) (math.random 7))) 0))
+              (> (neighbors< get (* (if (> self.life 0.9) -0.3 -0.1) (math.random 7))) 0))
          (do
            (setmetatable {:life (* self.life 0.8)} (getmetatable self)))
          nil))
@@ -80,7 +88,7 @@
          (setmetatable {:life (* self.life (+ 0.5 (* (math.random 5) 0.1)))} (getmetatable self))
          nil))
    cell.aliveness
-   #$.life
+   #(- $.life)
    cell.color
    #[(+ 0.4 (* 0.6 $.life))
      (math.max 0 (- 0.8 (* 0.9 (- 1 $.life))))