;;;; wh-engine/systems.lisp ;;;; facilities for defining systems (in-package wh-engine) (defvar *system-registry* () "Alist of defined systems.") (defvar *world-systems* () "List of installed systems.") (defun register-system (name init-fun-symbol update-fun-symbol sdl-event-rules &key dependencies) (push `(,name ,init-fun-symbol ,update-fun-symbol ,sdl-event-rules ,dependencies) *system-registry*)) (defun install-systems (&rest systems) (loop for system-name in systems for system = (assoc system-name *system-registry*) do (pushnew system *world-systems*) ;; install dependencies (apply #'install-systems (fifth system))))