diff options
Diffstat (limited to 'src/game.scm')
| -rw-r--r-- | src/game.scm | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/game.scm b/src/game.scm index c4e1356..d22263b 100644 --- a/src/game.scm +++ b/src/game.scm @@ -12,7 +12,8 @@ (prefix sdl2-image "img:") matchable tilemap - defstruct) + defstruct + input) (define +color-depth+ 32) (define +screen-width+ 600) @@ -60,6 +61,7 @@ #f)) (define *level* (load-tilemap "assets/level-0.tmx")) (define *level-tileset-texture* (sdl2:create-texture-from-surface *renderer* (tileset-image (tilemap-tileset *level*)))) +(define *input* (create-input-state)) (define (draw-tile renderer tileset tile-id row-num col-num) (let ((tile (tileset-tile tileset tile-id))) @@ -154,22 +156,29 @@ (set! (sdl2:render-draw-color *renderer*) +background-color+) (sdl2:render-clear! *renderer*) (sdl2:pump-events!) - (while (sdl2:has-events?) - (let ((event (sdl2:make-event))) - (sdl2:poll-event! event) - ;; (pp event) - (when (sdl2:keyboard-event? event) - (keymap-process-input! event (sdl2:event-type event)) - ;; (exit-main-loop!) - ))) + ;; Collect this frame's events (input-state-update! expects a list) + (let ((events-this-frame + (let collect ((lst '())) + (if (not (sdl2:has-events?)) + (reverse lst) + (let ((e (sdl2:make-event))) + (sdl2:poll-event! e) + (collect (cons e lst))))))) + (input-state-update! *input* events-this-frame) + ;; Check for escape to exit + (for-each (lambda (event) + (when (and (sdl2:keyboard-event? event) + (eq? (sdl2:event-type event) 'key-down) + (eq? (sdl2:keyboard-event-sym event) 'escape)) + (exit-main-loop!))) + events-this-frame)) (draw-tilemap *renderer* *level*) - (draw-objects *renderer* *level*) (sdl2:render-present! *renderer*) (sdl2:delay! 10))) -(sdl2:joystick-close *joystick*) +(when *joystick* (sdl2:joystick-close *joystick*)) (format #t "Bye!\n") |
