diff options
Diffstat (limited to 'src/game.scm')
| -rw-r--r-- | src/game.scm | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/game.scm b/src/game.scm new file mode 100644 index 0000000..1e9da8b --- /dev/null +++ b/src/game.scm @@ -0,0 +1,82 @@ +(import scheme + (chicken base) + (chicken format) + (chicken process-context) + (chicken condition) + (chicken pretty-print) + (srfi 1) + miscmacros + (prefix sdl2 "sdl2:") + (prefix sdl2-ttf "ttf:") + (prefix sdl2-image "img:") + tilemap) + +(define +color-depth+ 32) +(define +screen-width+ 600) +(define +screen-height+ 400) +(define *fullscreen?* #f) +(define +background-color+ (sdl2:make-color 0 0 0)) +(define +software-mode?+ (member "--software" (command-line-arguments))) +(define +vsync?+ (member "--vsync" (command-line-arguments))) + +(sdl2:set-main-ready!) +(sdl2:init! '(video joystick)) +(ttf:init!) +(img:init! '(png)) + +(on-exit sdl2:quit!) + +;; Install a custom exception handler that will call quit! and then +;; call the original exception handler. This ensures that quit! will +;; be called even if an unhandled exception reaches the top level. +(current-exception-handler + (let ((original-handler (current-exception-handler))) + (lambda (exception) + (sdl2:quit!) + (original-handler exception)))) + +(if (and +vsync?+ (not +software-mode?+)) ; vsync doesn't work with software rendering + (sdl2:set-hint! 'render-vsync "1")) +(define *window* (sdl2:create-window! "MacroKnight" + 'centered 'centered + +screen-width+ +screen-height+ + (if *fullscreen?* '(fullscreen) '()))) +(define *renderer* (sdl2:create-renderer! *window* -1 + (if +software-mode?+ '(software) '(accelerated)))) + +(define *font* (ttf:open-font "DejaVuSans.ttf" 12)) +(define *text-color* (sdl2:make-color 255 255 255)) +(pp (sdl2:num-joysticks)) +(define *joystick* (if (> (sdl2:num-joysticks) 0) + (sdl2:joystick-open! 0) + #f)) +(define *level* (load-tilemap "assets/level-0.tmx")) + +(define (draw-tile target tileset tile-id) + 123) + +(set! (sdl2:render-draw-color *renderer*) +background-color+) +(sdl2:render-clear! *renderer*) + +(let/cc exit-main-loop! + (while #t + (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 (and (sdl2:keyboard-event? event) + (eq? (sdl2:event-type event) 'key-down) + (eq? (sdl2:keyboard-event-sym event) 'escape)) + (exit-main-loop!)))) + + (sdl2:render-present! *renderer*) + + (sdl2:delay! 10))) + +(sdl2:joystick-close *joystick*) + +(format #t "Bye!\n") + |
