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
29 (make-entity-record id components)
32 (components entity-components set-entity-components!))
34 (set-record-type-printer! entity
36 (format port "#<[entity ~a] ~a>"
38 (entity-components record))))
40 (define (make-entity . components)
52 (define-record-type game
53 (make-game-record name entities)
55 (name game-name set-game-name!)
56 (entities game-entities set-game-entities!))
58 (set-record-type-printer! game
60 (format port "#<[Game: ~a] ~a>"
64 (cdr (vhash-assoc id (game-entities record))))
66 (lambda (key value result)
67 (lset-union eqv? (list key) result))
69 (game-entities record))))))
71 (define (make-game name . entities)
75 (map (lambda (e) (cons (entity-id e) e))
82 ;;; Working with games
84 (define (add-entity game entity)