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