-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinput.js
More file actions
104 lines (89 loc) · 2.59 KB
/
input.js
File metadata and controls
104 lines (89 loc) · 2.59 KB
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
"use strict";
var input =
{
relativeCursorX: 0,
relativeCursorY: 0,
keyStates: {},
bindings: {},
reverseBindings: {},
keyPressHandlers: {},
keyUpHandlers: {},
mouseMoveHandler: null,
// Returns true if key for the given binding is down.
keyDown: function(bindingName)
{
return this.keyStates[this.bindings[bindingName]];
},
// Set all key bindings at the same time.
setBindings: function(bindings)
{
this.bindings = {};
this.reverseBindings = {};
for (var bindingName in bindings) {
if (bindings.hasOwnProperty(bindingName)) {
this.bindings[bindingName] = bindings[bindingName];
this.reverseBindings[bindings[bindingName]] = bindingName;
}
}
},
// Register handler for key down events.
registerKeyPressHandler: function(bindingName, handler)
{
this.keyPressHandlers[bindingName] = handler;
},
// Register handler for key up events.
registerKeyUpHandler: function(bindingName, handler)
{
this.keyUpHandlers[bindingName] = handler;
},
// Register handler for mouse movement.
registerMouseMoveHandler: function(handler)
{
this.mouseMoveHandler = handler;
},
// Initialize input system.
init: function(mouseInputElement)
{
var self = this;
function onkeydown(e) {
if (!self.keyStates[e.keyCode]){
self.keyStates[e.keyCode] = true
var bindingName = self.reverseBindings[e.keyCode];
if (self.keyPressHandlers.hasOwnProperty(bindingName)) {
self.keyPressHandlers[bindingName]();
return false;
}
}
};
document.onkeydown = onkeydown;
function onkeyup(e) {
if (self.keyStates[e.keyCode]){
self.keyStates[e.keyCode] = null;
var bindingName = self.reverseBindings[e.keyCode];
if (self.keyUpHandlers.hasOwnProperty(bindingName)) {
self.keyUpHandlers[bindingName]();
return false;
}
}
};
document.onkeyup = onkeyup;
mouseInputElement.onmousedown = function(e){
if (self.keyPressHandlers.hasOwnProperty("Mouse Button"))
self.keyPressHandlers["Mouse Button"]();
onkeydown({ keyCode: "Mouse Button" });
};
mouseInputElement.onmouseup = function(e){
if (self.keyUpHandlers.hasOwnProperty("Mouse Button"))
self.keyUpHandlers["Mouse Button"]();
onkeyup({ keyCode: "Mouse Button" });
};
mouseInputElement.onmousemove = function(e){
var elemRect = mouseInputElement.getBoundingClientRect();
self.relativeCursorX = (e.clientX - elemRect.left) / mouseInputElement.offsetWidth;
self.relativeCursorY = (e.clientY - elemRect.top) / mouseInputElement.offsetHeight;
if (self.mouseMoveHandler) {
self.mouseMoveHandler(self.relativeCursorX, self.relativeCursorY);
}
};
}
};