X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela_mobs.scm;h=8c687dc5b42158dd01748059c7c88e552aa7c6da;hb=91e03880066280940b29a89eae28510e124e58cb;hp=5e159075b945586567e7154096dd4386de42b53e;hpb=023823491bfe1a64e136bcc2d47c6ec5803f23bf;p=gacela.git diff --git a/src/gacela_mobs.scm b/src/gacela_mobs.scm index 5e15907..8c687dc 100755 --- a/src/gacela_mobs.scm +++ b/src/gacela_mobs.scm @@ -20,6 +20,7 @@ (define show-mob-hash #f) (define hide-mob-hash #f) (define get-active-mobs #f) +(define clear-active-mobs #f) (define mobs-changed? #f) (let ((active-mobs (make-hash-table)) (changed #f)) @@ -38,6 +39,11 @@ (set! changed (not refreshed)) (hash-map->list (lambda (k v) v) active-mobs))) + (set! clear-active-mobs + (lambda () + (set! changed #t) + (hash-clear! active-mobs))) + (set! mobs-changed? (lambda () changed))) @@ -148,6 +154,38 @@ (lambda-look ,attr ,@look)))))) mob)) +(define-macro (define-mob mob-def) + (let ((name (car mob-def)) (def (cdr mob-def))) + `(define ,name + (lambda-mob ,def)))) + +(defmacro* lambda-mob (#:key (attr '()) (action #f) (look #f)) + `(let ((attr ,attr) (action ,action) (look ,look)) + (lambda (option . params) + (case option + ((get-attr) + attr) + ((set-attr) + (if (not (null? params)) (set! attr (car params)))) + ((get-action) + action) + ((set-action) + (if (not (null? params)) (set! action (car params)))) + ((get-look) + look) + ((set-look) + (if (not (null? params)) (set! look (car params)))) + ((run-mob) + (lambda (action) + (set! attr ((cdr action) attr))) + actions)) + ((render) + (for-each + (lambda (look) + ((cdr look) attr)) + looks)))))) + + (define (get-mob-attr mob var) (let ((value (assoc-ref (mob 'get-attr) var))) (if value (car value) #f)))