aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2026-05-20 11:25:55 +0100
committerGene Pasquet <dev@etenil.net>2026-05-20 11:25:55 +0100
commit2d35ff23b6a6eb7ce62cff57a5399022a14991f9 (patch)
treebd75614a1cd295df4e7c5a02494b2478e7cb56a5
parent0d1fa7064de988fb92059d10d77597b59ee7edd9 (diff)
Fix bug in engineHEADmain
-rw-r--r--BUGS.org6
-rw-r--r--TODO.org3
-rw-r--r--engine.scm52
3 files changed, 38 insertions, 23 deletions
diff --git a/BUGS.org b/BUGS.org
new file mode 100644
index 0000000..167a916
--- /dev/null
+++ b/BUGS.org
@@ -0,0 +1,6 @@
+#+AUTHOR: Gene Pasquet
+#+STARTUP:indent
+#+OPTIONS: num:nil toc:nil
+#+TITLE:ISSUE TRACKER
+
+* TODO Clear input state when starting engine
diff --git a/TODO.org b/TODO.org
new file mode 100644
index 0000000..479755a
--- /dev/null
+++ b/TODO.org
@@ -0,0 +1,3 @@
+* Stuff to do
+
+** TODO Support multiple tilesets for different entities in one tilemap
diff --git a/engine.scm b/engine.scm
index 957a0cd..5ebea8d 100644
--- a/engine.scm
+++ b/engine.scm
@@ -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