diff options
Diffstat (limited to 'game.scm')
-rw-r--r-- | game.scm | 176 |
1 files changed, 3 insertions, 173 deletions
@@ -20,21 +20,18 @@ (sly actor) (sly audio) (sly fps) - (sly live-reload) - ((sly math vector) #:select (magnitude) #:prefix v:) - (sly records) (sly render framebuffer) (sly render sprite-batch) (sly render tileset) (srfi srfi-1) - (srfi srfi-9) - (srfi srfi-11) + (lisparuga audio) (lisparuga bullets) (lisparuga enemies) (lisparuga explosions) (lisparuga player) (lisparuga stats) (lisparuga utils) + (lisparuga view) (lisparuga world)) @@ -63,16 +60,6 @@ (signal-let ((restart? (key-down? 'return))) `(restart ,restart?))))) -(define (key-toggle key) - "Create a signal that is initially #f and toggles between #t and #f -each time KEY is pressed." - (signal-fold (lambda (down? previous) - (and down? (not previous))) - #f - (signal-filter identity #f - ;; Ignore repeated key down signals. - (signal-drop-repeats (key-down? key))))) - (define-signal display-fps? (key-toggle 'f)) @@ -80,11 +67,6 @@ each time KEY is pressed." ;;; Music and Sound ;;; -(define load-music* - (memoize - (lambda (file) - (load-music (string-append "assets/music/" file))))) - (define-signal music (signal-drop-repeats (signal-let ((world world)) @@ -94,39 +76,6 @@ each time KEY is pressed." ((game-won? world) "title-screen.ogg") (else "level-2.ogg")))))) -(define (loop-music music) - (play-music music #:loop? #t)) - -(define (load-sample* file) - (load-sample (string-append "assets/sounds/" file))) - -(define (enemy-hit-sound world time) - (and (any (lambda (enemy) - (let ((hit-time (enemy-last-hit-time (actor-ref enemy)))) - (and hit-time (= time hit-time)))) - (world-enemies world)) - 'enemy-hit)) - -(define (player-shoot-sound world time) - (and (zero? (modulo time 5)) - (player-shooting? (actor-ref (world-player world))) - 'player-shoot)) - -(define (player-death-sound world time) - (and (let ((death-time (player-last-death-time - (actor-ref (world-player world))))) - (and death-time (= time death-time))) - 'player-death)) - -(define (explosion-sound world time) - (and (any (lambda (explosion) - (let ((explode-time (explosion-time explosion))) - (= time explode-time))) - (world-explosions world)) - 'explosion)) - -(define (play-sound-effects sounds) - (for-each play-sample sounds)) (define-signal sounds (on-start @@ -152,17 +101,6 @@ each time KEY is pressed." ;;; View ;;; -(define resolution-scale 4) -(define scaled-resolution (v* resolution resolution-scale)) - -(define camera - (2d-camera #:area (make-rect 0 0 (vx resolution) (vy resolution)))) - -(define scaled-camera - (2d-camera #:area (make-rect 0 0 - (vx scaled-resolution) - (vy scaled-resolution)))) - (define-signal framebuffer (on-start (make-framebuffer (vx scaled-resolution) (vy scaled-resolution)))) @@ -181,8 +119,6 @@ each time KEY is pressed." (on-start (load-font "assets/fonts/kenpixel_mini.ttf" 16))) -(define font-color (rgb #xdeeed6)) - (define-signal fps-text (signal-let ((fps fps) (font font)) @@ -233,12 +169,6 @@ each time KEY is pressed." #:anchor 'top-left))) render-nothing))) -(define render-status-text - (memoize - (lambda (font text) - (render-sprite - (make-label font text #:blended? #f #:anchor 'center))))) - (define-signal status-text (signal-let ((big-font big-font) (font font) @@ -277,9 +207,6 @@ each time KEY is pressed." (else render-nothing)))) -(define load-sprite/live (with-live-reload load-sprite)) -(define load-tileset/live (with-live-reload load-tileset)) - (define-signal background (load-sprite/live "assets/images/background.png" #:anchor 'bottom-left)) @@ -303,16 +230,6 @@ each time KEY is pressed." (define-signal chain-tileset (load-tileset/live "assets/images/chain.png" 24 16)) -(define make-chain-sprite - (memoize - (lambda (tileset stats) - (make-sprite (tileset-ref tileset - (- (match (stats-chain-type stats) - ('light 2) - ('dark 5)) - (1- (stats-chain-progress stats)))) - #:anchor 'top-left)))) - (define-signal chain-sprite (signal-map-maybe (lambda (world tileset) (let ((stats (world-stats world))) @@ -341,25 +258,6 @@ each time KEY is pressed." world player-tileset)) -(define (make-scrolling-background background time speed) - (signal-let ((background background) - (time timer)) - (if background - (let* ((height (vy resolution)) - (y (- (* (modulo time (round (/ height speed))) speed))) - (render (render-sprite background))) - (render-begin - (move (vector2 0 y) render) - (move (vector2 0 (+ y height)) render))) - render-nothing))) - -(define (render-sprite-maybe sprite) - (signal-map (lambda (sprite) - (if sprite - (render-sprite sprite) - render-nothing)) - sprite)) - (define-signal scrolling-background (signal-map render-begin ;;(make-scrolling-background background timer 0.2) @@ -369,74 +267,6 @@ each time KEY is pressed." (define-signal batch (on-start (make-sprite-batch 1000))) -(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) - (with-sprite-batch batch context - (for-each (lambda (actor) - (let* ((bullet (actor-ref actor)) - (rect (rect-move bullet-rect - (bullet-position bullet))) - (tex (tileset-ref tileset - (match (bullet-type bullet) - ('player-light 12) - ('player-dark 13) - ('large-light 9) - ('large-dark 8) - ('small-light 11) - ('small-dark 10))))) - (sprite-batch-add! batch context tex rect))) - bullets)))) - -(define (render-enemies enemies tileset batch time) - (lambda (context) - (with-sprite-batch batch context - (for-each (lambda (actor) - (let* ((enemy (actor-ref actor)) - (hit-time (enemy-last-hit-time enemy)) - (hit? (and hit-time (zero? (- time hit-time)))) - (rect (rect-move enemy-rect (enemy-position enemy))) - (tex (tileset-ref tileset - (+ (match (enemy-type enemy) - ('popcorn-dark 0) - ('popcorn-light 4) - ('pincer-dark 8) - ('pincer-light 12)) - (if hit? - ;; Use the hit - ;; indicator frame. - 2 - ;; Swap between the - ;; 2 normal - ;; animation frames. - (modulo (round (/ time 5)) - 2)))))) - (sprite-batch-add! batch context tex rect))) - enemies)))) - -(define (render-player player sprite time) - (if (and (player-invincible? player time) - (odd? (round (/ time 3)))) - render-nothing - (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) @@ -514,5 +344,5 @@ each time KEY is pressed." (run-game-loop scene)) ;;; Local Variables: -;;; compile-command: "../pre-inst-env guile simple.scm" +;;; compile-command: "../pre-inst-env guile game.scm" ;;; End: |