init.lua 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. controls = {}
  2. controls.players = {}
  3. controls.registered_on_press = {}
  4. function controls.register_on_press(func)
  5. controls.registered_on_press[#controls.registered_on_press+1] = func
  6. end
  7. controls.registered_on_release = {}
  8. function controls.register_on_release(func)
  9. controls.registered_on_release[#controls.registered_on_release+1] = func
  10. end
  11. controls.registered_on_hold = {}
  12. function controls.register_on_hold(func)
  13. controls.registered_on_hold[#controls.registered_on_hold+1]=func
  14. end
  15. minetest.register_on_joinplayer(function(player)
  16. local name = player:get_player_name()
  17. controls.players[name] = {
  18. up={false},
  19. down={false},
  20. left={false},
  21. right={false},
  22. jump={false},
  23. aux1={false},
  24. sneak={false},
  25. dig={false},
  26. place={false},
  27. LMB={false},
  28. RMB={false},
  29. zoom = {false},
  30. }
  31. end)
  32. minetest.register_on_leaveplayer(function(player)
  33. local name = player:get_player_name()
  34. controls.players[name] = nil
  35. end)
  36. minetest.register_globalstep(function(dtime)
  37. for _, player in pairs(minetest.get_connected_players()) do
  38. local player_name = player:get_player_name()
  39. local player_controls = player:get_player_control()
  40. for cname, cbool in pairs(player_controls) do
  41. --Press a key
  42. if cbool==true and controls.players[player_name][cname][1]==false then
  43. for _, func in pairs(controls.registered_on_press) do
  44. func(player, cname)
  45. end
  46. controls.players[player_name][cname] = {true, os.clock()}
  47. elseif cbool==true and controls.players[player_name][cname][1]==true then
  48. for _, func in pairs(controls.registered_on_hold) do
  49. func(player, cname, os.clock()-controls.players[player_name][cname][2])
  50. end
  51. --Release a key
  52. elseif cbool==false and controls.players[player_name][cname][1]==true then
  53. for _, func in pairs(controls.registered_on_release) do
  54. func(player, cname, os.clock()-controls.players[player_name][cname][2])
  55. end
  56. controls.players[player_name][cname] = {false}
  57. end
  58. end
  59. end
  60. end)