Make commands use the inheritable rmeta-slot tooling
[mudsync.git] / mudsync / player.scm
index bfa7ca88b0e8911810a43246cbe59ad905ba0845..bbd14030dc416a90d92478cbf83e9feda6c6fbc1 100644 (file)
   #:use-module (mudsync parser)
   #:use-module (8sync actors)
   #:use-module (8sync agenda)
+  #:use-module (8sync rmeta-slot)
   #:use-module (ice-9 control)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (oop goops)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
-  #:export (<player>
-            player-self-commands))
+  #:export (<player>))
 
 ;;; Players
 ;;; =======
 
-(define player-self-commands
-  (list
-   (empty-command "inventory" 'cmd-inventory)
-   ;; aliases...
-   ;; @@: Should use an "alias" system for common aliases?
-   (empty-command "inv" 'cmd-inventory)
-   (empty-command "i" 'cmd-inventory)
-   (empty-command "help" 'cmd-help)))
-
 (define-class <player> (<gameobj>)
   (username #:init-keyword #:username
             #:getter player-username)
 
-  (self-commands #:init-value (wrap player-self-commands))
+  (self-commands #:allocation #:each-subclass
+                 #:init-thunk
+                 (build-commands
+                  (("inventory" "inv" "i") ((empty-command cmd-inventory)))
+                  ("help" ((empty-command cmd-help)))))
 
   (actions #:allocation #:each-subclass
            #:init-thunk
 
   ;; Append our own command handlers
   (define our-commands
-    (filter
-     (lambda (cmd)
-       (equal? (command-verbs cmd) verb))
-     (val-or-run
-      (slot-ref player 'self-commands))))
+    (class-rmeta-ref (class-of player) 'self-commands verb
+                     #:dflt '()))
 
   ;; Append our inventory's relevant command handlers
   (define inv-items