]> git.jsancho.org Git - gacela.git/blobdiff - src/engine.scm
Do step duration properly
[gacela.git] / src / engine.scm
index 2e3cbd32c1815358bef76f51890d122b96ab6d5f..3d05c9c4ce67037c6014a27b532f2b05802494a9 100644 (file)
@@ -16,6 +16,7 @@
 
 
 (define-module (gacela engine)
+  #:use-module (gacela misc)
   #:use-module (gacela system)
   #:use-module (ice-9 receive)
   #:use-module (ice-9 threads)
 
 ;;; Engine Inner Properties
 
-(define (default-delay) 0.1)
+(define (default-step) 0.1)
 
 (define (default-engine-inner-properties)
-  `(engine-inner-properties (delay . ,(default-delay))))
+  `(engine-inner-properties (step . ,(default-step))))
 
 
 ;;; Engine definitions
   (cond ((not (engine-running? engine))
         (with-mutex (engine-running-mutex engine)
           (let loop ()
-            (let ((delay 0))
+            (let ((t (current-utime))
+                  (delay 0))
               (with-engine engine
                 (receive (e c) ((apply (engine-system engine) (engine-entities engine)))
                   (set-engine-entities! engine (list e c)))
-                (set! delay (get-property '(engine-inner-properties delay))))
-              (usleep (inexact->exact (* delay 1000000))))
+                (set! delay (- (inexact->exact (* (get-property '(engine-inner-properties step)) 1000000))
+                               (- (current-utime) t))))
+              (cond ((> delay 0)
+                     (usleep delay))))
             (if (not (engine-stopping? engine #:clean #t))
                 (loop)))))))