Pack and parse wall data from map files.
This commit is contained in:
parent
3a3f4e31a1
commit
f3ad31d244
5 changed files with 61 additions and 30 deletions
|
@ -1,5 +1,6 @@
|
|||
(define-module (game actors)
|
||||
#:use-module (goblins core)
|
||||
#:use-module (hoot bytevectors)
|
||||
#:use-module (ice-9 match)
|
||||
#:export (^cell
|
||||
^level))
|
||||
|
@ -67,7 +68,7 @@
|
|||
(('wire-state) #f)
|
||||
(('describe) '(player))))
|
||||
|
||||
(define (^level bcom width height)
|
||||
(define (^level bcom width height objects)
|
||||
(define player (spawn ^player))
|
||||
(define player-coords (spawn ^cell))
|
||||
(define (make-grid)
|
||||
|
@ -176,9 +177,19 @@
|
|||
;; TODO: actually write levels
|
||||
(warp-player 10 8)
|
||||
|
||||
($ (grid-ref grid 3 7) (spawn ^exit))
|
||||
;; Parsed packed object data and spawn objects.
|
||||
(let ((len (bytevector-length objects)))
|
||||
(let lp ((i 0))
|
||||
(when (< i len)
|
||||
(let ((x (bytevector-u8-ref objects i))
|
||||
(y (bytevector-u8-ref objects (+ i 1)))
|
||||
(obj (match (bytevector-u8-ref objects (+ i 2))
|
||||
(1 (spawn ^wall 'brick))
|
||||
(id (error "invalid level object" id)))))
|
||||
($ (grid-ref grid x y) obj))
|
||||
(lp (+ i 3)))))
|
||||
|
||||
($ (grid-ref grid 4 4) (spawn ^wall 'brick))
|
||||
($ (grid-ref grid 3 7) (spawn ^exit))
|
||||
|
||||
($ (grid-ref grid 4 3) (spawn ^clock-emitter 3))
|
||||
($ (grid-ref grid 5 3) (spawn ^wall 'copper))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue