X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fgacela.scm;h=90e85816e0ae17f31df2b3b64142f39b3d143c5b;hb=31270934f62a3dbaefdf717d559195016e3385d0;hp=70ac867c2b995108b5ed2a188f043d173c6c84dd;hpb=0fcd674f524b9977055e7fe1958c7c815bd960a8;p=gacela.git diff --git a/src/gacela.scm b/src/gacela.scm index 70ac867..90e8581 100644 --- a/src/gacela.scm +++ b/src/gacela.scm @@ -118,7 +118,7 @@ (to-origin) (refresh-active-mobs) (run-mobs) - (draw-meshes) + (run-extensions) (flip-screen) (delay-frame)))) (quit-video)) @@ -130,6 +130,26 @@ loop-flag) +;;; Extensions to main loop + +(define extensions '()) + +(define (add-extension! proc pri) + "Add an extension with a priority to the main loop" + (set! extensions + (sort (assoc-set! extensions proc pri) + (lambda (a b) + (< (cdr a) (cdr b)))))) + +(define (remove-extension! proc) + "Remove an extension from the main loop" + (set! extensions + (assoc-remove! extensions proc))) + +(define (run-extensions) + (for-each (lambda (x) ((car x))) extensions)) + + ;;; Game Properties (define *title* "Gacela") @@ -338,18 +358,6 @@ ,@body)) -;;; Views Factory - -(define default-view (make-hash-table)) - -(define* (draw-meshes #:optional (meshes (hash-map->list (lambda (k v) v) default-view))) - (cond ((not (null? meshes)) - (catch #t - (lambda () ((car meshes) 'draw)) - (lambda (key . args) #f)) - (draw-meshes (cdr meshes))))) - - (module-map (lambda (sym var) (if (not (eq? sym '%module-public-interface)) (module-export! (current-module) (list sym))))