diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..ba7416d --- /dev/null +++ b/init.lua @@ -0,0 +1,63 @@ +controls = {} +controls.players = {} + +controls.registered_on_press = {} +function controls.register_on_press(func) + controls.registered_on_press[#controls.registered_on_press+1] = func +end + +controls.registered_on_release = {} +function controls.register_on_release(func) + controls.registered_on_release[#controls.registered_on_release+1] = func +end + +controls.registered_on_hold = {} +function controls.register_on_hold(func) + controls.registered_on_hold[#controls.registered_on_hold+1]=func +end + +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} + } +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + controls.players[name] = nil +end) + +minetest.register_globalstep(function(dtime) + for _, player in pairs(minetest.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 + controls.players[player_name][cname] = {true, os.clock()} + for _, func in pairs(controls.registered_on_press) do + func(player, cname) + end + 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 + controls.players[player_name][cname] = {false} + for _, func in pairs(controls.registered_on_release) do + func(player, cname) + end + end + end + end +end) diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..8fab3aa --- /dev/null +++ b/mod.conf @@ -0,0 +1 @@ +name=controls