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
|
-- `Controller`
-- Module to manage player input.
-- It uses `love.keypressed`, `love.keyreleased`, `love.gamepadreleased`, `love.gamepadpressed`, `love.joystickadded`, so be sure not to use them by yourself.
-- Rather than that use functions provided by this module: `Controller.controlpressed` and `Controller.controlreleased`.
-- For information on additional functions, look below.
-- Namespace
Controller = {}
Controller.sets = {}
-- Declared to avoid calling nil. Be sure to define yours after this line is performed.
function Controller.controlpressed(set, action, key) end
function Controller.controlreleased(set, action, key) end
-- Create new controls set.
function Controller.registerSet(left, right, up, down, attack, jump, joystick)
local set = {}
set.left = left or "left"
set.right = right or "right"
set.up = up or "up"
set.down = down or "down"
set.attack = attack or "return"
set.jump = jump or "rshift"
set.joystick = joystick
table.insert(Controller.sets, set)
print(set, left, right, up, down, attack, jump, joystick)
return set
end
-- Tests all sets if they have control assigned to given key and joystick.
function Controller.testSets(key, joystick)
for i,set in pairs(Controller.sets) do
local action = Controller.testControl(set, key, joystick)
if action ~= nil then
return set, action
end
end
return nil, nil
end
-- Tests given set if it has controll assigned to given key and joystick.
function Controller.testControl(set, key, joystick)
-- First test if it is joystick and if it is correct one
if joystick == set.joystick then
if key == set.left then
return "left"
elseif key == set.right then
return "right"
elseif key == set.up then
return "up"
elseif key == set.down then
return "down"
elseif key == set.attack then
return "attack"
elseif key == set.jump then
return "jump"
end
end
end
-- Checks if given action of given set is down
function Controller.isDown(set, action)
if set ~= nil then
if set.joystick == nil then
return love.keyboard.isDown(set[action])
else
return set.joystick:isGamepadDown(set[action])
end
end
end
-- Callbacks from LÖVE2D
-- Create new sets when new joystick is added
function Controller.joystickadded(joystick)
Controller.registerSet("dpleft", "dpright", "dpup", "dpdown", "a", "b", joystick)
end
-- Gamepad input callbacks
function Controller.gamepadpressed(joystick, key)
local set, action = Controller.testSets(key, joystick)
print(joystick, set, action, key)
Controller.controlpressed(set, action, key)
end
function Controller.gamepadreleased(joystick, key)
local set, action = Controller.testSets(key, joystick)
Controller.controlreleased(set, action, key)
end
-- Keyboard input callbacks
function Controller.keypressed(key)
local set, action = Controller.testSets(key, nil)
print(nil, set, action, key)
Controller.controlpressed(set, action, key)
end
function Controller.keyreleased(key)
local set, action = Controller.testSets(key, nil)
Controller.controlreleased(set, action, key)
end
|