]> git.jsancho.org Git - gacela.git/blob - src/test.scm
More verbose mode for working with entities and components; assoc
[gacela.git] / src / test.scm
1 ;;; Gacela, a GNU Guile extension for fast games development
2 ;;; Copyright (C) 2013 by Javier Sancho Fernandez <jsf at jsancho dot org>
3 ;;;
4 ;;; This program is free software: you can redistribute it and/or modify
5 ;;; it under the terms of the GNU General Public License as published by
6 ;;; the Free Software Foundation, either version 3 of the License, or
7 ;;; (at your option) any later version.
8 ;;;
9 ;;; This program is distributed in the hope that it will be useful,
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 ;;; GNU General Public License for more details.
13 ;;;
14 ;;; You should have received a copy of the GNU General Public License
15 ;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17
18 (define-module (gacela test)
19   #:use-module (gacela system)
20   #:use-module (ice-9 receive))
21
22
23 (define-component a x y)
24 (define-component b)
25 (define-component c)
26
27 (export-component a)
28
29 (define (test1)
30   (let ((entities '())
31         (components '())
32         (key #f))
33     (receive (e c k) ((new-entity (make-a 1 2) (make-b)) entities components)
34       (set! entities e)
35       (set! components c)
36       (set! key k)
37       (display k) (newline))
38     (format #t "New entity with a and b:~%~a~%~a~%~%" entities components)
39
40     (receive (e c k) ((new-entity (make-a 10 20)) entities components)
41       (set! entities e)
42       (set! components c)
43       (display k) (newline))
44     (format #t "New entity with a:~%~a~%~a~%~%" entities components)
45
46     (receive (e c) (modify-entities (list (set-entity-components key (make-a 50 50)) (remove-entity-components key 'b)) entities components)
47       (set! entities e)
48       (set! components c))
49     (format #t "First entity removes b and changes a:~%~a~%~a~%~%" entities components)
50
51     (receive (e c) ((remove-entity key) entities components)
52       (set! entities e)
53       (set! components c))
54     (format #t "Removes first entity:~%~a~%~a~%~%" entities components)
55
56     (receive (e c k) ((new-entity (make-a 1 2) (make-b)) entities components)
57       (set! entities e)
58       (set! components c)
59       (set! key k)
60       (display k) (newline))
61     (format #t "New entity with a and b:~%~a~%~a~%~%" entities components)
62
63     (receive (e c) (modify-entities (list (set-entity-components key (make-a 50 50)) (remove-entity-components key 'b) (new-entity (make-a 1000 1000))) entities components)
64       (set! entities e)
65       (set! components c))
66     (format #t "Last entity removes b and changes a, and new entity with a:~%~a~%~a~%~%" entities components)
67
68     (receive (e c) (modify-entities (list (remove-entity key)) entities components)
69       (set! entities e)
70       (set! components c))
71     (format #t "Remove last entity:~%~a~%~a~%~%" entities components)
72 ))
73
74 (export test1)
75
76
77 (define (test2)
78   (let ((entities '())
79         (components '()))
80     (receive (e c) (((make-system '() (lambda (e) (list (new-entity (make-a 1 2)) (new-entity (make-a 10 20))))) entities components))
81              (set! entities e)
82              (set! components c))
83     (format #t "Two new entities with a:~%~a~%~a~%~%" entities components)
84
85     (((make-system '(a) (lambda (e) (display e) (newline) '())) entities components))
86 ))
87
88 (export test2)
89
90
91 (define (test3)
92   (let ((entities '())
93         (components '())
94         (s1 (make-system '(l)
95               (lambda (e)
96                 (map
97                  (lambda (e1)
98                    `(,(car e1) . ((l . (cons 1 (cdr e1)))))
99                  e)))))
100         (s2 (make-system '(l)
101               (lambda (e)
102                 (map
103                  (lambda (e1)
104                    `(,(car e1) . ((l . (cons 2 (cdr e1))))))
105                  e)))))
106     (receive (e c) (set-entities `((#f . ((l . ()))) (#f . ((l . ())))) entities components)
107       ((join-systems s1 s2) e c))))
108
109 (export test3)
110
111
112 (define (test4)
113   (let ((f1 (lambda (e c) (sleep 3) (lambda (e2 c2) (values (+ 1 e2) c2))))
114         (f2 (lambda (e c) (sleep 4) (lambda (e2 c2) (values e2 (+ 10 c2))))))
115     (let ((t (current-time)))
116       (receive (e c) ((join-systems f1 f2) 2 2) (format #t "~a~%~a~%" e c))
117       (display (- (current-time) t)) (newline) (newline))
118     (let ((t (current-time)))
119       (receive (e c) ((threaded-systems f1 f2) 2 2) (format #t "~a~%~a~%" e c))
120       (display (- (current-time) t)) (newline) (newline))))
121
122 (export test4)