diff --git a/modules/game/actors.scm b/modules/game/actors.scm index ecfeb03..6bc7502 100644 --- a/modules/game/actors.scm +++ b/modules/game/actors.scm @@ -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)