1 local get_connected_players = minetest.get_connected_players
9 controls.registered_on_press = {}
10 function controls.register_on_press(func)
11 controls.registered_on_press[#controls.registered_on_press+1] = func
14 controls.registered_on_release = {}
15 function controls.register_on_release(func)
16 controls.registered_on_release[#controls.registered_on_release+1] = func
19 controls.registered_on_hold = {}
20 function controls.register_on_hold(func)
21 controls.registered_on_hold[#controls.registered_on_hold+1]=func
24 local known_controls = {
36 minetest.register_on_joinplayer(function(player)
37 local name = player:get_player_name()
38 controls.players[name] = {}
39 for cname,_ in pairs(known_controls) do
40 controls.players[name][cname] = { false }
44 minetest.register_on_leaveplayer(function(player)
45 local name = player:get_player_name()
46 controls.players[name] = nil
49 minetest.register_globalstep(function(dtime)
50 for _, player in pairs(get_connected_players()) do
51 local player_name = player:get_player_name()
52 local player_controls = player:get_player_control()
53 if controls.players[player_name] then
54 for cname, cbool in pairs(player_controls) do
55 if known_controls[cname] == true then
57 if cbool == true and controls.players[player_name][cname][1] == false then
58 for _, func in pairs(controls.registered_on_press) do
61 controls.players[player_name][cname] = {true, clock()}
62 elseif cbool == true and controls.players[player_name][cname][1] == true then
63 for _, func in pairs(controls.registered_on_hold) do
64 func(player, cname, clock()-controls.players[player_name][cname][2])
67 elseif cbool == false and controls.players[player_name][cname][1] == true then
68 for _, func in pairs(controls.registered_on_release) do
69 func(player, cname, clock()-controls.players[player_name][cname][2])
71 controls.players[player_name][cname] = {false}