Allow blocks to be pushed through gates.

This commit is contained in:
David Thompson 2024-05-24 16:57:17 -04:00
parent 808ccd247c
commit 1cb85bd682

View file

@ -154,14 +154,17 @@
(#(w h)
(let ((x (modulo (+ x dx) w))
(y (modulo (+ y dy) h)))
(let ((occupant-types
(map (lambda (obj) ($ obj 'type))
($ grid-info 'occupants x y))))
(match occupant-types
((or () ('switch))
($ pushed? #t)
($ position (vector x y z)))
(_ #f))))))))))))
(define (do-push)
($ pushed? #t)
($ position (vector x y z)))
(match ($ grid-info 'occupants x y)
(() (do-push))
((obj)
(match ($ obj 'type)
('switch (do-push))
('gate (when ($ obj 'open?) (do-push)))
(_ (values))))
(_ (values))))))))))))
(('pushed?) ($ pushed?))))
(define (^clock-emitter bcom x y interval)