1 ;;; Gacela, a GNU Guile extension for fast games development
2 ;;; Copyright (C) 2014 by Javier Sancho Fernandez <jsf at jsancho dot org>
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.
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.
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/>.
18 (define-module (gacela game)
19 #:use-module (gacela engine)
20 #:use-module (ice-9 vlist)
21 #:use-module (srfi srfi-1)
22 #:use-module (srfi srfi-9)
23 #:use-module (srfi srfi-9 gnu))
26 ;;; Working with entities
28 (define-record-type entity-type
29 (make-entity-record id components)
32 (game entity-game set-entity-game!)
33 (components entity-components set-entity-components!))
35 (set-record-type-printer! entity
37 (format port "#<[entity ~a] ~a>"
39 (entity-components record))))
41 (define (entity . components)
54 (define-record-type game-type
55 (make-game-record name entities)
57 (name game-name set-game-name!)
58 (entities game-entities set-game-entities!))
60 (set-record-type-printer! game
62 (format port "#<[Game: ~a] ~a>"
66 (cdr (vhash-assoc id (game-entities record))))
68 (lambda (key value result)
69 (lset-union eqv? (list key) result))
71 (game-entities record))))))
73 (define (game name . entities)
77 (map (lambda (e) (cons (entity-id e) e))
84 ;;; Working with games
86 (define (add-entity game entity)