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