forked from Shirakumo/trial
-
Notifications
You must be signed in to change notification settings - Fork 0
/
input.lisp
112 lines (86 loc) · 2.93 KB
/
input.lisp
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
103
104
105
106
107
108
109
110
111
112
#|
This file is a part of trial
(c) 2016 Shirakumo http://tymoon.eu ([email protected])
Author: Nicolas Hafner <[email protected]>
|#
(in-package #:org.shirakumo.fraf.trial)
(defclass input-event (event)
())
(defclass keyboard-event (input-event)
())
(defclass key-event (keyboard-event)
((key :initarg :key :reader key)
(modifiers :initarg :modifiers :reader modifiers))
(:default-initargs
:key (error "KEY required.")
:modifiers ()))
(defmethod print-object ((event key-event) stream)
(print-unreadable-object (event stream :type T)
(format stream "~a" (key event))))
(defclass key-press (key-event)
())
(defclass key-release (key-event)
())
(defclass text-entered (keyboard-event)
((text :initarg :text :reader text))
(:default-initargs
:text (error "TEXT required.")))
(defclass mouse-event (input-event)
((pos :initarg :pos :reader pos))
(:default-initargs
:pos (error "POS required.")))
(defclass mouse-button-event (mouse-event)
((button :initarg :button :reader button))
(:default-initargs
:button (error "BUTTON required.")))
(defmethod print-object ((event mouse-button-event) stream)
(print-unreadable-object (event stream :type T)
(format stream "~a" (button event))))
(defclass mouse-press (mouse-button-event)
())
(defclass mouse-release (mouse-button-event)
())
(defclass mouse-scroll (mouse-event)
((delta :initarg :delta :reader delta))
(:default-initargs
:delta (error "DELTA required.")))
(defmethod print-object ((event mouse-scroll) stream)
(print-unreadable-object (event stream :type T)
(format stream "~a" (delta event))))
(defclass mouse-move (mouse-event)
((old-pos :initarg :old-pos :reader old-pos))
(:default-initargs
:old-pos (error "OLD-POS required.")))
(defmethod print-object ((event mouse-move) stream)
(print-unreadable-object (event stream :type T)
(format stream "~a => ~a" (old-pos event) (pos event))))
(defclass gamepad-event (input-event)
((device :initarg :device :reader device))
(:default-initargs
:device (error "DEVICE required.")))
(defclass gamepad-attach (gamepad-event)
())
(defclass gamepad-remove (gamepad-event)
())
(defclass gamepad-press (gamepad-event)
((button :initarg :button :reader button))
(:default-initargs
:button (error "BUTTON required.")))
(defclass gamepad-release (gamepad-event)
((button :initarg :button :reader button))
(:default-initargs
:button (error "BUTTON required.")))
(defclass gamepad-move (gamepad-event)
((axis :initarg :axis :reader axis)
(old-pos :initarg :old-pos :reader old-pos)
(pos :initarg :pos :reader pos))
(:default-initargs
:axis (error "AXIS required.")
:old-pos (error "OLD-POS required.")
:pos (error "POS required.")))
(define-uniform-retention key (key-press key-release key)
key)
(define-uniform-retention mouse (mouse-press mouse-release button)
button)
(define-uniform-retention gamepad (gamepad-press gamepad-release button)
button)