-
Notifications
You must be signed in to change notification settings - Fork 0
/
input.lua
65 lines (56 loc) · 1.09 KB
/
input.lua
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
Input = {
tap = {},
hold = {},
translator = {
[" "] = {"space", "jump"},
up = {"jump"},
w = {"up", "jump"},
a = {"left"},
s = {"down"},
d = {"right"},
z = {"jump"},
lctrl = {"ctrl"},
rctrl = {"ctrl"},
lalt = {"alt"},
ralt = {"alt"},
lshift = {"shift"},
rshift = {"shift"},
["return"] = {"enter"},
}
}
local mt = {}
function mt.__index(self, key)
if self.tap[key] then
return "tap"
elseif self.hold[key] then
return "hold"
end
return nil
end
function Input:init()
love.keyboard.setKeyRepeat( 0.500, 0.125 )
return setmetatable(self, mt)
end
function Input:translate(key, value)
self.tap[key] = value
self.hold[key] = value
local tr = self.translator[key]
if tr then
for _, v in ipairs(tr) do
self.tap[v] = value
self.hold[v] = value
end
end
return key
end
function Input:keypressed(key)
return self:translate(key, true)
end
function Input:update(dt)
for k, _ in pairs(self.hold) do
self.tap[k] = nil
end
end
function Input:keyreleased(key)
return self:translate(key, nil)
end