From 1a8ffb0ea7233c55148118c09a7b281673df86c2 Mon Sep 17 00:00:00 2001 From: Jordan Russell Date: Thu, 10 Jul 2014 21:29:02 -0700 Subject: Add joystick module. * sly/joystick.scm: New file. * examples/joystick.scm: New file. * Makefile.am (SOURCES): Add sly/joystick.scm. * TODO.org (Input): Mark as 'done'. * sly/math.scm (linear-scale): New procedure. --- examples/joystick.scm | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 examples/joystick.scm (limited to 'examples') diff --git a/examples/joystick.scm b/examples/joystick.scm new file mode 100644 index 0000000..3df938d --- /dev/null +++ b/examples/joystick.scm @@ -0,0 +1,102 @@ +;;; Sly +;;; Copyright (C) 2014 Jordan Russell +;;; +;;; 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: +;; +;; Joystick example code +;; +;;; Code: + +(use-modules + (sly game) + (sly repl) + (sly sprite) + (sly texture) + (sly joystick) + (sly signal) + (sly window) + (sly vector) + (sly font)) + +(open-window) +(start-sly-repl) +(enable-sprites) +(enable-joystick) +(enable-fonts) + +(define default-font (load-default-font)) + +(define resolution (vector 640 480)) + +(add-hook! window-close-hook stop-game-loop) + +(define p1-texture (load-texture "images/p1_front.png")) + +(define-signal p1-position + (signal-fold v+ (vector 320 240) + (signal-map + (lambda (v) + (v* (vector 8 8) v)) + (signal-sample 1 + (make-directional-signal 0 0 1))))) + +(define* (button-caption-signal text button #:optional (joystick 0)) + (signal-map (lambda (x) + (if x text "")) + (button-down? joystick button))) + +(define-signal p1-caption + (signal-map (lambda (text pos) + (make-label default-font + text + (v+ (vector -76 -90) pos))) + (signal-merge + (button-caption-signal "Hello there" 0) + (button-caption-signal "Thanks for pressing button 1" 1) + (button-caption-signal "This is the other caption" 2) + (button-caption-signal "This is the other other caption" 3)) + p1-position)) + +(define (draw-p1-caption dt alpha) + (draw-label (signal-ref p1-caption))) + +(define (draw-p1 dt alpha) + (draw-sprite (make-sprite p1-texture + #:position (signal-ref p1-position)))) + +(add-hook! draw-hook draw-p1) + +(add-hook! draw-hook draw-p1-caption) + +(add-hook! joystick-axis-hook + (lambda (which axis value) + (format #t "joystick: ~d axis: ~d raw-value: ~d value: ~f~%" + which axis value (axis-scale value)))) + +(add-hook! joystick-button-press-hook + (lambda (which button) + (format #t "button-press: (joystick: ~d button: ~d)~%" + which button))) + +(add-hook! joystick-button-release-hook + (lambda (which button) + (format #t "button-release: (joystick: ~d button: ~d)~%" + which button))) + +(with-window (make-window #:title "Joystick test" + #:resolution resolution) + (start-game-loop)) -- cgit v1.2.3