(setenv "CATBIRD_DEV_MODE" "1") (use-modules (catbird) (catbird camera) (catbird kernel) (catbird node) (catbird node-2d) (catbird region) ((catbird scene) #:select ()) (chickadee graphics color) (chickadee graphics path) (chickadee math vector) (community-garden actors) (community-garden garden-bed) (community-garden plant) (community-garden view) (goblins) (goblins vrun) (goblins ocapn ids) (goblins ocapn captp) (goblins ocapn netlayer onion) (ice-9 atomic) (oop goops)) (define garden-vat (spawn-vat)) (define catbird-vat (spawn-vat)) (define alice-vat (spawn-vat)) (define-vat-run garden-run garden-vat) (define-vat-run catbird-run catbird-vat) (define-vat-run alice-run alice-vat) (define the-botanist (garden-run (spawn ^botanist))) (define the-garden-gate (garden-run (spawn ^garden-gate the-botanist))) (define sunflower/approved (garden-run ($ the-botanist 'approve-plant sunflower))) (define cabbage/approved (garden-run ($ the-botanist 'approve-plant cabbage))) (define our-garden (garden-run (spawn ^garden "Spritely Institute Community Garden" (make-garden-bed 8 8) the-garden-gate))) (define onion-netlayer (garden-run (new-onion-netlayer))) (define mycapn (garden-run (let* ((mycapn (spawn-mycapn onion-netlayer)) (garden-sref ($ mycapn 'register our-garden 'onion))) (format #t "edit-garden Dave ~a\n" (ocapn-id->string garden-sref)) mycapn))) (define alice (alice-run (spawn ^gardener "Alice" our-garden))) (alice-run ($ alice 'plant 1 1 sunflower/approved)) (alice-run ($ alice 'plant 2 1 sunflower/approved)) (alice-run ($ alice 'plant 1 2 sunflower/approved)) (alice-run ($ alice 'plant 2 2 sunflower/approved)) (alice-run ($ alice 'plant 5 1 cabbage/approved)) (alice-run ($ alice 'plant 6 1 cabbage/approved)) (alice-run ($ alice 'plant 5 2 cabbage/approved)) (alice-run ($ alice 'plant 6 2 cabbage/approved)) (define catbird-visitor (catbird-run (spawn ^visitor "Catbird UI" our-garden))) (define catbird-garden-bed (make-atomic-box #f)) (define catbird-garden-name (make-atomic-box #f)) (catbird-run (on ($ catbird-visitor 'get-garden-name) (lambda (name) (atomic-box-set! catbird-garden-name name)))) (catbird-run (on ($ catbird-visitor 'inspect-garden) (lambda (garden-bed) (atomic-box-set! catbird-garden-bed garden-bed)))) (run-catbird (lambda () (let ((region (create-full-region #:name 'main)) (scene (make #:name 'scratch))) (replace-scene region scene) (set! (camera region) (make #:width %window-width #:height %window-height)) (attach-to scene (make #:name 'background #:painter (with-style ((fill-color db32-elf-green)) (fill (rectangle (vec2 0.0 0.0) %window-width %window-height)))) (make #:vat catbird-vat #:visitor catbird-visitor #:name-box catbird-garden-name #:garden-bed-box catbird-garden-bed)))) #:title "Community Garden" #:width %window-width #:height %window-height)