Count gate activations and only close when equal deactivations occur.
This commit is contained in:
parent
6053727ee4
commit
be21e4a6c0
1 changed files with 11 additions and 4 deletions
|
@ -436,6 +436,7 @@
|
||||||
(define (^gate bcom x y)
|
(define (^gate bcom x y)
|
||||||
(define position (vector x y 1))
|
(define position (vector x y 1))
|
||||||
(define open? (spawn ^cell))
|
(define open? (spawn ^cell))
|
||||||
|
(define activations (spawn ^cell 0))
|
||||||
(match-lambda*
|
(match-lambda*
|
||||||
(('type) 'gate)
|
(('type) 'gate)
|
||||||
(('position) position)
|
(('position) position)
|
||||||
|
@ -444,11 +445,17 @@
|
||||||
(('enter obj grid-info) #f)
|
(('enter obj grid-info) #f)
|
||||||
(('exit obj grid-info) #f)
|
(('exit obj grid-info) #f)
|
||||||
(('activate grid-info)
|
(('activate grid-info)
|
||||||
|
(let ((k (1+ ($ activations))))
|
||||||
|
($ activations k)
|
||||||
|
(unless (> k 1)
|
||||||
($ open? #t)
|
($ open? #t)
|
||||||
($ grid-info 'append-event `(gate-open ,x ,y)))
|
($ grid-info 'append-event `(gate-open ,x ,y)))))
|
||||||
(('deactivate grid-info)
|
(('deactivate grid-info)
|
||||||
|
(let ((k (1- ($ activations))))
|
||||||
|
($ activations k)
|
||||||
|
(when (= k 0)
|
||||||
($ open? #f)
|
($ open? #f)
|
||||||
($ grid-info 'append-event `(gate-close ,x ,y)))
|
($ grid-info 'append-event `(gate-close ,x ,y)))))
|
||||||
(('wire-state grid-info from from-x from-y) #f)
|
(('wire-state grid-info from from-x from-y) #f)
|
||||||
(('update-wire-state grid-info neighbor-grid) #f)
|
(('update-wire-state grid-info neighbor-grid) #f)
|
||||||
(('alive?) #t)
|
(('alive?) #t)
|
||||||
|
|
Loading…
Add table
Reference in a new issue