From 3f3249e7a199b28419a193c1f14912bf2d1172d3 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 10 Jul 2016 19:22:48 -0400 Subject: [PATCH] Convert syndicate-gl/2d basic example to syndicate/actor style --- racket/syndicate-gl/examples/basic.rkt | 124 ++++++++++--------------- 1 file changed, 47 insertions(+), 77 deletions(-) diff --git a/racket/syndicate-gl/examples/basic.rkt b/racket/syndicate-gl/examples/basic.rkt index a511d57..a3b6e1a 100644 --- a/racket/syndicate-gl/examples/basic.rkt +++ b/racket/syndicate-gl/examples/basic.rkt @@ -1,96 +1,66 @@ #lang racket -(require syndicate) +(require (only-in syndicate seal)) +(require syndicate/actor) (require 2htdp/image) (require "../2d.rkt") -(define window-projection (at-meta (?! (window ? ?)))) -(define key-pressed-projection (key-pressed (?!))) - (define (spawn-background) - (spawn (lambda (e s) - (match e - [(? patch? p) - (define-values (added removed) (patch-project/set/single p window-projection)) - (transition s (for/list [(w added)] - (match-define (window width height) w) - (update-scene `((push-matrix (scale ,width ,(* height 2)) - (translate 0 -0.25) - (texture - ,(overlay/xy (rectangle 1 1 "solid" "white") - 0 0 - (rectangle 1 2 "solid" "black")))) - ;; (rotate -30) - ;; (scale 5 5) - ) - `())))] - [_ #f])) - (void) - (patch-seq - (sub (window ? ?) #:meta-level 1) - ;; (assert 'fullscreen #:meta-level 1) - ))) + (actor + (react + (during (window $width $height) #:meta-level 1 + (assert (scene (seal `((push-matrix (scale ,width ,(* height 2)) + (translate 0 -0.25) + (texture + ,(overlay/xy (rectangle 1 1 "solid" "white") + 0 0 + (rectangle 1 2 "solid" "black")))) + ;; (rotate -30) + ;; (scale 5 5) + )) + (seal `())) + #:meta-level 1))))) (define (spawn-player-avatar) (local-require 2htdp/planetcute) (define CC character-cat-girl) - (define (move-to x y keys-down) - (transition (list x y keys-down) - (update-sprites - (simple-sprite 0 x y (image-width CC) (image-height CC) CC)))) - (spawn (lambda (e s) - (match-define (list x y keys-down) s) - (match e - [(? patch? p) - (define-values (added removed) - (patch-project/set/single p key-pressed-projection)) - (define new-keys-down (set-subtract (set-union keys-down added) removed)) - (transition (list x y new-keys-down) '())] - [(message (at-meta (frame-event _ _ elapsed-ms _))) - (define-values (old-x old-y) (values x y)) + + (actor (react + (field [x 100] [y 100]) + (assert (simple-sprite -0.5 (x) (y) (image-width CC) (image-height CC) CC) + #:meta-level 1) + + (field [keys-down (set)]) + (on (asserted (key-pressed $k)) (keys-down (set-add (keys-down) k))) + (on (retracted (key-pressed $k)) (keys-down (set-remove (keys-down) k))) + (define (key->delta k distance) (if (set-member? (keys-down) k) distance 0)) + + (on (message (frame-event _ _ $elapsed-ms _) #:meta-level 1) + (define-values (old-x old-y) (values (x) (y))) (define distance (* 0.360 elapsed-ms)) - (let* ((x (if (set-member? keys-down 'left) (- x distance) x)) - (x (if (set-member? keys-down 'right) (+ x distance) x)) - (y (if (set-member? keys-down 'up) (- y distance) y)) - (y (if (set-member? keys-down 'down) (+ y distance) y))) - (and (not (and (= x old-x) (= y old-y))) - (move-to x y keys-down)))] - [_ #f])) - (list 100 100 (set)) - (patch-seq - (update-sprites - (simple-sprite -0.5 100 100 (image-width CC) (image-height CC) CC)) - (sub (frame-event ? ? ? ?) #:meta-level 1) - (sub (key-pressed ?))))) + (define nx (+ old-x (key->delta 'right distance) (key->delta 'left (- distance)))) + (define ny (+ old-y (key->delta 'down distance) (key->delta 'up (- distance)))) + (when (not (and (= nx old-x) (= ny old-y))) + (x nx) + (y ny)))))) (define (spawn-frame-counter) - (spawn (lambda (e s) - (match e - [(message (at-meta (frame-event counter sim-time-ms _ _))) - (and (> sim-time-ms 0) - (let ((i (text (format "~a fps" (/ counter (/ sim-time-ms 1000.0))) 22 "black"))) - (transition s (update-sprites (simple-sprite -10 300 10 - (image-width i) - (image-height i) - i)))))] - [_ #f])) - (void) - (sub (frame-event ? ? ? ?) #:meta-level 1))) + (actor (react (field [i empty-image]) + (assert (simple-sprite -10 300 10 (image-width (i)) (image-height (i)) (i)) + #:meta-level 1) + (on (message (frame-event $counter $sim-time-ms _ _) #:meta-level 1) + (when (> sim-time-ms 0) + (define fps (/ counter (/ sim-time-ms 1000.0))) + (i (text (format "~a fps" fps) 22 "black"))))))) (2d-dataspace (spawn-keyboard-integrator) (spawn-background) ;; (spawn-frame-counter) (spawn-player-avatar) - (spawn (lambda (e s) #f) - (void) - (update-sprites (simple-sprite 0 50 50 50 50 (circle 50 "solid" "orange")) - (simple-sprite -1 60 60 50 50 (circle 50 "solid" "green")))) - (spawn (lambda (e s) - (match e - [(message _) - (transition s (assert 'stop #:meta-level 1))] - [_ #f])) - (void) - (sub (key-event #\q #t ?) #:meta-level 1)) - ) + (actor (react (assert (simple-sprite 0 50 50 50 50 (circle 50 "solid" "orange")) + #:meta-level 1) + (assert (simple-sprite -1 60 60 50 50 (circle 50 "solid" "green")) + #:meta-level 1))) + (actor (until (message (key-event #\q #t _) #:meta-level 1)) + (assert! 'stop #:meta-level 1))) (exit 0)