aboutsummaryrefslogtreecommitdiff
path: root/src/game.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.scm')
-rw-r--r--src/game.scm31
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")