summaryrefslogtreecommitdiff
path: root/sly/game.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2014-09-29 20:22:06 -0400
committerDavid Thompson <dthompson2@worcester.edu>2014-09-29 20:22:06 -0400
commit31502b3bfb4c691e522634a48bf60364327de3ae (patch)
tree965c69256184caecfab5c656d786f3e7b431032d /sly/game.scm
parent3f0a5732c8d4be45f10af9579e4eca334e8deb55 (diff)
scene: Decouple cameras from the scene they render.
* sly/camera.scm (make-camera, orthographic-camera): Remove 'scene' parameter. (draw-camera): Delete. (call-with-camera): New procedure. * sly/game.scm (start-game-loop): Replace 'camera' parameter with 'scene'. * sly/scene.scm (make-scene, scene?, update-scene, draw-scene): New procedures. (scene-root): Replace.
Diffstat (limited to 'sly/game.scm')
-rw-r--r--sly/game.scm19
1 files changed, 9 insertions, 10 deletions
diff --git a/sly/game.scm b/sly/game.scm
index 3f00bf3..67398de 100644
--- a/sly/game.scm
+++ b/sly/game.scm
@@ -62,7 +62,7 @@ for the given STACK and error KEY with additional arguments ARGS."
(apply display-error (stack-ref stack 0) cep args)
(newline cep)))
-(define* (start-game-loop camera
+(define* (start-game-loop scene
#:optional #:key
(frame-rate 60)
(tick-rate 60)
@@ -85,10 +85,10 @@ unresponsive and possibly crashing."
(let ((size (signal-ref window-size)))
(gl-viewport 0 0 (vx size) (vy size)))
(gl-clear (clear-buffer-mask color-buffer depth-buffer))
- (signal-let ((camera camera))
- (if (list? camera)
- (for-each (cut draw-camera <> alpha) camera)
- (draw-camera camera alpha)))
+ (signal-let ((scene scene))
+ (if (list? scene)
+ (for-each (cut draw-scene <> alpha) scene)
+ (draw-scene scene alpha)))
(SDL:gl-swap-buffers))
(define (update lag)
@@ -99,11 +99,10 @@ unused accumulator time."
(cond ((>= ticks max-ticks-per-frame)
lag)
((>= lag tick-interval)
- (signal-let ((camera camera))
- (if (list? camera)
- (for-each (cut update-scene-node <>)
- (delete-duplicates (map camera-scene camera) eq?))
- (update-scene-node (camera-scene camera))))
+ (signal-let ((scene scene))
+ (if (list? scene)
+ (for-each (cut update-scene <>) scene)
+ (update-scene scene)))
(tick-agenda!)
(iter (- lag tick-interval) (1+ ticks)))
(else