big refactor to players, rooms, gameobj stuff
[mudsync.git] / mudsync / room.scm
index b6164da14fcbd3310d75aa8f3fb4c063af275c14..09ebdcbc0db8531802edf22e6e56d69ea702befa 100644 (file)
@@ -22,6 +22,9 @@
   #:use-module (8sync agenda)
   #:use-module (oop goops)
   #:export (<room>
+            room-actions
+            room-actions*
+
             <exit>))
 
 ;;; Rooms
    (full-command "go" cmatch-just-verb always 'go-where)
    (full-command "go" cmatch-direct-obj always 'go-exit)))
 
+
 ;; TODO: Subclass from container?
 (define-class <room> (<gameobj>)
-  (desc #:init-value ""
-        #:init-keyword #:desc)
-  ;; TODO: Switch this to be loc based
-  ;; Uses a hash table like a set (values ignored)
-  (occupants #:init-thunk make-hash-table)
   ;; A list of <exit>
   (exits #:init-value '()
          #:getter room-exits)
-  ;; @@: Maybe eventually <room> will inherit from some more general
-  ;;  game object class
 
   (contain-commands
    #:init-value %room-contain-commands)
 
   (message-handler
    #:allocation #:each-subclass
-   #:init-value
-   (make-action-dispatch
-    ;; desc == description
-    (get-desc
-     (simple-slot-getter 'desc))
-    (get-name
-     (simple-slot-getter 'name))
-    ((register-occupant! actor message who)
-     "Register an actor as being a occupant of this room"
-     (hash-set! (slot-ref actor 'occupants) who #t))
-    ((evict-occupant! actor message who)
-     "De-register an occupant removed from the room"
-     (hash-remove! (slot-ref actor 'occupants) who))
-    (wire-exits! (wrap-apply room-wire-exits!)))))
+   ;; @@: Can remove this indirection once things settle
+   #:init-value (wrap-apply room-action-dispatch)))
+
+
+(define room-actions
+  (build-actions
+   ;; desc == description
+   (wire-exits! (wrap-apply room-wire-exits!))))
+
+(define room-actions*
+  (append room-actions gameobj-actions))
+
+(define room-action-dispatch
+  (simple-dispatcher room-actions*))
+
 
 (define (room-wire-exits! room message)
   "Actually hook up the rooms' exit addresses to the rooms they