summaryrefslogtreecommitdiff
path: root/2d
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2014-01-26 14:37:23 -0500
committerDavid Thompson <dthompson2@worcester.edu>2014-01-26 14:37:23 -0500
commit446750df6a786a8fcce7309e2f9b145e53e24e4f (patch)
tree4672ebcc520554b6245eea10849b0ab7ce5b87dd /2d
parent0b957a40ae993bf337830bc30915a13c0be99af3 (diff)
Move SDL event handling to a separate module.
* 2d/event.scm: New module. * 2d/game.scm: Remove event handling code. * 2d/keyboard.scm: Import (2d event) instead of (2d game). * 2d/mouse.scm: Import (2d event) instead of (2d game). * 2d/window.scm: Import (2d event) instead of (2d game).
Diffstat (limited to '2d')
-rw-r--r--2d/event.scm45
-rw-r--r--2d/game.scm28
-rw-r--r--2d/keyboard.scm2
-rw-r--r--2d/mouse.scm2
-rw-r--r--2d/window.scm2
5 files changed, 51 insertions, 28 deletions
diff --git a/2d/event.scm b/2d/event.scm
new file mode 100644
index 0000000..1dcaea5
--- /dev/null
+++ b/2d/event.scm
@@ -0,0 +1,45 @@
+;;; guile-2d
+;;; Copyright (C) 2014 David Thompson <dthompson2@worcester.edu>
+;;;
+;;; Guile-2d is free software: you can redistribute it and/or modify it
+;;; under the terms of the GNU Lesser General Public License as
+;;; published by the Free Software Foundation, either version 3 of the
+;;; License, or (at your option) any later version.
+;;;
+;;; Guile-2d is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this program. If not, see
+;;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; SDL event handlers.
+;;
+;;; Code:
+
+(define-module (2d event)
+ #:use-module ((sdl sdl) #:prefix SDL:)
+ #:export (process-events
+ register-event-handler))
+
+(define process-events
+ (let ((e (SDL:make-event)))
+ (lambda ()
+ "Process all events in the input event queue."
+ (while (SDL:poll-event e)
+ (handle-event e)))))
+
+(define event-handlers (make-hash-table))
+
+(define (register-event-handler event-type proc)
+ (hashq-set! event-handlers event-type proc))
+
+(define (handle-event e)
+ "Run the relevant hook for the event E."
+ (let ((handle (hashq-get-handle event-handlers (SDL:event:type e))))
+ (when handle
+ ((cdr handle) e))))
diff --git a/2d/game.scm b/2d/game.scm
index eb297a9..847defa 100644
--- a/2d/game.scm
+++ b/2d/game.scm
@@ -27,6 +27,7 @@
#:use-module (figl gl)
#:use-module (2d agenda)
#:use-module (2d coroutine)
+ #:use-module (2d event)
#:use-module (2d game)
#:use-module (2d signals)
#:use-module (2d vector2)
@@ -39,8 +40,7 @@
pause-game
resume-game
game-running?
- game-paused?
- register-event-handler))
+ game-paused?))
;;;
;;; Game Loop
@@ -80,7 +80,7 @@
many times as `tick-interval` can divide ACCUMULATOR. The return value
is the unused accumulator time."
(while (>= (accumulator) (tick-interval))
- (read-input)
+ (process-events)
(tick-agenda! *global-agenda*)
(accumulator (- (accumulator) (tick-interval)))))
@@ -141,25 +141,3 @@ milliseconds of the last iteration of the loop."
(define (quit-game)
"Finish the current frame and terminate the game loop."
(game-loop-status 'stopped))
-
-;;;
-;;; Event Handling
-;;;
-
-(define read-input
- (let ((e (SDL:make-event)))
- (lambda ()
- "Process all events in the input event queue."
- (while (SDL:poll-event e)
- (handle-event e)))))
-
-(define event-handlers (make-hash-table))
-
-(define (register-event-handler event-type proc)
- (hashq-set! event-handlers event-type proc))
-
-(define (handle-event e)
- "Run the relevant hook for the event E."
- (let ((handle (hashq-get-handle event-handlers (SDL:event:type e))))
- (when handle
- ((cdr handle) e))))
diff --git a/2d/keyboard.scm b/2d/keyboard.scm
index ec9f1a4..c966231 100644
--- a/2d/keyboard.scm
+++ b/2d/keyboard.scm
@@ -23,7 +23,7 @@
(define-module (2d keyboard)
#:use-module ((sdl sdl) #:prefix SDL:)
- #:use-module (2d game)
+ #:use-module (2d event)
#:use-module (2d signals)
#:use-module (2d vector2)
#:export (key-press-hook
diff --git a/2d/mouse.scm b/2d/mouse.scm
index b132b96..21e2e48 100644
--- a/2d/mouse.scm
+++ b/2d/mouse.scm
@@ -23,7 +23,7 @@
(define-module (2d mouse)
#:use-module ((sdl sdl) #:prefix SDL:)
- #:use-module (2d game)
+ #:use-module (2d event)
#:use-module (2d signals)
#:use-module (2d vector2)
#:export (mouse-move-hook
diff --git a/2d/window.scm b/2d/window.scm
index 238860b..416a8cf 100644
--- a/2d/window.scm
+++ b/2d/window.scm
@@ -26,7 +26,7 @@
#:use-module (figl gl)
#:use-module ((sdl sdl) #:prefix SDL:)
#:use-module ((sdl mixer) #:prefix SDL:)
- #:use-module (2d game)
+ #:use-module (2d event)
#:use-module (2d signals)
#:use-module (2d vector2)
#:export (<window>