]> git.jsancho.org Git - gacela.git/commitdiff
New way for returning results from systems
authorJavier Sancho <jsf@jsancho.org>
Tue, 14 Jan 2014 17:58:39 +0000 (18:58 +0100)
committerJavier Sancho <jsf@jsancho.org>
Tue, 14 Jan 2014 17:58:39 +0000 (18:58 +0100)
* src/system: New type entities-changes that encapsulates entities
              modifications. A system that only does I/O operations
              doesn't must to return an entities-changes object.

* src/examples/composing-systems.scm: Updated example

* src/examples/making-systems.scm: Updated example

src/examples/composing-systems.scm
src/examples/making-systems.scm
src/system.scm

index 7742b81ea1b655e43894f157ad8406a76dba0f21..ef6e1e0031b4e102bb7693dd51114712567ba738 100644 (file)
 
 (define-system s1 ((with-l (l)))
   (sleep 3)
-  (map
-   (lambda (e)
-     (set-entity-components (get-key e) `(l . ,(cons 1 (get-component 'l e)))))
-   with-l))
+  (entities-changes
+   (map (lambda (e)
+         (set-entity-components (get-key e) `(l . ,(cons 1 (get-component 'l e)))))
+       with-l)))
 
 (define-system s2 ((with-l (l)))
   (sleep 4)
-  (map
-   (lambda (e)
-     (set-entity-components (get-key e) `(l . ,(cons 2 (get-component 'l e)))))
-   with-l))
+  (entities-changes
+   (map (lambda (e)
+         (set-entity-components (get-key e) `(l . ,(cons 2 (get-component 'l e)))))
+       with-l)))
 
 (define (composing-with-join)
   (let ((entities '())
index c049a904bb2e1b3d8ea5fd9aaed4d16e1c54353a..545b7e7dd591dfa300c1361ad48175f68dfd4eeb 100644 (file)
 (define-component a x y)
 
 (define-system s1 ()
-  (list (new-entity (make-a 1 2))
-       (new-entity (make-a 10 20))))
+  (entities-changes
+   (list (new-entity (make-a 1 2))
+        (new-entity (make-a 10 20)))))
 
 (define-system s2 ((with-a (a)))
   (for-each
    (lambda (e)
      (format #t "Key: ~a  Component: ~a~%" (get-key e) (get-component 'a e)))
-   with-a)
-  '())
+   with-a))
   
 (define (making-systems)
   (let ((entities '())
index 9654cffbafdb4a059aedfc3f3ef33fc58a10b1b2..5a70cb5010e34f7db8c0905efd22cbc9b91794f3 100644 (file)
 
 ;;; Making systems
 
+(define-record-type entities-changes-type
+  (entities-changes changes)
+  entities-changes?
+  (changes get-entities-changes))
+
 (define* (find-entities-by-components c t)
   (cond ((null? t) '())
        (else
           (lambda* (#:optional (entities2 #f) (components2 #f))
             (let ((e (if (and entities2 components2) entities2 entities))
                   (c (if (and entities2 components2) components2 components)))
-              (modify-entities res e c)))))))))
+              (modify-entities (if (entities-changes? res) (get-entities-changes res) '()) e c)))))))))
 
 (define-syntax define-system
   (syntax-rules ()
        (else
         (apply join-systems systems))))
 
-(export find-entities-by-components
+(export entities-changes
+       entities-changes?
+       get-entities-changes
+       find-entities-by-components
        define-system
        make-system
        join-systems