From 7a8b86f6164bc35f7a26817d19a40ce841ddb02c Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 8 Nov 2014 08:26:57 -0500 Subject: input: Move keyboard module to sly/input directory. * sly/keyboard.scm: Delete. * sly/input/keyboard.scm: New file. * Makefile.am (SOURCES): Add new file. Delete old file. * examples/common.scm: Use (sly input keyboard). * examples/tilemap.scm: Likewise. --- Makefile.am | 2 +- examples/common.scm | 2 +- examples/tilemap.scm | 2 +- sly/input/keyboard.scm | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++ sly/keyboard.scm | 88 -------------------------------------------------- 5 files changed, 91 insertions(+), 91 deletions(-) create mode 100644 sly/input/keyboard.scm delete mode 100644 sly/keyboard.scm diff --git a/Makefile.am b/Makefile.am index 384556c..e3e28d2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,7 +32,7 @@ SOURCES = \ sly/font.scm \ sly/fps.scm \ sly/game.scm \ - sly/keyboard.scm \ + sly/input/keyboard.scm \ sly/live-reload.scm \ sly/math.scm \ sly/math/quaternion.scm \ diff --git a/examples/common.scm b/examples/common.scm index f3c91b2..46797bb 100644 --- a/examples/common.scm +++ b/examples/common.scm @@ -18,7 +18,7 @@ (use-modules (sly agenda) (sly fps) (sly game) - (sly keyboard) + (sly input keyboard) (sly repl) (sly signal) (sly render sprite) diff --git a/examples/tilemap.scm b/examples/tilemap.scm index d05f8d9..3c0d6f0 100644 --- a/examples/tilemap.scm +++ b/examples/tilemap.scm @@ -31,7 +31,7 @@ (sly color) (sly transition) (sly utils) - (sly keyboard)) + (sly input keyboard)) (load "common.scm") diff --git a/sly/input/keyboard.scm b/sly/input/keyboard.scm new file mode 100644 index 0000000..e197424 --- /dev/null +++ b/sly/input/keyboard.scm @@ -0,0 +1,88 @@ +;;; Sly +;;; Copyright (C) 2013, 2014 David Thompson +;;; +;;; This program is free software: you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License as +;;; published by the Free Software Foundation, either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; This program 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 +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see +;;; . + +;;; Commentary: +;; +;; Keyboard signals. +;; +;;; Code: + +(define-module (sly input keyboard) + #:use-module ((sdl sdl) #:prefix SDL:) + #:use-module (sly event) + #:use-module (sly signal) + #:use-module (sly math vector) + #:export (key-press-hook + key-release-hook + key-last-down + key-last-up + key-down? + key-directions + key-arrows + key-wasd)) + +(define key-press-hook (make-hook 2)) + +(register-event-handler + 'key-down + (lambda (e) + (run-hook key-press-hook + (SDL:event:key:keysym:sym e) + (SDL:event:key:keysym:unicode e)))) + +(define-signal key-last-down + (hook->signal key-press-hook 'none + (lambda (key unicode) + key))) + +(define key-release-hook (make-hook 2)) + +(register-event-handler + 'key-up + (lambda (e) + (run-hook key-release-hook + (SDL:event:key:keysym:sym e) + (SDL:event:key:keysym:unicode e)))) + +(define-signal key-last-up + (hook->signal key-release-hook 'none + (lambda (key unicode) + key))) + +(define (key-down? key) + "Create a signal for the state of KEY. The signal value is #t when +KEY is pressed or #f otherwise." + (define (same-key? other-key) + (eq? key other-key)) + (define (key-filter value signal) + (signal-constant value (signal-filter same-key? #f signal))) + (signal-merge (key-filter #f key-last-up) + (key-filter #t key-last-down))) + +(define (key-directions up down left right) + (signal-map (lambda (up? down? left? right?) + (vector2 (+ (if left? -1 0) + (if right? 1 0)) + (+ (if up? -1 0) + (if down? 1 0)))) + (key-down? up) + (key-down? down) + (key-down? left) + (key-down? right))) + +(define-signal key-arrows (key-directions 'up 'down 'left 'right)) +(define-signal key-wasd (key-directions 'w 's 'a 'd)) diff --git a/sly/keyboard.scm b/sly/keyboard.scm deleted file mode 100644 index b6db9c2..0000000 --- a/sly/keyboard.scm +++ /dev/null @@ -1,88 +0,0 @@ -;;; Sly -;;; Copyright (C) 2013, 2014 David Thompson -;;; -;;; This program is free software: you can redistribute it and/or -;;; modify it under the terms of the GNU General Public License as -;;; published by the Free Software Foundation, either version 3 of the -;;; License, or (at your option) any later version. -;;; -;;; This program 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 -;;; General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with this program. If not, see -;;; . - -;;; Commentary: -;; -;; Keyboard signals. -;; -;;; Code: - -(define-module (sly keyboard) - #:use-module ((sdl sdl) #:prefix SDL:) - #:use-module (sly event) - #:use-module (sly signal) - #:use-module (sly math vector) - #:export (key-press-hook - key-release-hook - key-last-down - key-last-up - key-down? - key-directions - key-arrows - key-wasd)) - -(define key-press-hook (make-hook 2)) - -(register-event-handler - 'key-down - (lambda (e) - (run-hook key-press-hook - (SDL:event:key:keysym:sym e) - (SDL:event:key:keysym:unicode e)))) - -(define-signal key-last-down - (hook->signal key-press-hook 'none - (lambda (key unicode) - key))) - -(define key-release-hook (make-hook 2)) - -(register-event-handler - 'key-up - (lambda (e) - (run-hook key-release-hook - (SDL:event:key:keysym:sym e) - (SDL:event:key:keysym:unicode e)))) - -(define-signal key-last-up - (hook->signal key-release-hook 'none - (lambda (key unicode) - key))) - -(define (key-down? key) - "Create a signal for the state of KEY. The signal value is #t when -KEY is pressed or #f otherwise." - (define (same-key? other-key) - (eq? key other-key)) - (define (key-filter value signal) - (signal-constant value (signal-filter same-key? #f signal))) - (signal-merge (key-filter #f key-last-up) - (key-filter #t key-last-down))) - -(define (key-directions up down left right) - (signal-map (lambda (up? down? left? right?) - (vector2 (+ (if left? -1 0) - (if right? 1 0)) - (+ (if up? -1 0) - (if down? 1 0)))) - (key-down? up) - (key-down? down) - (key-down? left) - (key-down? right))) - -(define-signal key-arrows (key-directions 'up 'down 'left 'right)) -(define-signal key-wasd (key-directions 'w 's 'a 'd)) -- cgit v1.2.3