X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela_mobs.scm;h=8120e0369b649f089e7508dcdb83a5e3adbd2f5f;hb=03149b3e627438a3dd317e62aba2befce52cc324;hp=555ce0f185add81cf7b76d0a967271e1e536337c;hpb=4487eb2a881092ebebd5496e6425fa8f07546c0f;p=gacela.git diff --git a/src/gacela_mobs.scm b/src/gacela_mobs.scm index 555ce0f..8120e03 100755 --- a/src/gacela_mobs.scm +++ b/src/gacela_mobs.scm @@ -51,18 +51,43 @@ (define (process-mobs mobs) (for-each (lambda (m) (m #:render)) mobs)) +(define-macro (lambda-look . look) + (define (process-look look) + (cond ((null? look) (values '() '())) + (else + (let ((line (car look))) + (receive (lines images) (process-look (cdr look)) + (cond ((string? line) + (let ((var (gensym))) + (values (cons `(draw-texture ,var) lines) + (cons `(,var (load-texture ,line)) images)))) + (else + (values (cons line lines) + images)))))))) + + (receive (look-lines look-images) (process-look look) + `(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 ((look-code (map (lambda (x) (if (string? x) `(draw-texture ,x) x)) look))) - `(let ((attr ',attr)) - (lambda (option) - (case option - ((#:render) - (glPushMatrix) - ,@look-code -; ,@(map (lambda (x) (if (string? x) `(draw-texture ,x) x)) look) - (glPopMatrix))))))) + `(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))