;;;; units/container.lisp (in-package #:wheelwork) (defclass/std container (unit) ((units :with :a)) (:documentation "Just a list of units. Made into a class so that transformation affine transformations methods can be specialzied on whole groups of units")) (defmethod drop-unit ((unit unit)) "Removes a unit from its container. Returns T if the unit actually was removed." (when-let (container (unit-container unit)) (setf (container-units container) (delete unit (container-units container)) (unit-container unit) nil) t)) (defmethod add-unit ((container container) (unit unit)) "Adds a unit to the end of a container (thus affecting render order). Makes sure to remove the unit from its current container if necessary." (when (unit-container unit) (drop-unit unit)) (push unit (container-units container)) (setf (unit-container unit) container) unit) (defmethod cleanup ((container container)) (dolist (u (container-units container)) (cleanup u)))