Convert syndicate-gl/2d basic example to syndicate/actor style
This commit is contained in:
parent
adf6603440
commit
3f3249e7a1
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue