From 815c3c809aaff4d4107e09431fab4d7bc105a0c7 Mon Sep 17 00:00:00 2001
From: Juliana Sims <juli@incana.org>
Date: Wed, 22 May 2024 14:42:27 -0400
Subject: [PATCH] Render background and electron for logic gates

---
 game.scm                | 34 +++++++++++++++-------------------
 modules/game/actors.scm |  6 +++---
 2 files changed, 18 insertions(+), 22 deletions(-)

diff --git a/game.scm b/game.scm
index a150978..2eac3b5 100644
--- a/game.scm
+++ b/game.scm
@@ -258,28 +258,26 @@
 (define (draw-exit pos)
   (draw-tile context tileset 27 (vec2-x pos) (vec2-y pos)))
 
-(define (draw-wall pos type)
+(define (draw-wire-state pos state)
   (let ((x (vec2-x pos))
         (y (vec2-y pos)))
-    (match type
+    (match state
       ('electron-head
        (draw-tile context tileset 4 x y))
       ('electron-tail
        (draw-tile context tileset 5 x y))
       (_ #f))))
 
+(define (draw-wall pos type)
+  (draw-wire-state pos type))
+
 (define (draw-block pos type)
   (let ((x (vec2-x pos))
         (y (vec2-y pos)))
     (match type
       ('crate (draw-tile context tileset 29 x y))
       (_ (draw-tile context tileset 3 x y)))
-    (match type
-      ('electron-head
-       (draw-tile context tileset 4 x y))
-      ('electron-tail
-       (draw-tile context tileset 5 x y))
-      (_ #f))))
+    (draw-wire-state pos type)))
 
 (define (draw-clock-emitter pos)
   (draw-tile context tileset 48 (vec2-x pos) (vec2-y pos)))
@@ -293,14 +291,12 @@
 (define (draw-gate pos open?)
   (draw-tile context tileset (if open? 46 45) (vec2-x pos) (vec2-y pos)))
 
-(define (draw-and-gate pos)
-  (draw-tile context tileset 42 (vec2-x pos) (vec2-y pos)))
-
-(define (draw-or-gate pos)
-  (draw-tile context tileset 43 (vec2-x pos) (vec2-y pos)))
-
-(define (draw-xor-gate pos)
-  (draw-tile context tileset 44 (vec2-x pos) (vec2-y pos)))
+(define (draw-logic-gate pos state id)
+  (let ((x (vec2-x pos))
+        (y (vec2-y pos)))
+    (draw-tile context tileset 2 x y)
+    (draw-tile context tileset id x y)
+    (draw-wire-state pos state)))
 
 (define (draw-electric-switch pos on?)
   (draw-tile context tileset (if on? 7 6) (vec2-x pos) (vec2-y pos)))
@@ -316,9 +312,9 @@
     (('floor-switch pos on?) (draw-floor-switch pos on?))
     (('gem pos) (draw-gem pos))
     (('gate pos open?) (draw-gate pos open?))
-    (('and-gate pos) (draw-and-gate pos))
-    (('xor-gate pos) (draw-xor-gate pos))
-    (('or-gate pos) (draw-or-gate pos))
+    (('and-gate pos state) (draw-logic-gate pos state 42))
+    (('or-gate pos state) (draw-logic-gate pos state 43))
+    (('xor-gate pos state) (draw-logic-gate pos state 44))
     (('electric-switch pos on?) (draw-electric-switch pos on?))))
 
 (define (draw-background)
diff --git a/modules/game/actors.scm b/modules/game/actors.scm
index e8eb0f1..9d327a5 100644
--- a/modules/game/actors.scm
+++ b/modules/game/actors.scm
@@ -273,7 +273,7 @@
            ($ state 'electron-head))
           (_ ($ state 'copper))))))
     (('alive?) #t)
-    (('describe) `(and-gate ,position))
+    (('describe) `(and-gate ,position ,($ state)))
     (('collide other offset grid-info) #f)))
 
 (define (^xor-gate bcom x y)
@@ -313,7 +313,7 @@
            ($ state 'electron-head))
           (_ ($ state 'copper))))))
     (('alive?) #t)
-    (('describe) `(xor-gate ,position))
+    (('describe) `(xor-gate ,position ,($ state)))
     (('collide other offset grid-info) #f)))
 
 (define (^or-gate bcom x y)
@@ -357,7 +357,7 @@
            ($ state 'electron-head))
           (_ ($ state 'copper))))))
     (('alive?) #t)
-    (('describe) `(or-gate ,position))
+    (('describe) `(or-gate ,position ,($ state)))
     (('collide other offset grid-info) #f)))
 
 (define (^player bcom x y)