1require "theme"
2
3finger = {
4	nam = 'finger';
5	object_type = true;
6	system_type = true;
7	fingers_list = { };
8	add = function(s, press, fid, x, y, px, py)
9		if press then
10			local v = s:lookup(fid)
11			if v then
12				v.x, v.y, v.px, v.py = x, y, px, py
13			else
14				stead.table.insert(s.fingers_list,
15					{ id = fid, x = x, y = y, px = px, py = py })
16			end
17			return
18		end
19		local v, k
20		v, k = s:lookup(fid)
21		if k then
22			stead.table.remove(s.fingers_list, k)
23			return
24		end
25	end;
26	list = function(s)
27		local k,v
28		local new = {}
29		for k,v in stead.ipairs(s.fingers_list) do
30			local x, y, pressure
31			x, y, pressure = stead.finger_pos(v.id)
32			if x then
33				v.x, v.y, v.pressure = x, y, pressure
34				stead.table.insert(new, v)
35			end
36		end
37		s.fingers_list = new
38		return new
39	end;
40	get = function(s, fid)
41		local v,k
42		local x, y, pressure
43		x, y, pressure = stead.finger_pos(fid)
44		if not x then
45			v, k = s:lookup(fid)
46			if k then
47				stead.table.remove(s.fingers_list, k)
48			end
49			return
50		end
51		return x, y, pressure
52	end;
53	lookup = function(s, fid)
54		local k,v
55		for k,v in stead.ipairs(s.fingers_list) do
56			if v.id == fid then
57				return v, k
58			end
59		end
60	end;
61}
62
63stead.module_init(function()
64	input.finger = function(s, press, fid, x, y, px, py, ...)
65		finger:add(press, fid, x, y, px, py, ...)
66		local cmd = 'finger '
67		cmd = cmd..stead.tostr(press)..','..stead.tostr(fid)..',' .. x .. ','.. y;
68		if px then
69			cmd = cmd .. ',' .. px .. ',' .. py
70		end
71		return cmd
72	end
73end)
74
75game.action = stead.hook(game.action,
76function(f, s, cmd, press, fid, x, y, px, py, ...)
77	if cmd == 'finger' then
78		local r,v
79		local x2 = px
80		local y2 = py
81
82		if stead.here().finger then
83			s = stead.here()
84		end
85
86		if not s.finger then
87			return
88		end
89
90		if stead.tonum(fid) then
91			fid = stead.tonum(mb)
92		end
93
94		if stead.tonum(px) then
95			x2 = stead.tonum(px)
96		end
97
98		if stead.tonum(py) then
99			y2 = stead.tonum(py)
100		end
101
102		if press == 'true' then
103			press = true
104		else
105			press = false
106		end
107		r,v = stead.call(s, 'finger', press, fid, stead.tonum(x), stead.tonum(y), x2, y2, ...);
108		return r,v
109	end
110	return f(s, cmd, press, fid, x, y, px, py, ...)
111end)
112-- vim:ts=4
113