]> gitweb.factorcode.org Git - factor.git/commitdiff
game-of-life: small updates.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 9 Mar 2018 22:32:30 +0000 (14:32 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 9 Mar 2018 22:32:30 +0000 (14:32 -0800)
extra/game-of-life/game-of-life.factor

index 969f1aca5959af15df4072312c272aaba0f8f37a..3fefe7a928041b71ced127d4c41eba29038dc754 100644 (file)
@@ -35,13 +35,11 @@ CONSTANT: neighbors {
     grid count-neighbors :> neighbors
     grid [| row j |
         row [| cell i |
-            i j neighbors nth nth :> n
+            i j neighbors nth nth
             cell [
-                2 3 between? i j grid nth set-nth
+                2 3 between? i j grid nth set-nth
             ] [
-                n 3 = [
-                    t i j grid nth set-nth
-                ] when
+                3 = [ t i j grid nth set-nth ] when
             ] if
         ] each-index
     ] each-index ;
@@ -55,9 +53,6 @@ TUPLE: grid-gadget < gadget grid size timer ;
         dup '[ _ [ grid>> next-step ] [ relayout-1 ] bi ]
         f 1/5 seconds <timer> >>timer ;
 
-M: grid-gadget graft*
-    [ timer>> start-timer ] [ call-next-method ] bi ;
-
 M: grid-gadget ungraft*
     [ timer>> stop-timer ] [ call-next-method ] bi ;
 
@@ -88,7 +83,8 @@ M: grid-gadget pref-dim*
     gadget grid>> [| row j |
         row [| cell i |
             cell [
-                i j [ size * ] bi@ 2array { size size } gl-fill-rect
+                i j [ size * ] bi@ 2array
+                { size size } gl-fill-rect
             ] when
         ] each-index
     ] each-index ;
@@ -110,13 +106,16 @@ M: grid-gadget pref-dim*
 M: grid-gadget draw-gadget*
     [ update-grid ] [ draw-cells ] [ draw-lines ] tri ;
 
+SYMBOL: last-click
+
 :: on-click ( gadget -- )
     gadget size>> :> size
     gadget grid>> grid-dim :> ( rows cols )
     gadget hand-rel first2 [ size /i ] bi@ :> ( i j )
     i 0 cols 1 - between?
     j 0 rows 1 - between? and [
-        i j gadget grid>> nth [ not ] change-nth
+        i j gadget grid>> nth
+        [ not dup last-click set ] change-nth
     ] when gadget relayout-1 ;
 
 :: on-drag ( gadget -- )
@@ -125,7 +124,7 @@ M: grid-gadget draw-gadget*
     gadget hand-rel first2 [ size /i ] bi@ :> ( i j )
     i 0 cols 1 - between?
     j 0 rows 1 - between? and [
-        t i j gadget grid>> nth set-nth
+        last-click get i j gadget grid>> nth set-nth
     ] when gadget relayout-1 ;
 
 : on-scroll ( gadget -- )