diff options
author | David Thompson <dthompson2@worcester.edu> | 2014-09-29 20:22:06 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2014-09-29 20:22:06 -0400 |
commit | 31502b3bfb4c691e522634a48bf60364327de3ae (patch) | |
tree | 965c69256184caecfab5c656d786f3e7b431032d /sly/game.scm | |
parent | 3f0a5732c8d4be45f10af9579e4eca334e8deb55 (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.scm | 19 |
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 |