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