summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2d/game.scm43
-rw-r--r--examples/animation.scm2
-rw-r--r--examples/common.scm4
-rw-r--r--examples/coroutine.scm2
-rw-r--r--examples/font.scm2
-rwxr-xr-xexamples/guile-2048/guile-2048.scm4
-rw-r--r--examples/particles.scm2
-rw-r--r--examples/simple.scm2
-rw-r--r--examples/tilemap.scm2
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))