summaryrefslogtreecommitdiffhomepage
path: root/not/Demultiplexer.lua
blob: 468f0071da7b6a80911bd129a06dd9b1da757dc4 (plain)
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
--- 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:callOne (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)
	self:callOne(set, "controlpressed", set, action, key)
end

function Demultiplexer:controlreleased (set, action, key)
	self:callOne(set, "controlreleased", set, action, key)
end

return Demultiplexer