From: Javier Sancho Date: Sun, 8 Dec 2013 06:11:34 +0000 (+0100) Subject: Set engine systems while running X-Git-Url: https://git.jsancho.org/?p=gacela.git;a=commitdiff_plain;h=c62dceb1471afb94efa57eef5506fbdf6f2ef679 Set engine systems while running * src/engine.scm: new function set-engine-systems! using engine mutex for avoiding concurrency errors * src/system.scm: new function group-systems, that returns joined systems or an empty system, depending on arguments --- diff --git a/src/engine.scm b/src/engine.scm index 4e311a0..33c8a6f 100644 --- a/src/engine.scm +++ b/src/engine.scm @@ -50,9 +50,7 @@ (list e c)) (make-mutex) (make-mutex) - (if (not (= (length systems) 1)) - (join-systems systems) - (car systems)))) + (apply group-systems systems))) (define-syntax define-engine (syntax-rules () @@ -122,6 +120,10 @@ (set-current-engine! old-engine) res))))) +(define (set-engine-systems! engine . systems) + (with-mutex (engine-mutex engine) + (set-engine-system! engine (apply group-systems systems)))) + (export current-engine set-current-engine! get-entity @@ -131,7 +133,8 @@ set-entity! set-entity-components! remove-entity-components! - with-engine) + with-engine + set-engine-systems!) ;;; Engine execution diff --git a/src/system.scm b/src/system.scm index 3d5cb2b..2bf0520 100644 --- a/src/system.scm +++ b/src/system.scm @@ -247,11 +247,20 @@ (receive (e2 c2) ((join-thread (car thd)) e c) (run-wait (cdr thd) e2 c2))))))) +(define (group-systems . systems) + (cond ((null? systems) + (make-system ())) + ((= (length systems) 1) + (car systems)) + (else + (join-systems systems)))) + (export find-entities-by-components define-system make-system join-systems - threaded-systems) + threaded-systems + group-systems) ;;; Entities and components access inside systems