* 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
(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 ()
(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
set-entity!
set-entity-components!
remove-entity-components!
- with-engine)
+ with-engine
+ set-engine-systems!)
;;; Engine execution
(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