From 03149b3e627438a3dd317e62aba2befce52cc324 Mon Sep 17 00:00:00 2001
From: jsancho <devnull@localhost>
Date: Wed, 22 Jun 2011 16:57:25 +0000
Subject: [PATCH]

---
 src/gacela_mobs.scm | 42 ++++++++++++++++++++++++++----------------
 1 file changed, 26 insertions(+), 16 deletions(-)

diff --git a/src/gacela_mobs.scm b/src/gacela_mobs.scm
index 2f0a39e..8120e03 100755
--- a/src/gacela_mobs.scm
+++ b/src/gacela_mobs.scm
@@ -51,12 +51,7 @@
 (define (process-mobs mobs)
   (for-each (lambda (m) (m #:render)) mobs))
 
-(define-macro (define-mob mob-head . look)
-  (let ((name (car mob-head)) (attr (cdr mob-head)))
-    `(define ,name
-       (lambda-mob ,attr ,@look))))
-
-(define-macro (lambda-mob attr . look)
+(define-macro (lambda-look . look)
   (define (process-look look)
     (cond ((null? look) (values '() '()))
 	  (else
@@ -71,13 +66,28 @@
 				     images))))))))
 
   (receive (look-lines look-images) (process-look look)
-	   `(let ,(cons `(attr ',attr) look-images)
-	      (lambda (option . param)
-		(case option
-		  ((#:get)
-		   (display (assoc-ref attr (car param)))
-		   (display param) (newline))
-		  ((#:render)
-		   (glPushMatrix)
-		   ,@look-lines
-		   (glPopMatrix)))))))
+	   `(let ,look-images
+		(lambda ()
+		  (glPushMatrix)
+		  ,@look-lines
+		  (glPopMatrix)))))
+
+(define-macro (define-mob mob-head . look)
+  (let ((name (car mob-head)) (attr (cdr mob-head)))
+    `(define ,name
+       (lambda-mob ,attr ,@look))))
+
+(define-macro (lambda-mob attr . look)
+  `(let ((mob #f))
+     (set! mob
+	   (let ((attr ',attr) (actions '()) (renders '()))
+	     (lambda (option . params)
+	       (case option
+		 ((get-attr)
+		  attr)
+		 ((set-attr)
+		  (if (not (null? params)) (set! attr (car params))))))))
+     (cond ((not (null? ',look))
+	    (display ',look)
+	    (newline)))
+     mob))
-- 
2.39.5