X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela_mobs.scm;h=dabb9dc2a40102aa5202fb171f510c52bfc1e3e6;hb=6ae59c90c15804096c9b738953bb78bc75d21e19;hp=ca4d5d37c08d00fb7825fd9ecf9c6559c530eea1;hpb=a27500cab231ad3051fba783d74f77e72990bb48;p=gacela.git diff --git a/src/gacela_mobs.scm b/src/gacela_mobs.scm index ca4d5d3..dabb9dc 100755 --- a/src/gacela_mobs.scm +++ b/src/gacela_mobs.scm @@ -31,7 +31,7 @@ (set! hide-mob-hash (lambda (key) - (hash-remove! key) + (hash-remove! active-mobs key) (set! changed #t))) (set! get-active-mobs @@ -58,12 +58,9 @@ (define-macro (hide-mob mob) (cond ((list? mob) `(let ((m ,mob)) - (hide-mob-hash (m 'get-mob-id) m))) + (hide-mob-hash (m 'get-mob-id)))) (else - `(hide-mob-hash (,mob 'get-mob-id) (lambda () (,mob)))))) - -(define-macro (kill-me) - `(hide-mob-hash mob-id)) + `(hide-mob-hash (,mob 'get-mob-id))))) (define (run-mobs mobs) (for-each @@ -79,16 +76,20 @@ (define-macro (define-mob mob-head . body) (let ((name (car mob-head)) (attr (cdr mob-head))) `(define ,(string->symbol (string-concatenate (list "make-" (symbol->string name)))) - (lambda* (#:key ,@attr) + (lambda* ,(if (null? attr) '() `(#:key ,@attr)) (lambda-mob () ,@body))))) (define-macro (lambda-mob attr . body) - `(let ,(cons '(mob-id (gensym)) attr) - (lambda* (#:optional (option #f)) - (case option - ((get-mob-id) - mob-id) - (else - (catch #t - (lambda () ,@body) - (lambda (key . args) #f))))))) + (let ((mob-id-symbol (gensym)) + (type-mob + `(let ,(cons `(,mob-id-symbol (gensym)) attr) + (lambda* (#:optional (option #f)) + (define (kill-me) + (hide-mob-hash ,mob-id-symbol)) + (case option + ((get-mob-id) + ,mob-id-symbol) + (else + (catch #t + (lambda () ,@body) + (lambda (key . args) #f))))))))