(register-components key
(map (lambda (c) (car c)) nc)
components)
- key))))
+ (cons key nc)))))
(define (remove-entity key)
(lambda (entities components)
- (let ((clist (map (lambda (c) (car c)) (assoc-ref entities key))))
+ (let ((clist (map (lambda (c) (car c)) (assoc-ref entities key)))
+ (entity (assoc key entities)))
(values
(assoc-remove! entities key)
- (unregister-components key clist components)))))
+ (unregister-components key clist components)
+ entity))))
(define (set-entity key . new-components)
(lambda (entities components)
(values
(assoc-set! entities key nc)
(register-components key (lset-difference eq? nclist clist)
- (unregister-components key (lset-difference eq? clist nclist) components))))))
+ (unregister-components key (lset-difference eq? clist nclist) components))
+ (cons key nc)))))
(define (set-entity-components key . new-components)
(lambda (entities components)
nc)
(values
(assoc-set! entities key clist)
- (register-components key (map (lambda (c) (car c)) nc) components)))))
+ (register-components key (map (lambda (c) (car c)) nc) components)
+ (cons key clist)))))
(define (remove-entity-components key . old-components)
(lambda (entities components)
old-components)
(values
(assoc-set! entities key clist)
- (unregister-components key old-components components)))))
+ (unregister-components key old-components components)
+ (cons key clist)))))
(define (modify-entities changes entities components)
(cond ((null? changes)
(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