diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-04-08 01:32:55 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-04-08 01:32:55 +0100 |
| commit | 84840ede6646ed793b61cdd889d3f57ab05e9311 (patch) | |
| tree | 2b62dd73a7321bc71a368b297ab40b3535bd79fc /engine.scm | |
| parent | 7903180321bf72b344077a8423930ac161872a2c (diff) | |
Refactor to be functional
Diffstat (limited to 'engine.scm')
| -rw-r--r-- | engine.scm | 25 |
1 files changed, 14 insertions, 11 deletions
@@ -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)))) |
