diff --git a/examples/platformer/game.rkt b/examples/platformer/game.rkt index e63f17e..3afd09d 100644 --- a/examples/platformer/game.rkt +++ b/examples/platformer/game.rkt @@ -674,6 +674,24 @@ (sub (position player-id ? ?)) (assert (level-size level-size-vec)))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; LevelTerminationMonitor + +(define (spawn-level-termination-monitor) + (spawn (lambda (e s) + (match e + [(? patch/removed?) + (log-info "Player died! Terminating level.") + (quit)] + [(message (at-meta (level-completed))) + (log-info "Level completed! Terminating level.") + (quit)] + [_ #f])) + (void) + (sub (game-piece-configuration player-id ? ? ?)) + (sub (level-completed) #:meta-level 1) + (assert (level-running) #:meta-level 1))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LevelSpawner @@ -691,6 +709,7 @@ (spawn-display-controller level-size-vec) (spawn-physics-engine) (spawn-player-avatar initial-player-x initial-player-y) + (spawn-level-termination-monitor) actions)) (define (spawn-numbered-level level-number)