Kill player when gate closes on them.

This commit is contained in:
David Thompson 2024-05-22 09:29:44 -04:00
parent 68b427e387
commit 71d62e596e
3 changed files with 88 additions and 38 deletions

View file

@ -68,6 +68,7 @@
(define audio:no (load-sound-effect "no"))
(define audio:exit (load-sound-effect "exit"))
(define audio:pickup (load-sound-effect "pickup"))
(define audio:die (load-sound-effect "die"))
;; Game state
(define *state* #f)
@ -198,29 +199,41 @@
(define (move-player dir)
(define (do-move)
(with-goblins
($ (level-player *level*) 'move dir)
($ (level-actor *level*) 'tick)
(define result
(match ($ (level-player *level*) 'event)
(('bump)
(media-play audio:bump)
#f)
(('push)
(media-play audio:push)
#f)
(('exit)
(media-play audio:exit)
'next-level)
(('gem)
(media-play audio:pickup)
;; TODO: Maybe show a little achievement popup when all gems
;; are collected?
(set! *gems* (cons *level-idx* *gems*))
#f)
(_ #f)))
(update-objects!)
result))
(save-snapshot!)
(let ((player (level-player *level*)))
(if ($ player 'alive?)
(begin
($ player 'move dir)
($ (level-actor *level*) 'tick)
;; TODO: Need a better way to receive events to play sounds
;; and emit particles and stuff so any actor can trigger
;; events.
(let ((result
(match ($ player 'event)
(('bump)
(media-play audio:bump)
#f)
(('push)
(media-play audio:push)
#f)
(('exit)
(media-play audio:exit)
'next-level)
(('die)
(media-play audio:die)
#f)
(('gem)
(media-play audio:pickup)
;; TODO: Maybe show a little achievement popup when all gems
;; are collected?
(set! *gems* (cons *level-idx* *gems*))
#f)
(_ #f))))
(update-objects!)
(save-snapshot!)
result))
(begin
(media-play audio:no)
#f)))))
(when (eq? (do-move) 'next-level)
(next-level!)))