From bed3604685f7783503c718fc9116be89953bc33c Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 23 May 2024 16:33:45 -0400 Subject: [PATCH] Adjust emitters to not produce side-effects in 'wire-state' method. --- modules/game/actors.scm | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/modules/game/actors.scm b/modules/game/actors.scm index 07d507e..43ee1f9 100644 --- a/modules/game/actors.scm +++ b/modules/game/actors.scm @@ -127,20 +127,19 @@ (match-lambda* (('type) 'emitter) (('position) position) - (('tick grid-info) ($ timer (+ ($ timer) 1))) + (('tick grid-info) + (let ((t (modulo (+ ($ timer) 1) interval))) + ($ timer t) + (when (= t 0) + ($ grid-info 'append-event `(emit ,x ,y))))) (('post-tick grid-info) #f) (('enter obj grid-info) #f) (('exit obj grid-info) #f) (('wire-state grid-info) - (let ((t ($ timer))) - (cond - ((= (modulo t interval) 0) - ($ grid-info 'append-event `(emit ,x ,y)) - 'electron-head) - ((= (modulo t interval) 1) - 'electron-tail) - (else - 'copper)))) + (match ($ timer) + (0 'electron-head) + (1 'electron-tail) + (_ 'copper))) (('update-wire-state grid-info) #f) (('alive?) #t) (('describe) `(clock-emitter ,position)) @@ -155,27 +154,26 @@ (('position) position) (('tick grid-info) (when ($ on?) - ($ timer (+ ($ timer) 1)))) + (let ((t (modulo (+ ($ timer) 1) interval))) + ($ timer t) + (when (= t 0) + ($ grid-info 'append-event `(emit ,x ,y)))))) (('post-tick grid-info) #f) (('enter obj grid-info) #f) (('exit obj grid-info) #f) (('activate grid-info) ($ on? #t) - ($ timer 0) + ($ timer -1) ($ grid-info 'append-event `(emitter-on ,x ,y))) (('deactivate grid-info) ($ on? #f) ($ grid-info 'append-event `(emitter-off ,x ,y))) (('wire-state grid-info) - (when ($ on?) - (let ((t ($ timer))) - (cond - ((= (modulo t interval) 0) - 'electron-head) - ((= (modulo t interval) 1) - 'electron-tail) - (else - 'copper))))) + (and ($ on?) + (match ($ timer) + (0 'electron-head) + (1 'electron-tail) + (_ 'copper)))) (('update-wire-state grid-info) #f) (('alive?) #t) (('on?) ($ on?))