diff options
Diffstat (limited to 'engine.scm')
| -rw-r--r-- | engine.scm | 52 |
1 files changed, 29 insertions, 23 deletions
@@ -191,6 +191,9 @@ (ttf:init!) (img:init! '(png)) + ;; Reset the input state on startup + (game-input-set! game (create-input-state (game-input-config game))) + (let init-controllers ((i 0)) (when (< i (sdl2:num-joysticks)) (when (sdl2:is-game-controller? i) @@ -221,33 +224,36 @@ (collect-sdl-events) (game-input-config game)))) (game-input-set! game input) - (unless (input-held? input 'quit) - (let ((scene (game-scene game))) - (when scene - (let ((eu (scene-engine-update scene))) - ;; engine-update dispatch: - ;; #f → run default-engine-update (implicit opt-in) - ;; 'none → run no engine update at all (explicit opt-out) - ;; <proc> → run the user procedure - (cond - ((eq? eu 'none)) - ((procedure? eu) (eu game dt)) - ((not eu) (default-engine-update game dt)) - (else - (error "engine-update must be #f, 'none, or a procedure" eu)))))) - (receive (update-fn render-fn) (resolve-hooks game) - (when update-fn (update-fn game dt)) - (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))))) + (if (input-held? input 'quit) + #f + (begin + (let ((scene (game-scene game))) + (when scene + (let ((eu (scene-engine-update scene))) + ;; engine-update dispatch: + ;; #f → run default-engine-update (implicit opt-in) + ;; 'none → run no engine update at all (explicit opt-out) + ;; <proc> → run the user procedure + (cond + ((eq? eu 'none)) + ((procedure? eu) (eu game dt)) + ((not eu) (default-engine-update game dt)) + (else + (error "engine-update must be #f, 'none, or a procedure" eu)))))) + (receive (update-fn render-fn) (resolve-hooks game) + (when update-fn (update-fn game dt)) + (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)) + #t)))) (define (game-run! game) (game-prep! game) (let loop ((last-ticks (sdl2:get-ticks))) (let ((now (sdl2:get-ticks))) - (game-step! game (- now last-ticks)) - (loop now)))) - (game-cleanup! game) + (when (game-step! game (- now last-ticks)) + (loop now)))) + (game-cleanup! game)) ) ;; end module |
