Add activation counting to switched emitters

This commit is contained in:
Juliana Sims 2024-05-25 13:29:12 -04:00
parent 049e859dac
commit 133fdb5752
No known key found for this signature in database
GPG key ID: 2A00BD4B0090029E

View file

@ -198,6 +198,7 @@
(define timer (spawn ^cell 0))
(define on? (spawn ^cell))
(define position (vector x y 0))
(define activations (spawn ^cell 0))
(define (wire-state)
(and ($ on?)
(match ($ timer)
@ -217,12 +218,18 @@
(('enter obj grid-info) #f)
(('exit obj grid-info) #f)
(('activate grid-info)
($ on? #t)
($ timer 0)
($ grid-info 'append-event `(emitter-on ,x ,y)))
(let ((k (1+ ($ activations))))
($ activations k)
(unless (> k 1)
($ on? #t)
($ timer 0)
($ grid-info 'append-event `(emitter-on ,x ,y)))))
(('deactivate grid-info)
($ on? #f)
($ grid-info 'append-event `(emitter-off ,x ,y)))
(let ((k (1- ($ activations))))
($ activations k)
(when (= k 0)
($ on? #f)
($ grid-info 'append-event `(emitter-off ,x ,y)))))
(('wire-state grid-info from from-x from-y) (wire-state))
(('update-wire-state grid-info neighbor-grid) #f)
(('alive?) #t)