[slime-devel] custom tweaks for object system
David O'Toole
dto at gnu.org
Wed Aug 20 07:15:53 UTC 2008
Hello folks. I use SLIME for all my Common Lisp interaction. I recently
implemented a custom prototype-based object system for a roguelike game
project i'm doing. With the use of reader macros and some code walking,
I can write methods like this:
> (define-method equip cell (item &optional slot)
> (when [is-equipment item]
> (let ((match [equipment-match self item]))
> (setf (getf <equipment>
> (or slot (first match)))
> item)
> [add-category item :equipped]
> ;; remove from inventory
> [remove-item self item])))
The syntax is [method-name object &rest args] and <foo> represents
(field-value self :foo)
Another example:
> (define-method forward world (method-key &rest args)
> "Send unhandled messages to the player object.
> This is where most world computations start, because nothing happens
> in a roguelike until the user has pressed a key."
> (let ((player <player>)
> (phase-number <phase-number>))
> (with-message-queue <message-queue>
> ;; send the message, possibly generating queued messages
> (apply #'send method-key player args)
> ;; process any messages that were generated
> [process-messages self]
> ;; update the player's action points
> [take-turn player phase-number]
> ;; if this is the player's last turn, begin the cpu phase
> ;; otherwise, stay in player phase and exit
> (unless [needs-turn player phase-number]
> [run-cpu-phase self])))
> nil)
>
I would like this to work with SLIME's arguments list lookup and so on.
My system retains all the documentation and arglist info at runtime so I
could probably hook this up somehow.
Any suggestions on how I could make this work with SLIME?
More information about the slime-devel
mailing list