moving between rooms nearly works
[mudsync.git] / mudsync / room.scm
index 09ebdcbc0db8531802edf22e6e56d69ea702befa..4e5fd9e9e23909303b0fba8cbeed342bbe2741cc 100644 (file)
 ;;; along with Mudsync.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (mudsync room)
+  #:use-module (mudsync command)
   #:use-module (mudsync gameobj)
   #:use-module (8sync systems actors)
   #:use-module (8sync agenda)
   #:use-module (oop goops)
+  #:use-module (srfi srfi-1)
   #:export (<room>
             room-actions
             room-actions*
 
             <exit>))
 
-;;; Rooms
+\f
+;;; Exits
 ;;; =====
 
 (define-class <exit> ()
   ((slot-ref exit 'traverse-check) exit actor target-actor))
 
 
-;; Kind of a useful utility, maybe?
-(define (simple-slot-getter slot)
-  (lambda (actor message)
-    (reply-message actor message
-                   #:val (slot-ref actor slot))))
-
-(define always (const #t))
-
-;; TODO: remove hack
-(define full-command list)
-
-;; TODO: fill these in
-(define cmatch-just-verb #f)
-(define cmatch-direct-verb #f)
-(define cmatch-direct-obj #f)
+\f
+;;; Rooms
+;;; =====
 
 (define %room-contain-commands
   (list
-   (full-command "look" cmatch-just-verb always 'look-room)
-   (full-command "look" cmatch-direct-obj always 'look-member)
-   (full-command "go" cmatch-just-verb always 'go-where)
-   (full-command "go" cmatch-direct-obj always 'go-exit)))
-
+   (loose-direct-command "look" 'cmd-look-at)
+   (empty-command "look" 'cmd-look-room)
+   (loose-direct-command "go" 'cmd-go)))
 
 ;; TODO: Subclass from container?
 (define-class <room> (<gameobj>)
   ;; A list of <exit>
   (exits #:init-value '()
+         #:init-keyword #:exits
          #:getter room-exits)
 
-  (contain-commands
+  (container-commands
    #:init-value %room-contain-commands)
 
   (message-handler
 (define room-actions
   (build-actions
    ;; desc == description
-   (wire-exits! (wrap-apply room-wire-exits!))))
+   (wire-exits! (wrap-apply room-wire-exits!))
+   (cmd-go (wrap-apply room-cmd-go))))
 
 (define room-actions*
   (append room-actions gameobj-actions))
@@ -124,3 +115,15 @@ claim to point to."
 
    (room-exits room)))
 
+(define-mhandler (room-cmd-go room message direct-obj)
+  (define exit
+    (find
+     (lambda (exit)
+       (equal? (exit-name exit) direct-obj))
+     (pk 'later-exits (room-exits room))))
+  (if exit
+      (<- room (message-from message) 'tell
+          #:text "Yeah you can go there...\n")
+      (<- room (message-from message) 'tell
+          #:text "I don't know where that is?\n")))
+