aboutsummaryrefslogtreecommitdiff
path: root/engine.scm
diff options
context:
space:
mode:
Diffstat (limited to 'engine.scm')
-rw-r--r--engine.scm25
1 files changed, 14 insertions, 11 deletions
diff --git a/engine.scm b/engine.scm
index 1d2c14f..e3a1fb0 100644
--- a/engine.scm
+++ b/engine.scm
@@ -133,16 +133,18 @@
(values (or (and state (state-hook state #:update)) (game-update-hook game))
(or (and state (state-hook state #:render)) (game-render-hook game)))))
-(define (update-camera-follow! game)
- (when (game-scene game)
- (let ((target-tag (scene-camera-target (game-scene game))))
- (when target-tag
- (let ((target (scene-find-tagged (game-scene game) target-tag)))
- (when target
- (camera-follow! (scene-camera (game-scene game))
- target
- (game-width game)
- (game-height game))))))))
+(define (update-camera-follow scene game)
+ (let ((target-tag (and scene (scene-camera-target scene))))
+ (if (not target-tag)
+ scene
+ (let ((target (scene-find-tagged scene target-tag)))
+ (if (not target)
+ scene
+ (update-scene scene
+ camera: (camera-follow (scene-camera scene)
+ target
+ (game-width game)
+ (game-height game))))))))
(define (game-render! game render-fn)
(renderer-set-clear-color! (game-renderer game) (game-scene game))
@@ -192,7 +194,8 @@
(unless (input-held? input 'quit)
(receive (update-fn render-fn) (resolve-hooks game)
(when update-fn (update-fn game dt))
- (update-camera-follow! game)
+ (when (game-scene game)
+ (game-scene-set! game (update-camera-follow (game-scene game) game)))
(game-render! game render-fn))
(sdl2:delay! (game-frame-delay game))
(loop now))))