2016-07-16 20:15:19 +00:00
|
|
|
#lang syndicate/actor
|
2015-09-09 00:11:16 +00:00
|
|
|
|
2016-07-16 20:15:19 +00:00
|
|
|
(require racket/set)
|
2015-09-09 00:11:16 +00:00
|
|
|
(require 2htdp/image)
|
|
|
|
(require "../2d.rkt")
|
|
|
|
|
2015-10-23 15:38:45 +00:00
|
|
|
(define (spawn-background)
|
2016-07-10 23:22:48 +00:00
|
|
|
(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)))))
|
2015-10-23 15:38:45 +00:00
|
|
|
|
|
|
|
(define (spawn-player-avatar)
|
2015-10-23 15:56:22 +00:00
|
|
|
(local-require 2htdp/planetcute)
|
|
|
|
(define CC character-cat-girl)
|
2016-07-10 23:22:48 +00:00
|
|
|
|
|
|
|
(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)))
|
2015-10-24 01:56:47 +00:00
|
|
|
(define distance (* 0.360 elapsed-ms))
|
2016-07-10 23:22:48 +00:00
|
|
|
(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))))))
|
2015-10-23 15:38:45 +00:00
|
|
|
|
|
|
|
(define (spawn-frame-counter)
|
2016-07-10 23:22:48 +00:00
|
|
|
(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")))))))
|
2015-10-23 15:38:45 +00:00
|
|
|
|
2016-07-16 20:15:19 +00:00
|
|
|
(spawn-keyboard-integrator)
|
|
|
|
(spawn-background)
|
|
|
|
;; (spawn-frame-counter)
|
|
|
|
(spawn-player-avatar)
|
|
|
|
(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))
|
|
|
|
|
|
|
|
(module+ main (current-ground-dataspace (2d-dataspace)))
|