From 7f6d69e986ae9d77b6e7f8e5572f1bdc210a0ad7 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 2 Sep 2013 09:08:20 -0400 Subject: Add a *running* flag to the game loop. --- 2d/game-loop.scm | 35 ++++++++++++++++++++++------------- 2d/game.scm | 25 +++++++++++++++---------- 2 files changed, 37 insertions(+), 23 deletions(-) (limited to '2d') diff --git a/2d/game-loop.scm b/2d/game-loop.scm index ab81b5a..8dcc65c 100644 --- a/2d/game-loop.scm +++ b/2d/game-loop.scm @@ -42,8 +42,9 @@ on-mouse-motion-hook on-mouse-button-down-hook on-mouse-button-up-hook + current-fps run-game-loop - current-fps)) + quit-game-loop!)) ;;; ;;; Constants @@ -57,6 +58,7 @@ ;;; (define *fps* 0) +(define *running* #f) ;;; ;;; Hooks @@ -200,23 +202,30 @@ INPUT, OUTPUT, and ERROR ports." (define (game-loop last-time next-time accumulator) "Runs input, render, and update hooks." - (handle-events) - (let* ((time (SDL:get-ticks)) - (dt (- time last-time)) - (accumulator (+ accumulator dt)) - (remainder (update accumulator))) - (run-repl) - (render) - (accumulate-fps! dt) - (SDL:delay (time-left (SDL:get-ticks) next-time)) - (game-loop time - (+ next-time tick-interval) - remainder))) + (when *running* + (handle-events) + (let* ((time (SDL:get-ticks)) + (dt (- time last-time)) + (accumulator (+ accumulator dt)) + (remainder (update accumulator))) + (run-repl) + (render) + (accumulate-fps! dt) + (SDL:delay (time-left (SDL:get-ticks) next-time)) + (game-loop time + (+ next-time tick-interval) + remainder)))) (define (run-game-loop) "Spawns a REPL server and starts the main game loop." + (set! *running* #t) (spawn-server) ;;(lock-mutex game-loop-mutex) (agenda-schedule show-fps) (let ((time (SDL:get-ticks))) (game-loop time (+ time tick-interval) 0))) + +(define (quit-game-loop!) + "Tell the game loop to finish up the current frame and then +terminate." + (set! *running* #f)) diff --git a/2d/game.scm b/2d/game.scm index e20638c..cb043ec 100644 --- a/2d/game.scm +++ b/2d/game.scm @@ -25,16 +25,11 @@ #:use-module (srfi srfi-9) #:use-module (2d game-loop) #:use-module (2d window) - #:use-module (2d vector2) - #:export ( - make-game - define-game - game? - game-title - game-resolution - game-fullscreen? - game-first-scene - run-game)) + #:use-module (2d vector2)) + +;;; +;;; Games +;;; (define-record-type (%make-game title resolution fullscreen first-scene) @@ -64,3 +59,13 @@ value." (game-fullscreen? game)) (run-game-loop) (close-window)) + +(export + make-game + define-game + game? + game-title + game-resolution + game-fullscreen? + game-first-scene + run-game) -- cgit v1.2.3