Add start of tiled map compilation for levels.
This commit is contained in:
parent
ebd57bae3a
commit
3a3f4e31a1
12 changed files with 664 additions and 15 deletions
40
game.scm
40
game.scm
|
@ -26,8 +26,10 @@
|
|||
(dom media)
|
||||
(dom window)
|
||||
(game actors)
|
||||
(game levels level-1)
|
||||
(game tileset)
|
||||
(goblins core)
|
||||
(hoot bytevectors)
|
||||
(hoot ffi)
|
||||
(hoot hashtables)
|
||||
(ice-9 match)
|
||||
|
@ -52,7 +54,14 @@
|
|||
320 240
|
||||
(inexact->exact tile-width)
|
||||
(inexact->exact tile-height)))
|
||||
(define audio:bump (make-audio "assets/sounds/bump.wav"))
|
||||
(define* (load-sound-effect name #:key (volume 0.5))
|
||||
(let ((audio (make-audio (string-append "assets/sounds/" name ".wav"))))
|
||||
(set-media-volume! audio volume)
|
||||
audio))
|
||||
(define audio:bump (load-sound-effect "bump"))
|
||||
(define audio:push (load-sound-effect "push"))
|
||||
(define audio:undo (load-sound-effect "undo"))
|
||||
(define audio:no (load-sound-effect "no"))
|
||||
|
||||
;; Game state
|
||||
(define *actormap* (make-whactormap))
|
||||
|
@ -64,6 +73,8 @@
|
|||
(define *level* #f)
|
||||
;; Latest representation of all actors in level
|
||||
(define *grid* #f)
|
||||
;; Background tile layer.
|
||||
(define *background* #f)
|
||||
|
||||
(define *snapshots* '())
|
||||
(define (clear-snapshots!)
|
||||
|
@ -72,10 +83,11 @@
|
|||
(set! *snapshots* (cons (copy-whactormap *actormap*) *snapshots*)))
|
||||
(define (rollback-snapshot!)
|
||||
(match *snapshots*
|
||||
(() #f)
|
||||
(() (media-play audio:no))
|
||||
((snapshot . older-snapshots)
|
||||
(set! *actormap* snapshot)
|
||||
(set! *snapshots* older-snapshots))))
|
||||
(set! *snapshots* older-snapshots)
|
||||
(media-play audio:undo))))
|
||||
|
||||
(define (update-grid!)
|
||||
(set! *grid* ($ *level* 'describe)))
|
||||
|
@ -84,7 +96,10 @@
|
|||
(set! *actormap* (make-whactormap))
|
||||
(clear-snapshots!)
|
||||
(with-goblins
|
||||
(set! *level* (spawn ^level level-width level-height))
|
||||
(call-with-values load-level-1
|
||||
(lambda (background level)
|
||||
(set! *background* background)
|
||||
(set! *level* level)))
|
||||
(update-grid!)))
|
||||
|
||||
;; Update loop
|
||||
|
@ -92,7 +107,8 @@
|
|||
(save-snapshot!)
|
||||
(with-goblins
|
||||
(match ($ *level* 'move-player dir)
|
||||
(#f (media-play audio:bump))
|
||||
('bump (media-play audio:bump))
|
||||
('push (media-play audio:push))
|
||||
(_ #f))
|
||||
(update-grid!)))
|
||||
|
||||
|
@ -154,7 +170,19 @@
|
|||
(('block type) (draw-block type x y))
|
||||
(('clock-emitter) (draw-clock-emitter x y))))))
|
||||
|
||||
(define (draw-background)
|
||||
(let* ((bv *background*)
|
||||
(len (bytevector-length bv)))
|
||||
(let lp ((i 0))
|
||||
(when (< i len)
|
||||
(let ((x (bytevector-ieee-single-native-ref bv i))
|
||||
(y (bytevector-ieee-single-native-ref bv (+ i 4)))
|
||||
(idx (bytevector-s16-native-ref bv (+ i 8))))
|
||||
(draw-tile context tileset idx x y)
|
||||
(lp (+ i 10)))))))
|
||||
|
||||
(define (draw-level)
|
||||
(draw-background)
|
||||
(let ((grid *grid*))
|
||||
(let y-loop ((y 0))
|
||||
(when (< y level-height)
|
||||
|
@ -166,8 +194,6 @@
|
|||
|
||||
(define (draw prev-time)
|
||||
(clear-rect context 0.0 0.0 *canvas-width* *canvas-height*)
|
||||
(set-fill-color! context "#cbdbfc")
|
||||
(fill-rect context 0.0 0.0 *canvas-width* *canvas-height*)
|
||||
(set-transform! context 1.0 0.0 0.0 1.0 0.0 0.0)
|
||||
(set-scale! context *canvas-scale* *canvas-scale*)
|
||||
(draw-level)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue