X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=mudsync%2Fplayer.scm;h=feb14f80a2375e9b67a4d6b4728ab558226c0c12;hp=42359bd47db3a116391a788ed8bb39964d787ace;hb=060a48dce227e8c53e007941cc673b494ca36024;hpb=d13325f5f6eba20c808636948432dcdff4e138f6 diff --git a/mudsync/player.scm b/mudsync/player.scm index 42359bd..feb14f8 100644 --- a/mudsync/player.scm +++ b/mudsync/player.scm @@ -17,16 +17,30 @@ ;;; along with Mudsync. If not, see . (define-module (mudsync player) + #:use-module (mudsync command) #:use-module (mudsync gameobj) + #:use-module (mudsync game-master) + #:use-module (mudsync parser) #:use-module (8sync systems actors) #:use-module (8sync agenda) #:use-module (ice-9 format) #:use-module (oop goops) - #:export ()) + #:use-module (srfi srfi-1) + #:export ( + player-self-commands)) ;;; Players ;;; ======= +(define player-actions + (build-actions + (init (wrap-apply player-init!)) + (handle-input (wrap-apply player-handle-input)))) + +(define player-actions* + (append player-actions + gameobj-actions)) + (define-class () (username #:init-keyword #:username #:accessor player-username) @@ -39,20 +53,35 @@ (message-handler #:init-value - (make-action-dispatch - (set-loc! (wrap-apply player-set-loc!)) - (init (wrap-apply player-init!))))) + ;; @@: We're gonna need action inheritance real awful soon, huh? + (simple-dispatcher player-actions*))) -;;; player message handlers -(define-mhandler (player-set-loc! player message id) - (format #t "DEBUG: Location set to ~s for player ~s\n" - id (actor-id-actor player)) - (set! (gameobj-loc player) id)) +;;; player message handlers (define-mhandler (player-init! player message) (player-look-around player)) + +(define-mhandler (player-handle-input player message input) + (define split-input (split-verb-and-rest input)) + (define input-verb (pk 'input-verb (car split-input))) + (define input-rest (pk 'input-rest (cdr split-input))) + + (define command-candidates + (pk 'candidates + (player-gather-command-handlers player input-verb))) + + (define winner + (pk 'winner (find-command-winner command-candidates input-rest))) + + (<- player (gameobj-gm player) 'write-home + #:text + (format #f "<~a>: ~s\n" + (player-username player) + input))) + + ;;; player methods (define (player-look-around player) @@ -68,3 +97,6 @@ (format #f "**~a**\n~a\n" room-name room-desc)) (<- player (gameobj-gm player) 'write-home #:text message-text)) + + +