actors: Remove define-simple-actor, add define-actor.
[8sync.git] / demos / actors / robotscanner.scm
index 1fd3c88b96ad7b5d0c81b38dbce05b6096d8d372..5dd5d5e13d6fb484daa14a0602db410a69c778f5 100644 (file)
     (5 0)
     (2 1)))
 
-(define-simple-actor <overseer>
-  (init-world
-   (lambda (actor message)
-     ;; Porting mostly straight up from super-imperative XUDD code.
-     (define previous-room #f)
-     (define first-room #f)
-
-     ;; Set up all rooms
-     (for-each
-      (match-lambda
-        ((clean-droids infected-droids)
-         ;; Create this room
-         (define room (create-actor* actor <warehouse-room> "room"))
-         (define* (init-droid #:key infected)
-           (define droid (create-actor* actor <droid> "droid"
-                                        #:infected infected
-                                        #:room room))
-           (<-wait droid 'register-with-room))
-
-         ;; Link rooms.
-         ;; Couldn't this just be folded into the warehouse room init?
-         ;; I guess it stress tests more the message sending process
-         (when previous-room
-           (<- previous-room 'set-next-room
-               #:id room)
-           (<- room 'set-previous-room
-               #:id previous-room))
-
-         ;; Set up clean droids in the room
-         (for-each
-          (lambda _
-            (init-droid #:infected #f))
-          (iota clean-droids))
-
-         ;; Set up infected droids in the room
-         (for-each
-          (lambda _
-            (init-droid #:infected #t))
-          (iota clean-droids))
-
-         (set! previous-room room)
-         (if (not first-room)
-             (set! first-room room))))
-      room-structure)
-
-     ;; Add security robot
-     (let ((security-robot
-            (create-actor actor <security-robot>)))
-       (<- security-robot 'begin-mission
-           #:starting-room first-room
-           #:overseer (actor-id actor)))))
-
-  (transmission
-   (lambda* (actor message #:key text)
-     (display text)
-     (newline))))
+(define-actor <overseer> (<actor>)
+  ((init-world
+    (lambda (actor message)
+      ;; Porting mostly straight up from super-imperative XUDD code.
+      (define previous-room #f)
+      (define first-room #f)
+
+      ;; Set up all rooms
+      (for-each
+       (match-lambda
+         ((clean-droids infected-droids)
+          ;; Create this room
+          (define room (create-actor* actor <warehouse-room> "room"))
+          (define* (init-droid #:key infected)
+            (define droid (create-actor* actor <droid> "droid"
+                                         #:infected infected
+                                         #:room room))
+            (<-wait droid 'register-with-room))
+
+          ;; Link rooms.
+          ;; Couldn't this just be folded into the warehouse room init?
+          ;; I guess it stress tests more the message sending process
+          (when previous-room
+            (<- previous-room 'set-next-room
+                #:id room)
+            (<- room 'set-previous-room
+                #:id previous-room))
+
+          ;; Set up clean droids in the room
+          (for-each
+           (lambda _
+             (init-droid #:infected #f))
+           (iota clean-droids))
+
+          ;; Set up infected droids in the room
+          (for-each
+           (lambda _
+             (init-droid #:infected #t))
+           (iota clean-droids))
+
+          (set! previous-room room)
+          (if (not first-room)
+              (set! first-room room))))
+       room-structure)
+
+      ;; Add security robot
+      (let ((security-robot
+             (create-actor actor <security-robot>)))
+        (<- security-robot 'begin-mission
+            #:starting-room first-room
+            #:overseer (actor-id actor)))))
+
+   (transmission
+    (lambda* (actor message #:key text)
+      (display text)
+      (newline)))))
 
 
 ;;; A room full of robots.
 
 
 ;;; Security robot... designed to seek out and destroy infected droids.
-(define-simple-actor <security-robot>
-  (begin-mission security-robot-begin-mission))
+(define-actor <security-robot> (<actor>)
+  ((begin-mission security-robot-begin-mission)))
 
 (define* (security-robot-begin-mission actor message
                                        #:key starting-room overseer)