Add top-level layer, renders above player

This commit is contained in:
Jaidyn Ann 2023-06-24 14:13:01 -05:00
parent 346d9d3a9d
commit b4cde1ea16
2 changed files with 12 additions and 7 deletions

View File

@ -168,18 +168,19 @@ Returns parameters to be used in the next invocation of OVERWORLD-STATE."
"Draw the overworld map to the given matrix. "Draw the overworld map to the given matrix.
A core part of OVERWORLD-STATE." A core part of OVERWORLD-STATE."
(let* ((chunk (world-coords-chunk (getf-entity-data map 'player :coords)))) (let* ((chunk (world-coords-chunk (getf-entity-data map 'player :coords))))
(matrix-write-map-chunk matrix map chunk) (matrix-write-tiles matrix (gethash :tiles map) chunk)
(matrix-write-entities matrix map chunk))) (matrix-write-entities matrix map chunk)
(matrix-write-tiles matrix (gethash :top-tiles map) chunk)))
(defun matrix-write-map-chunk (matrix map chunk (defun matrix-write-tiles (matrix tiles chunk
&key (chunk-width 72) (chunk-height 20)) &key (chunk-width 72) (chunk-height 20))
"Draw a maps specific chunk (by its ID) to the matrix." "Draw a maps specific chunk (by its ID) to the matrix."
(mapcar (lambda (cell) (mapcar (lambda (cell)
(if (or (not (getf cell :lang)) (if (or (not (getf cell :lang))
(eq (getf cell :lang) (:system-language))) (eq (getf cell :lang) (:system-language)))
(matrix-write-cell matrix cell))) (matrix-write-cell matrix cell)))
(cdr (assoc chunk (gethash :tiles map))))) (cdr (assoc chunk tiles))))
(defun matrix-write-cell (matrix cell) (defun matrix-write-cell (matrix cell)
@ -194,7 +195,7 @@ alist containing a character (:CHAR) and :X & :Y coordinates."
;;; ——————————————————————————————————— ;;; ———————————————————————————————————
;;; Overworld-drawing: Entity-rendering ;;; Overworld-drawing: Person-rendering
;;; ——————————————————————————————————— ;;; ———————————————————————————————————
(defun matrix-write-entities (matrix map chunk) (defun matrix-write-entities (matrix map chunk)
"Draw all entities from an alist of entities to the matrix." "Draw all entities from an alist of entities to the matrix."

View File

@ -148,6 +148,7 @@ with 15 characters-per-line."
:TILES, an alist of visible tiles (keyed by chunk). :TILES, an alist of visible tiles (keyed by chunk).
:ENTITIES, a list of entity plists." :ENTITIES, a list of entity plists."
(let ((tile-chunks '()) (let ((tile-chunks '())
(top-tiles '())
(bump-map '()) (bump-map '())
(entities '()) (entities '())
(hash (make-hash-table))) (hash (make-hash-table)))
@ -157,11 +158,14 @@ with 15 characters-per-line."
;; Add to the bump-map if the layer is colliding ;; Add to the bump-map if the layer is colliding
(when (gethash "colliding" (cl-tiled:properties layer)) (when (gethash "colliding" (cl-tiled:properties layer))
(setf bump-map (tile-layer-chunks layer bump-map))) (setf bump-map (tile-layer-chunks layer bump-map)))
(setf tile-chunks (tile-layer-chunks layer tile-chunks))) (if (gethash "top-layer" (cl-tiled:properties layer))
(setf top-tiles (tile-layer-chunks layer top-tiles))
(setf tile-chunks (tile-layer-chunks layer tile-chunks))))
(cl-tiled.data-types:object-layer (cl-tiled.data-types:object-layer
(setf entities (object-layer-entities layer entities))))) (setf entities (object-layer-entities layer entities)))))
(cl-tiled:map-layers (cl-tiled:load-map map-file))) (cl-tiled:map-layers (cl-tiled:load-map map-file)))
(setf (gethash :tiles hash) tile-chunks) (setf (gethash :tiles hash) tile-chunks)
(setf (gethash :top-tiles hash) top-tiles)
(setf (gethash :bump-map hash) bump-map) (setf (gethash :bump-map hash) bump-map)
(setf (gethash :entities hash) entities) (setf (gethash :entities hash) entities)
hash)) hash))