diff options
author | David Thompson <dthompson2@worcester.edu> | 2013-11-03 17:59:18 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2013-11-03 17:59:18 -0500 |
commit | 5ea47905046917ae79dde3155cd78268479c48fc (patch) | |
tree | b7dcf216706fd7444897e64e8d8d6c65d25cef84 /2d/scene.scm | |
parent | 9ea9f27d90ed55f730f2ef95d26f54542f1ac6bd (diff) |
Add event observer to scene.
Some convenient default events are provided to make quitting the game
easy for new developers.
Diffstat (limited to '2d/scene.scm')
-rw-r--r-- | 2d/scene.scm | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/2d/scene.scm b/2d/scene.scm index 076897a..7415f80 100644 --- a/2d/scene.scm +++ b/2d/scene.scm @@ -23,6 +23,7 @@ (define-module (2d scene) #:use-module (srfi srfi-9) + #:use-module (2d observer) #:export (<scene> make-scene scene? @@ -32,23 +33,28 @@ scene-exit scene-draw scene-update + scene-observer init-scene enter-scene exit-scene draw-scene - update-scene)) + update-scene + scene-trigger + default-events)) (define-record-type <scene> - (%make-scene name init enter exit draw update) + (%make-scene name init enter exit draw update observer) scene? (name scene-name) (init scene-init) (enter scene-enter) (exit scene-exit) (draw scene-draw) - (update scene-update)) + (update scene-update) + (observer scene-observer)) (define no-op (lambda args #f)) +(define default-events (make-parameter '())) (define* (make-scene name #:optional #:key @@ -56,9 +62,11 @@ (enter no-op) (exit no-op) (draw no-op) - (update no-op)) + (update no-op) + (events (default-events))) "Create a new scene object. All callbacks default to a no-op." - (%make-scene name init enter exit draw update)) + (%make-scene name init enter exit draw update + (alist->observer events))) (define (init-scene scene) "Return the value returned by the state constructor thunk for @@ -80,3 +88,6 @@ SCENE." (define (update-scene scene state) "Call the update callback for SCENE with STATE." ((scene-update scene) state)) + +(define (scene-trigger scene event . args) + (apply observer-trigger (scene-observer scene) event args)) |