]> git.jsancho.org Git - gacela.git/commitdiff
Include mobs in gacela module.
authorjsancho <devnull@localhost>
Mon, 2 Jan 2012 19:32:17 +0000 (19:32 +0000)
committerjsancho <devnull@localhost>
Mon, 2 Jan 2012 19:32:17 +0000 (19:32 +0000)
src/gacela.scm
src/video.scm

index 83e7275e6dd316d2f5d88530a4c58d5e999a9651..a9d67711599253964c158718c3648ce0d29e9e26 100644 (file)
            quit-gacela
            game-loop
            game-running?
-           set-game-code)
-  #:export-syntax (game)
+           set-game-code
+           show-mob-hash
+           hide-mob-hash
+           hide-all-mobs)
+  #:export-syntax (game
+                  show-mob
+                  hide-mob
+                  the-mob
+                  define-mob
+                  lambda-mob)
   #:re-export (get-current-color
               set-current-color
               with-color
@@ -53,7 +61,8 @@
               add-light
               set-camera
               camera-look
-              render-text))
+              render-text
+              get-frame-time))
 
 
 ;;; Resources Cache
   (set! loop-flag #f))
 
 (define (game-loop)
-;        (refresh-active-mobs)
+  (refresh-active-mobs)
   (set! loop-flag #t)
   (init-video *width-screen* *height-screen* *bpp-screen* #:title *title* #:mode *mode* #:fps *frames-per-second*)
   (while loop-flag
               (else
                (clear-screen)
                (to-origin)
-;                 (refresh-active-mobs)
+               (refresh-active-mobs)
                (if (procedure? game-code)
                    (catch #t
                           (lambda () (game-code))
                           (lambda (key . args) #f)))
-;                        (run-mobs)
+               (run-mobs)
                (flip-screen)
                (delay-frame))))
   (quit-video))
 
 (define mobs-table (make-hash-table))
 (define active-mobs '())
-(define changed #f))
+(define mobs-changed #f)
 
 (define (show-mob-hash mob)
   (hash-set! mobs-table (mob 'get-mob-id) mob)
-  (set! changed #t))
+  (set! mobs-changed #t))
 
 (define (hide-mob-hash mob-id)
   (hash-remove! mobs-table mob-id)
-  (set! changed #t))
+  (set! mobs-changed #t))
 
 (define (refresh-active-mobs)
-  (cond (changed
-        (set! changed #f)
+  (cond (mobs-changed
+        (set! mobs-changed #f)
         (set! active-mobs (hash-map->list (lambda (k v) v) mobs-table)))))
 
 (define (get-active-mobs)
   active-mobs)
 
 (define (hide-all-mobs)
-  (set! changed #t)
+  (set! mobs-changed #t)
   (hash-clear! mobs-table))
 
 (define (mobs-changed?)
-  changed)
+  mobs-changed)
 
 
 (define-macro (show-mob mob)
 (define* (run-mobs #:optional (mobs (get-active-mobs)))
   (for-each
    (lambda (m)
-     (glPushMatrix)
-     (m)
-     (glPopMatrix))
+     (glmatrix-block (m)))
    mobs))
 
 
 ;;; Making mobs
 
-(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* ,(if (null? attr) '() `(#:key ,@attr))
-        (the-mob ',name () ,attr ,@body)))))
-
 (define-macro (the-mob type attr publish . body)
   (let ((mob-id-symbol (gensym))
        (type-symbol (gensym))
                   (lambda () ,@body)
                   (lambda (key . args) #f))))))))
 
+(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* ,(if (null? attr) '() `(#:key ,@attr))
+        (the-mob ',name () ,attr ,@body)))))
+
 (define-macro (lambda-mob attr . body)
   `(the-mob 'undefined ,attr '() ,@body))
 
index c30f3332e9f475266f173d18c2fa1097aa38fc15..e183f13330f05713125651b2063ea9ff83fabf39 100644 (file)
            set-camera
            camera-look
            load-font
-           render-text))
+           render-text)
+  #:export-syntax (glmatrix-block)
+  #:re-export (glPushMatrix
+              glPopMatrix))
+
 
 
 ;;; Screen
   (glLoadIdentity)
   (cond ((3d-mode?) (camera-look))))
 
+(define-macro (glmatrix-block . code)
+  `(let ((result #f))
+     (glPushMatrix)
+     (set! result (begin ,@code))
+     (glPopMatrix)
+     result))
+
 
 ;;; Lights