From c9bb5b91b82900294413786f75b6ef021a59bb5a Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 24 Apr 2014 21:57:50 -0400 Subject: Rename game loop procedures and remove parameter. * 2d/game.scm (tick-interval): No longer a parameter. (run-game-loop, start-game-loop): Rename. (quit-game, stop-game-loop): Rename. * examples/animation.scm: Use start-game-loop and stop-game-loop. * examples/common.scm: Use start-game-loop and stop-game-loop. * examples/coroutine.scm: Use start-game-loop and stop-game-loop. * examples/font.scm: Use start-game-loop and stop-game-loop. * examples/guile-2048/guile-2048.scm: Use start-game-loop and stop-game-loop. * examples/particles.scm: Use start-game-loop and stop-game-loop. * examples/simple.scm: Use start-game-loop and stop-game-loop. * examples/tilemap.scm: Use start-game-loop and stop-game-loop. --- 2d/game.scm | 43 +++++++++++++++++++------------------- examples/animation.scm | 2 +- examples/common.scm | 4 ++-- examples/coroutine.scm | 2 +- examples/font.scm | 2 +- examples/guile-2048/guile-2048.scm | 4 ++-- examples/particles.scm | 2 +- examples/simple.scm | 2 +- examples/tilemap.scm | 2 +- 9 files changed, 31 insertions(+), 32 deletions(-) diff --git a/2d/game.scm b/2d/game.scm index 14543e8..b25cd1d 100644 --- a/2d/game.scm +++ b/2d/game.scm @@ -29,33 +29,21 @@ #:use-module (2d event) #:use-module (2d signal) #:use-module (2d window) - #:export (ticks-per-second - tick-interval + #:export (tick-interval game-agenda draw-hook - run-game-loop - quit-game)) + start-game-loop + stop-game-loop)) ;;; ;;; Game Loop ;;; -(define ticks-per-second 60) -(define tick-interval (make-parameter 0)) +;; Update 60 times per second by default. +(define tick-interval (floor (/ 1000 60))) (define draw-hook (make-hook 2)) (define game-agenda (make-agenda)) -(define (run-game-loop) - "Start the game loop." - (parameterize ((tick-interval (floor (/ 1000 ticks-per-second)))) - (call-with-prompt - 'game-loop-prompt - (lambda () - (game-loop (SDL:get-ticks) 0)) - (lambda (cont callback) - (when (procedure? callback) - (callback cont)))))) - (define (draw dt alpha) "Render a frame." (let ((width (signal-ref window-width)) @@ -69,20 +57,20 @@ "Call the update callback. The update callback will be called as many times as tick-interval can divide LAG. The return value is the unused accumulator time." - (if (>= lag (tick-interval)) + (if (>= lag tick-interval) (begin (tick-agenda! game-agenda) - (update (- lag (tick-interval)))) + (update (- lag tick-interval))) lag)) (define (alpha lag) "Calculate interpolation factor in the range [0, 1] for the leftover frame time LAG." - (/ lag (tick-interval))) + (/ lag tick-interval)) (define (frame-sleep time) "Sleep for the remainder of the frame that started at TIME." - (let ((t (- (+ time (tick-interval)) + (let ((t (- (+ time tick-interval) (SDL:get-ticks)))) (usleep (max 0 (* t 1000))))) @@ -97,5 +85,16 @@ milliseconds of the last iteration of the game loop." (frame-sleep current-time) (game-loop current-time lag)))) -(define (quit-game) +(define (start-game-loop) + "Start the game loop." + (call-with-prompt + 'game-loop-prompt + (lambda () + (game-loop (SDL:get-ticks) 0)) + (lambda (cont callback) + (when (procedure? callback) + (callback cont))))) + +(define (stop-game-loop) + "Abort the game loop." (abort-to-prompt 'game-loop-prompt #f)) diff --git a/examples/animation.scm b/examples/animation.scm index d72637c..8be77ef 100644 --- a/examples/animation.scm +++ b/examples/animation.scm @@ -44,4 +44,4 @@ sprite out of it." (add-hook! draw-hook (lambda (dt alpha) (draw-sprite sprite))) (with-window (make-window #:title "Animation") - (run-game-loop)) + (start-game-loop)) diff --git a/examples/common.scm b/examples/common.scm index b26186a..0acb6c2 100644 --- a/examples/common.scm +++ b/examples/common.scm @@ -29,9 +29,9 @@ (add-hook! key-press-hook (lambda (key unicode) (when (eq? key 'escape) - (quit-game)))) + (stop-game-loop)))) -(add-hook! window-close-hook quit-game) +(add-hook! window-close-hook stop-game-loop) (schedule-interval game-agenda (lambda () diff --git a/examples/coroutine.scm b/examples/coroutine.scm index cb2f929..98dec16 100644 --- a/examples/coroutine.scm +++ b/examples/coroutine.scm @@ -47,4 +47,4 @@ (with-window (make-window #:title "Coroutines" #:resolution (vector2 window-width window-height)) - (run-game-loop)) + (start-game-loop)) diff --git a/examples/font.scm b/examples/font.scm index a48bc37..304070f 100644 --- a/examples/font.scm +++ b/examples/font.scm @@ -52,4 +52,4 @@ (draw-label (signal-ref mouse-label)))) (with-window (make-window #:title "Fonts") - (run-game-loop)) + (start-game-loop)) diff --git a/examples/guile-2048/guile-2048.scm b/examples/guile-2048/guile-2048.scm index d5ded0a..637650b 100755 --- a/examples/guile-2048/guile-2048.scm +++ b/examples/guile-2048/guile-2048.scm @@ -475,8 +475,8 @@ (start-2d-repl) -(add-hook! window-close-hook quit-game) +(add-hook! window-close-hook stop-game-loop) (add-hook! draw-hook (lambda (dt alpha) (render))) (with-window (make-window #:title "2048") - (run-game-loop)) + (start-game-loop)) diff --git a/examples/particles.scm b/examples/particles.scm index 648bab7..d811eb7 100644 --- a/examples/particles.scm +++ b/examples/particles.scm @@ -82,4 +82,4 @@ (with-window (make-window #:title "Particles" #:resolution (vector2 window-width window-height)) - (run-game-loop)) + (start-game-loop)) diff --git a/examples/simple.scm b/examples/simple.scm index 2cc85f9..a2c1fa4 100644 --- a/examples/simple.scm +++ b/examples/simple.scm @@ -28,4 +28,4 @@ (add-hook! draw-hook (lambda (dt alpha) (draw-sprite sprite))) (with-window (make-window #:title "Simple Sprite Demo") - (run-game-loop)) + (start-game-loop)) diff --git a/examples/tilemap.scm b/examples/tilemap.scm index 9125abf..284c760 100644 --- a/examples/tilemap.scm +++ b/examples/tilemap.scm @@ -104,4 +104,4 @@ (add-hook! draw-hook (lambda (dt alpha) (draw-map-layer layer))) (with-window (make-window #:title "Tilemap") - (run-game-loop)) + (start-game-loop)) -- cgit v1.2.3