- `(define ,name
- (lambda-mob ,attr ,@look))))
-
-(define-macro (lambda-mob attr . look)
- (define (process-look look)
- (cond ((null? look) (values '() '()))
- (else
- (let ((line (car look)))
- (receive (lines images) (process-look (cdr look))
- (cond ((string? line)
- (values (cons `(draw-texture ,line) lines)
- (cons line images)))
- (else
- (values (cons line lines)
- images))))))))
-
- (receive (look-lines look-images) (process-look look)
- `(let ((attr ',attr))
- (lambda (option)
- (case option
- ((#:render)
- (glPushMatrix)
- ,@look-lines
-; ,@(map (lambda (x) (if (string? x) `(draw-texture ,x) x)) look)
- (glPopMatrix)))))))
+ `(define ,(string->symbol (string-concatenate (list "make-" (symbol->string name))))
+ (lambda ()
+ (lambda-mob ,attr ,@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)))))))