;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-(in-package :gacela)
-
;;; World of Mob
+
+;(in-package :gacela)
+
+(defmacro makemob (name &rest methods)
+ `(defun ,name (&rest args &aux (option (car args)))
+ ,(union
+ `(case option
+ (:on (mob-on #',name))
+ (:off (mob-off #',name)))
+ (labels ((options (m &aux (option (car m)) (body (cadr m)))
+ (cond ((null m) nil)
+ (t (cons (list option `(apply ,body (cdr args))) (options (cddr m)))))))
+ (options methods)))))
+
(defmacro defmob (name variables &key init logic render)
`(let ((make-name ',(intern (concatenate 'string "MAKE-" (string name)))))
(setf (symbol-function make-name)
(makemob ,variables :init ,init :logic ,logic :render ,render))
make-name))
-(defmacro makemob (variables &key init logic render)
- `(lambda
- ,(if (null variables) () (cons '&key variables))
- (mob-structure ,variables ,init ,logic ,render)))
+;(defmacro makemob (variables &key init logic render)
+; `(lambda
+; ,(if (null variables) () (cons '&key variables))
+; (mob-structure ,variables ,init ,logic ,render)))
(defmacro mob-structure (variables init logic render)
`(list