From e61233513f97cfc3fdd5a4dbc68a75f006352e4c Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 3 May 2016 22:44:03 -0400 Subject: Render explosions. --- game.scm | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'game.scm') diff --git a/game.scm b/game.scm index a848392..7f6aecf 100644 --- a/game.scm +++ b/game.scm @@ -257,7 +257,7 @@ (add-enemy-bullets world bullets))) (define (explosion-active? explosion current-time) - (> (- current-time (explosion-time explosion)) 120)) + (< (- current-time (explosion-time explosion)) 15)) ;;; @@ -670,6 +670,9 @@ each time KEY is pressed." (define-signal enemy-tileset (load-tileset/live "assets/images/enemies.png" 16 16)) +(define-signal explosion-tileset + (load-tileset/live "assets/images/explosion.png" 16 16)) + (define-signal player-sprite (signal-map-maybe (lambda (world tileset) (make-sprite @@ -717,6 +720,7 @@ each time KEY is pressed." (define bullet-rect (make-rect -8 -8 16 16)) (define enemy-rect (make-rect -8 -8 16 16)) +(define explosion-rect (make-rect -8 -8 16 16)) (define (render-bullets bullets tileset batch) (lambda (context) @@ -771,6 +775,19 @@ each time KEY is pressed." (move (player-position player) (render-sprite sprite)))) +(define (render-explosions explosions tileset batch time) + (lambda (context) + (with-sprite-batch batch context + (for-each (lambda (explosion) + (let* ((start-time (explosion-time explosion)) + (rect (rect-move explosion-rect + (explosion-position explosion))) + ;; 3 frames of animation. + (frame (min 2 (floor (/ (- time start-time) 5)))) + (tex (tileset-ref tileset frame))) + (sprite-batch-add! batch context tex rect))) + explosions)))) + (define-signal scene (signal-let ((fps-text fps-text) (score-text score-text) @@ -783,28 +800,33 @@ each time KEY is pressed." (player-sprite player-sprite) (bullet-tileset bullet-tileset) (enemy-tileset enemy-tileset) + (explosion-tileset explosion-tileset) (batch batch) (world world) (time timer)) (if (and framebuffer framebuffer-sprite batch bullet-tileset - enemy-tileset player-sprite) + enemy-tileset player-sprite explosion-tileset) (let ((player (actor-ref (world-player world)))) (render-begin (with-framebuffer framebuffer (with-camera camera (render-begin background + (render-explosions (world-explosions world) + explosion-tileset + batch + time) (render-bullets (world-player-bullets world) bullet-tileset batch) (render-player player player-sprite time) - (render-bullets (world-enemy-bullets world) - bullet-tileset - batch) (render-enemies (world-enemies world) enemy-tileset batch time) + (render-bullets (world-enemy-bullets world) + bullet-tileset + batch) (with-color font-color (render-begin (if display-fps? -- cgit v1.2.3