Support 2d-world-meta-level parameter. TODO revisit parameterization

This commit is contained in:
Tony Garnock-Jones 2015-10-23 21:11:33 -04:00
parent 2420abe2e1
commit 5409cebe88
1 changed files with 16 additions and 5 deletions

View File

@ -7,6 +7,7 @@
(struct-out scene)
(except-out (struct-out sprite) sprite)
(rename-out [sprite <sprite>] [make-sprite sprite])
2d-world-meta-level
simple-sprite
update-scene
update-sprites
@ -56,9 +57,19 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TODO: Parameters don't work very well for this. We want it to be a
;; local, relative idea -- some actors will engage at metalevel 1,
;; some at metalevel 2, and we would prefer to just be able to say
;; (parameterize ((2d-world-meta-level N)) (spawn ...)), but we can't,
;; because parameterization *isn't lexical enough*.
;;
;; Perhaps the current-parameterization should be saved at spawn time?
;;
(define 2d-world-meta-level (make-parameter 1))
(define (update-scene prelude postlude)
(patch-seq (retract (scene ? ?) #:meta-level 1)
(assert (scene (seal prelude) (seal postlude)) #:meta-level 1)))
(patch-seq (retract (scene ? ?) #:meta-level (2d-world-meta-level))
(assert (scene (seal prelude) (seal postlude)) #:meta-level (2d-world-meta-level))))
(define (make-sprite z instructions)
(sprite z (seal instructions)))
@ -69,8 +80,8 @@
(texture ,i))))
(define (update-sprites . ss)
(patch-seq* (cons (retract (sprite ? ?) #:meta-level 1)
(map (lambda (s) (assert s #:meta-level 1)) ss))))
(patch-seq* (cons (retract (sprite ? ?) #:meta-level (2d-world-meta-level))
(map (lambda (s) (assert s #:meta-level (2d-world-meta-level))) ss))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -82,7 +93,7 @@
(transition (void) ((if press? assert retract) (key-pressed code)))]
[#f #f]))
(void)
(sub (key-event ? ? ?) #:meta-level 1)))
(sub (key-event ? ? ?) #:meta-level (2d-world-meta-level))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;