]> git.jsancho.org Git - gacela.git/blobdiff - src/gacela.scm
No more events engine, map-mobs will do all the work
[gacela.git] / src / gacela.scm
index 6a0b50126870a0d3dae4dfbb3c9fd4b00021e49a..bfb4d123d47a9d896bb4cdc8d9c615845f5bacc6 100644 (file)
   (glClearColor 0 0 0 0)
 ;  (glClearDepth 1)
 ;  (glDepthFunc GL_LEQUAL)
-;  (glEnable GL_BLEND)
+  (glEnable GL_BLEND)
 ;  (glBlendFunc GL_SRC_ALPHA GL_ONE)
+  (glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA)
   (glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST)
   #t)
 
          (set! audio #f))))
 
 
+;;; Resources Cache
+
+(define resources-cache (make-weak-value-hash-table))
+
+(define get-resource-from-cache #f)
+(define insert-resource-into-cache #f)
+
+(let ()
+  (set! get-resource-from-cache
+       (lambda (key)
+         (hash-ref resources-cache key)))
+
+  (set! insert-resource-into-cache
+       (lambda (key res)
+         (hash-set! resources-cache key res))))
+
 ;;; GaCeLa Functions
 
 (define set-frames-per-second #f)
 (define init-frame-time #f)
+(define get-frame-time #f)
 (define delay-frame #f)
 
 (let ((time 0) (time-per-frame (/ 1000.0 *frames-per-second*)))
        (lambda ()
          (set! time (SDL_GetTicks))))
 
+  (set! get-frame-time
+       (lambda ()
+         time))
+
   (set! delay-frame
        (lambda ()
          (let ((frame-time (- (SDL_GetTicks) time)))
                   (SDL_Delay (- time-per-frame frame-time))))))))
 
 
-(define set-game-properties #f)
+(define set-game-properties! #f)
 (define get-game-properties #f)
 
 (let ((ptitle *title*) (pwidth *width-screen*) (pheight *height-screen*) (pbpp *bpp-screen*) (pfps *frames-per-second*) (pmode *mode*))
-  (set! set-game-properties
+  (set! set-game-properties!
        (lambda* (#:key title width height bpp fps mode)
 ;        (init-video-mode)
          (if title
 (define game-running? #f)
 (define set-game-code #f)
 
-(let ((running #f) (game-code #f) (mobs '()))
+(let ((running #f) (game-code #f))
   (set! game-loop
        (lambda ()
-         (set! mobs (get-active-mobs))
+         (refresh-active-mobs)
          (set! running #t)
          (quit! #f)
          (do () ((quit?))
                   (cond ((video-mode-on?)
                          (glClear (+ GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT))
                          (to-origin)))
-                  (cond ((mobs-changed?) (set! mobs (get-active-mobs))))
-                  (if (procedure? game-code) (game-code))
-                  (run-mob-actions mobs)
+                  (refresh-active-mobs)
+                  (if (procedure? game-code)
+                      (catch #t
+                             (lambda () (game-code))
+                             (lambda (key . args) #f)))
                   (cond ((video-mode-on?)
-                         (render-mobs mobs)
+                         (run-mobs)
                          (SDL_GL_SwapBuffers)))
                   (delay-frame))))
          (set! running #f)))