+local get_connected_players = minetest.get_connected_players
+local clock = os.clock
+
+local pairs = pairs
+
controls = {}
controls.players = {}
controls.registered_on_hold[#controls.registered_on_hold+1]=func
end
+local known_controls = {
+ jump = true,
+ right = true,
+ left = true,
+ LMB = true,
+ RMB = true,
+ sneak = true,
+ aux1 = true,
+ down = true,
+ up = true,
+}
+
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
- controls.players[name] = {
- jump={false},
- right={false},
- left={false},
- LMB={false},
- RMB={false},
- sneak={false},
- aux1={false},
- down={false},
- up={false}
- }
+ controls.players[name] = {}
+ for cname,_ in pairs(known_controls) do
+ controls.players[name][cname] = { false }
+ end
end)
minetest.register_on_leaveplayer(function(player)
end)
minetest.register_globalstep(function(dtime)
- for _, player in pairs(minetest.get_connected_players()) do
+ for _, player in pairs(get_connected_players()) do
local player_name = player:get_player_name()
local player_controls = player:get_player_control()
- for cname, cbool in pairs(player_controls) do
- --Press a key
- if cbool==true and controls.players[player_name][cname][1]==false then
- for _, func in pairs(controls.registered_on_press) do
- func(player, cname)
- end
- controls.players[player_name][cname] = {true, os.clock()}
- elseif cbool==true and controls.players[player_name][cname][1]==true then
- for _, func in pairs(controls.registered_on_hold) do
- func(player, cname, os.clock()-controls.players[player_name][cname][2])
- end
- --Release a key
- elseif cbool==false and controls.players[player_name][cname][1]==true then
- for _, func in pairs(controls.registered_on_release) do
- func(player, cname, os.clock()-controls.players[player_name][cname][2])
+ if controls.players[player_name] then
+ for cname, cbool in pairs(player_controls) do
+ if known_controls[cname] == true then
+ --Press a key
+ if cbool == true and controls.players[player_name][cname][1] == false then
+ for _, func in pairs(controls.registered_on_press) do
+ func(player, cname)
+ end
+ controls.players[player_name][cname] = {true, clock()}
+ elseif cbool == true and controls.players[player_name][cname][1] == true then
+ for _, func in pairs(controls.registered_on_hold) do
+ func(player, cname, clock()-controls.players[player_name][cname][2])
+ end
+ --Release a key
+ elseif cbool == false and controls.players[player_name][cname][1] == true then
+ for _, func in pairs(controls.registered_on_release) do
+ func(player, cname, clock()-controls.players[player_name][cname][2])
+ end
+ controls.players[player_name][cname] = {false}
+ end
end
- controls.players[player_name][cname] = {false}
end
end
end