Newer
Older
mazes / distances.lisp
@clewis clewis on 3 Dec 2023 1 KB new attempt
(in-package #:mazes)

(defclass distances ()
  ((root :initarg :root :accessor root-cell)
   (cells :initarg :cells :initform (make-hash-table) :accessor distance-cells)
   (grid :initarg :grid :accessor distance-grid))
  (:documentation "Keeps track of the distance of each cell from the given root cell."))

(defmethod initialize-instance :after ((d distances) &key)
  (setf (gethash (root-cell d) (distance-cells d)) 0))

(defgeneric set-distance (distances &key)
  (:documentation "Set the distance of the given cell from the root cell"))

(defgeneric calc-distance (distances)
  (:documentation "Set the distance of the given cell from the root cell"))


(defmethod set-distance ((d distances) &key cell distance)
  (let ((cells (distance-cells d)))
    (setf (gethash cell cells) distance)))


(defgeneric distance-all-cells (distances)
  (:documentation "Return a list of cells with their respective distance from root"))

#|
(defmethod distance-all-cells ((d distances))
  (get-hash-keys (distance-cells d)))
|#


(defmethod calc-distance ((d distances))
  (let* ((matrix (grid-matrix (distance-grid d)))
         (num-rows (grid-rows (distance-grid d)))
         (num-cols (grid-cols (distance-grid d)))))
  (format t "calculate-distances..."))


(defun make-distance (root grid)
  (make-instance 'distances :root root :grid grid))