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
|
--- Element used for grouping elements and demultiplexing input of different controller sets.
Demultiplexer = require "not.Element":extends()
function Demultiplexer:new (parent)
Demultiplexer.__super.new(self, parent)
self.children = {}
end
--- Calls function with parameters for each child.
-- @param func key of function to call
-- @param ... parameters passed to function
-- @return table with calls' results
function Demultiplexer:callEach (func, ...)
local results = {}
for _,child in ipairs(self.children) do
if type(child[func]) == "function" then
table.insert(results, child[func](child, ...))
end
end
return results
end
--- Calls function with parameters for one child based on controller set.
-- @param set controller set
-- @param func key of function to call
-- @param ... parameters passed to function
function Demultiplexer:callWithSet (set, func, ...)
for i,test in ipairs(Controller.getSets()) do
if test == set then
self.children[i][func](...)
return nil
end
end
end
function Demultiplexer:focus ()
self:callEach("focus")
self.focused = true
return true
end
function Demultiplexer:blur ()
self:callEach("blur")
self.focused = false
end
function Demultiplexer:draw (scale)
self:callEach("draw", scale)
end
function Demultiplexer:update (dt)
self:callEach("update", dt)
end
function Demultiplexer:controlpressed (set, action, key)
if self.focused then
self:callWithSet(set, "controlpressed", set, action, key)
end
end
function Demultiplexer:controlreleased (set, action, key)
if self.focused then
self:callWithSet(set, "controlreleased", set, action, key)
end
end
return Demultiplexer
|