Clean up various projections.

This commit is contained in:
Tony Garnock-Jones 2016-07-30 15:07:23 -04:00
parent 5f48f3ba0c
commit 06ddbe060e
1 changed files with 14 additions and 25 deletions

View File

@ -300,18 +300,7 @@
(icon-pict i))) (icon-pict i)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Various projections ;; Utilities
(define window-projection1 (inbound (?! (window ? ?))))
(define window-projection3 (inbound* 3 (?! (window ? ?))))
(define scroll-offset-projection (scroll-offset (?!)))
(define on-screen-display-projection (?! (on-screen-display ? ? ?)))
(define key-pressed-projection (inbound* 2 (key-pressed (?!))))
(define position-projection (?! (position ? ? ?)))
(define impulse-projection (?! (impulse ? ?)))
(define game-piece-configuration-projection (?! (game-piece-configuration ? ? ? ?)))
(define touching-projection (?! (touching ? ? ?)))
(define level-size-projection (level-size (?!)))
(define (update-set-from-patch orig p projection) (define (update-set-from-patch orig p projection)
(define-values (added removed) (patch-project/set/single p projection)) (define-values (added removed) (patch-project/set/single p projection))
@ -330,13 +319,13 @@
(define backdrop (rectangle 1 1 "solid" "white")) (define backdrop (rectangle 1 1 "solid" "white"))
(define (update-window-size s p) (define (update-window-size s p)
(define added (trie-project/set/single (patch-added p) window-projection1)) (define added (trie-project/set/single (patch-added p) (inbound (?! (window ? ?)))))
(for/fold [(s s)] [(w added)] (for/fold [(s s)] [(w added)]
(match-define (window width height) w) (match-define (window width height) w)
(struct-copy scene-manager-state s [size (vector width height)]))) (struct-copy scene-manager-state s [size (vector width height)])))
(define (update-scroll-offset s p) (define (update-scroll-offset s p)
(define-values (added removed) (patch-project/set/single p scroll-offset-projection)) (define-values (added removed) (patch-project/set/single p (scroll-offset (?!))))
(for/fold [(s s)] [(vec added)] (for/fold [(s s)] [(vec added)]
(struct-copy scene-manager-state s [offset vec]))) (struct-copy scene-manager-state s [offset vec])))
@ -344,7 +333,7 @@
(struct-copy scene-manager-state s (struct-copy scene-manager-state s
[osds (update-set-from-patch (scene-manager-state-osds s) [osds (update-set-from-patch (scene-manager-state-osds s)
p p
on-screen-display-projection)])) (?! (on-screen-display ? ? ?)))]))
(spawn (lambda (e s) (spawn (lambda (e s)
(match e (match e
@ -429,7 +418,7 @@
(define ((remove-game-piece-configurations p) s) (define ((remove-game-piece-configurations p) s)
(define removed (trie-project/set/single (patch-removed p) (define removed (trie-project/set/single (patch-removed p)
game-piece-configuration-projection)) (?! (game-piece-configuration ? ? ? ?))))
(transition (transition
(for/fold [(s s)] [(g removed)] (for/fold [(s s)] [(g removed)]
(define id (game-piece-configuration-id g)) (define id (game-piece-configuration-id g))
@ -443,7 +432,7 @@
(define ((add-game-piece-configurations p) s) (define ((add-game-piece-configurations p) s)
(define added (trie-project/set/single (patch-added p) (define added (trie-project/set/single (patch-added p)
game-piece-configuration-projection)) (?! (game-piece-configuration ? ? ? ?))))
(transition (transition
(for/fold [(s s)] [(g added)] (for/fold [(s s)] [(g added)]
(match-define (game-piece-configuration id initial-position _ _) g) (match-define (game-piece-configuration id initial-position _ _) g)
@ -460,7 +449,7 @@
(struct-copy physics-state s (struct-copy physics-state s
[impulses (update-hash-from-patch (physics-state-impulses s) [impulses (update-hash-from-patch (physics-state-impulses s)
p p
impulse-projection (?! (impulse ? ?))
impulse-id impulse-id
impulse-vec)]) impulse-vec)])
'())) '()))
@ -661,7 +650,7 @@
(define ((monitor-position-change p) s) (define ((monitor-position-change p) s)
(define s1 (define s1
(for/fold [(s s)] [(pos (trie-project/set/single (patch-added p) position-projection))] (for/fold [(s s)] [(pos (trie-project/set/single (patch-added p) (?! (position ? ? ?))))]
(match-define (position _ hitbox-top-left _) pos) (match-define (position _ hitbox-top-left _) pos)
(struct-copy player-state s [pos hitbox-top-left]))) (struct-copy player-state s [pos hitbox-top-left])))
(transition s1 (sprite-update s1))) (transition s1 (sprite-update s1)))
@ -671,7 +660,7 @@
(struct-copy player-state s (struct-copy player-state s
[keys-down (update-set-from-patch (player-state-keys-down s) [keys-down (update-set-from-patch (player-state-keys-down s)
p p
key-pressed-projection)]) (inbound* 2 (key-pressed (?!))))])
'())) '()))
(define (any-key-down? s . ks) (define (any-key-down? s . ks)
@ -799,12 +788,12 @@
(define ((monitor-level-size-change p) s) (define ((monitor-level-size-change p) s)
(transition (for/fold [(s s)] [(vec (trie-project/set/single (patch-added p) (transition (for/fold [(s s)] [(vec (trie-project/set/single (patch-added p)
level-size-projection))] (level-size (?!))))]
(struct-copy enemy-state s [level-size vec])) (struct-copy enemy-state s [level-size vec]))
'())) '()))
(define ((monitor-position-change p) s) (define ((monitor-position-change p) s)
(define positions (trie-project/set/single (patch-added p) position-projection)) (define positions (trie-project/set/single (patch-added p) (?! (position ? ? ?))))
(and (not (set-empty? positions)) (and (not (set-empty? positions))
(match (set-first positions) (match (set-first positions)
[(position _ (and top-left (vector left top)) (vector width height)) [(position _ (and top-left (vector left top)) (vector width height))
@ -825,7 +814,7 @@
(define ((damage-contacts p) s) (define ((damage-contacts p) s)
(define-values (to-damage squashed?) (define-values (to-damage squashed?)
(for/fold [(to-damage '()) (squashed? #f)] (for/fold [(to-damage '()) (squashed? #f)]
[(t (trie-project/set/single (patch-added p) touching-projection))] [(t (trie-project/set/single (patch-added p) (?! (touching ? ? ?))))]
(match-define (touching who _ side) t) (match-define (touching who _ side) t)
(if (eq? side 'top) (if (eq? side 'top)
(values to-damage #t) (values to-damage #t)
@ -863,7 +852,7 @@
(match-define (vector level-width level-height) level-size-vec) (match-define (vector level-width level-height) level-size-vec)
(define ((update-window-size p) s) (define ((update-window-size p) s)
(define added (trie-project/set/single (patch-added p) window-projection3)) (define added (trie-project/set/single (patch-added p) (inbound* 3 (?! (window ? ?)))))
(transition (for/fold [(s s)] [(w added)] (transition (for/fold [(s s)] [(w added)]
(match-define (window width height) w) (match-define (window width height) w)
(vector width height)) (vector width height))
@ -873,7 +862,7 @@
(min (max 0 (- pos (/ viewport 2))) (- limit viewport))) (min (max 0 (- pos (/ viewport 2))) (- limit viewport)))
(define ((update-scroll-offset-from-player-position p) s) (define ((update-scroll-offset-from-player-position p) s)
(define player-positions (trie-project/set/single (patch-added p) position-projection)) (define player-positions (trie-project/set/single (patch-added p) (?! (position ? ? ?))))
(and (not (set-empty? player-positions)) (and (not (set-empty? player-positions))
(let ((player-position (set-first player-positions))) (let ((player-position (set-first player-positions)))
(match-define (vector ww wh) s) (match-define (vector ww wh) s)