From 81e6827836cc8162fcb0ca2b4f3fa81b189cf22f Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 4 Sep 2013 20:35:31 -0400 Subject: Prevent circular dependency by moving core game data structures to another module. --- 2d/private/game.scm | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 2d/private/game.scm (limited to '2d/private/game.scm') diff --git a/2d/private/game.scm b/2d/private/game.scm new file mode 100644 index 0000000..63f0bd1 --- /dev/null +++ b/2d/private/game.scm @@ -0,0 +1,87 @@ +;;; guile-2d +;;; Copyright (C) 2013 David Thompson +;;; +;;; Guile-2d is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU Lesser General Public License as +;;; published by the Free Software Foundation, either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; Guile-2d is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with this program. If not, see +;;; . + +;;; Commentary: +;; +;; Game data structure. +;; +;;; Code: + +(define-module (2d private game) + #:use-module (srfi srfi-9) + #:use-module (2d observer)) + +;;; +;;; Scenes +;;; + +(define-record-type + (%make-scene title observer update-proc draw-proc state) + scene? + (title scene-title) + (observer scene-observer) + (update-proc scene-update-proc) + (draw-proc scene-draw-proc) + (state scene-state)) + +(define (scene-trigger scene event-type . args) + "Trigger an event on the scene observer." + (apply observer-trigger + (scene-observer scene) + event-type + (scene-state scene) + args)) + +(define (scene-draw scene) + "Draw scene." + ((scene-draw-proc scene) (scene-state scene))) + +(define (scene-update scene) + "Update scene." + ((scene-update-proc scene) (scene-state scene))) + +(export + %make-scene + scene? + scene-title + scene-observer + scene-update-proc + scene-draw-proc + scene-state + scene-trigger + scene-update + scene-draw) + +;;; +;;; Games +;;; + +(define-record-type + (%make-game title resolution fullscreen first-scene) + game? + (title game-title) + (resolution game-resolution) + (fullscreen game-fullscreen?) + (first-scene game-first-scene)) + +(export + %make-game + game? + game-title + game-resolution + game-fullscreen? + game-first-scene) -- cgit v1.2.3