summaryrefslogtreecommitdiff
path: root/examples/joystick.scm
blob: 49e61ae590da244cc772910b0841114513345c25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
;;; Sly
;;; Copyright (C) 2014 Jordan Russell <jordan.likes.curry@gmail.com>
;;;
;;; 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
;;; <http://www.gnu.org/licenses/>.

;;; Commentary:
;;
;; Joystick example code
;;
;;; Code:

(use-modules
 (sly game)
 (sly repl)
 (sly render sprite)
 (sly render texture)
 (sly input joystick)
 (sly signal)
 (sly window)
 (sly vector)
 (sly render 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))