X-Git-Url: https://git.jsancho.org/?p=gacela.git;a=blobdiff_plain;f=src%2Fengine.scm;h=3d05c9c4ce67037c6014a27b532f2b05802494a9;hp=2e3cbd32c1815358bef76f51890d122b96ab6d5f;hb=8864bc71fcf9fd551bdb417a1b22655a9097dd30;hpb=4a9300c98ab89c99a26887b08e3a1c5bea41eb77 diff --git a/src/engine.scm b/src/engine.scm index 2e3cbd3..3d05c9c 100644 --- a/src/engine.scm +++ b/src/engine.scm @@ -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) @@ -56,10 +57,10 @@ ;;; 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 @@ -175,12 +176,15 @@ (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)))))))