aboutsummaryrefslogtreecommitdiff
path: root/src/game.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.scm')
-rw-r--r--src/game.scm62
1 files changed, 49 insertions, 13 deletions
diff --git a/src/game.scm b/src/game.scm
index 2e3f6ee..4206533 100644
--- a/src/game.scm
+++ b/src/game.scm
@@ -8,8 +8,9 @@
(srfi 12)
miscmacros
(prefix sdl2 "sdl2:")
- (prefix sdl2-ttf "ttf:")
+ (prefix sdl2-ttf "ttf:")
(prefix sdl2-image "img:")
+ matchable
tilemap)
(define +color-depth+ 32)
@@ -39,9 +40,9 @@
(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) '())))
+ 'centered 'centered
+ +screen-width+ +screen-height+
+ (if *fullscreen?* '(fullscreen) '())))
(define *renderer*
(handle-exceptions exn
@@ -59,9 +60,9 @@
(define *level* (load-tilemap "assets/level-0.tmx"))
(define *level-tileset-texture* (sdl2:create-texture-from-surface *renderer* (tileset-image (tilemap-tileset *level*))))
-(define (draw-tile target tileset tile-id row-num col-num)
+(define (draw-tile renderer tileset tile-id row-num col-num)
(let ((tile (tileset-tile tileset tile-id)))
- (sdl2:render-copy! *renderer* *level-tileset-texture*
+ (sdl2:render-copy! renderer *level-tileset-texture*
(tile-rect tile)
(sdl2:make-rect (* col-num (tileset-tileheight tileset))
(* row-num (tileset-tilewidth tileset))
@@ -75,37 +76,72 @@
(iota (length (car rows))))
(draw-tilemap-rows draw-fn (cdr rows) (+ row-num 1))))
-(define (draw-tilemap target tilemap)
- (let ((map-layer (layer-map (list-ref (tilemap-layers tilemap) 0)))
+(define (draw-tilemap renderer tilemap)
+ (let ((map-layer (layer-map (car (tilemap-layers tilemap))))
(tileset (tilemap-tileset tilemap)))
(draw-tilemap-rows
- (lambda (tile-id row-num col-num) (draw-tile target tileset tile-id row-num col-num))
+ (lambda (tile-id row-num col-num) (draw-tile renderer tileset tile-id row-num col-num))
map-layer
0)))
+(define (draw-objects renderer tilemap)
+ (let ((objects (tilemap-objects tilemap))
+ (tileset (tilemap-tileset tilemap)))
+ (for-each
+ (cut draw-object renderer tileset <>)
+ objects)))
+
+(define (draw-object renderer tileset object)
+ (match (object-type object)
+ ("Player" (draw-player renderer tileset object))
+ ("Text" (draw-text renderer tileset object))
+ ("Enemy" (draw-enemy renderer tileset object))
+ (_ #f)))
+
+(define (draw-player renderer tileset object)
+ (let ((col-num (inexact->exact (floor (/ (object-x object) (tileset-tilewidth tileset)))))
+ (row-num (inexact->exact (floor (/ (object-y object) (tileset-tileheight tileset))))))
+ (draw-tile renderer tileset 29 row-num col-num)))
+
+(define (draw-text renderer tileset object)
+ (let* ((text (cdr (assoc "text" (object-properties object))))
+ (text-texture (sdl2:create-texture-from-surface renderer
+ (ttf:render-text-solid *font* text *text-color*))))
+ (sdl2:render-copy! renderer text-texture #f (sdl2:make-rect
+ (inexact->exact (floor (object-x object)))
+ (inexact->exact (floor (object-y object)))
+ (inexact->exact (floor (object-width object)))
+ (inexact->exact (floor (object-height object)))))))
+
+(define (draw-enemy renderer tileset object)
+ (let ((col-num (inexact->exact (floor (/ (object-x object) (tileset-tilewidth tileset)))))
+ (row-num (inexact->exact (floor (/ (object-y object) (tileset-tileheight tileset))))))
+ (draw-tile renderer tileset 111 row-num col-num)))
+
(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:render-clear! *renderer*)
(sdl2:pump-events!)
(while (sdl2:has-events?)
(let ((event (sdl2:make-event)))
(sdl2:poll-event! event)
- (pp 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!))))
(draw-tilemap *renderer* *level*)
-
+
+ (draw-objects *renderer* *level*)
+
(sdl2:render-present! *renderer*)
(sdl2:delay! 10)))
(sdl2:joystick-close *joystick*)
(format #t "Bye!\n")
-