From e580454a97b7e655501cbc239740eacce81f8d2a Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 24 May 2024 13:00:14 -0400 Subject: [PATCH] Remove objects from grid when they die. --- modules/game/actors.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/game/actors.scm b/modules/game/actors.scm index e2a06b0..b63cf8e 100644 --- a/modules/game/actors.scm +++ b/modules/game/actors.scm @@ -382,6 +382,7 @@ (('describe) `(bomb ,position ,($ exploding?))) (('collide other offset grid-info) #f))) +;; TODO: Combine with ghost gem. (define (^gem bcom x y) (define position (vector x y 1)) (define picked-up? (spawn ^cell)) @@ -394,7 +395,7 @@ (('exit obj grid-info) #f) (('wire-state grid-info from from-x from-y) #f) (('update-wire-state grid-info neighbor-grid) #f) - (('alive?) (pk 'gem-alive? (not ($ picked-up?)))) + (('alive?) (not ($ picked-up?))) (('describe) `(gem ,position)) (('collide other offset grid-info) (when (eq? ($ other 'type) 'player) @@ -883,7 +884,11 @@ ;; Cull dead objects. (if ($ obj 'alive?) (cons obj (lp rest)) - (lp rest))))))) + (match ($ obj 'position) + (#(x y z) + (let ((cell (grid-ref grid x y))) + ($ cell (delq obj ($ cell)))) + (lp rest))))))))) (define (tick-object obj) (let ((prev-pos ($ obj 'position))) ($ obj 'tick grid-info)