X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=mudsync%2Froom.scm;h=09ebdcbc0db8531802edf22e6e56d69ea702befa;hb=060a48dce227e8c53e007941cc673b494ca36024;hp=b6164da14fcbd3310d75aa8f3fb4c063af275c14;hpb=d13325f5f6eba20c808636948432dcdff4e138f6;p=mudsync.git diff --git a/mudsync/room.scm b/mudsync/room.scm index b6164da..09ebdcb 100644 --- a/mudsync/room.scm +++ b/mudsync/room.scm @@ -22,6 +22,9 @@ #:use-module (8sync agenda) #:use-module (oop goops) #:export ( + room-actions + room-actions* + )) ;;; Rooms @@ -80,38 +83,33 @@ (full-command "go" cmatch-just-verb always 'go-where) (full-command "go" cmatch-direct-obj always 'go-exit))) + ;; TODO: Subclass from container? (define-class () - (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 (exits #:init-value '() #:getter room-exits) - ;; @@: Maybe eventually 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