]> git.lizzy.rs Git - Crafter.git/blobdiff - mods/itemhandling/magnet.lua
Add a sound buffer to item magnet
[Crafter.git] / mods / itemhandling / magnet.lua
index 1f4c936472792e3ffb5eaefa11268c8a00fe0426..a93cdc03b4689ea8951afbc4b0322506fd146dc0 100644 (file)
@@ -1,48 +1,69 @@
+local minetest,math,vector,ipairs = minetest,math,vector,ipairs
+local pool = {}
+
+local name
+minetest.register_on_joinplayer(function(player)
+       name = player:get_player_name()
+       pool[name] = 0
+end)
+
+local name
+minetest.register_on_leaveplayer(function(player)
+       name = player:get_player_name()
+       pool[name] = nil
+end)
+
 --The item collection magnet
---Item collection
-minetest.register_globalstep(function(dtime)
-       --collection
-       for _,player in ipairs(minetest.get_connected_players()) do
-               --don't magnetize to dead players
-               if player:get_hp() > 0 then
-            local meta = player:get_meta()
-            local experience_collection_buffer = meta:get_float("experience_collection_buffer")
-            if experience_collection_buffer > 0 then
-                experience_collection_buffer = experience_collection_buffer - dtime
-                if experience_collection_buffer < 0 then
-                    experience_collection_buffer = 0
-                end
-            end
-                            
-            meta:set_float("experience_collection_buffer", experience_collection_buffer)
-                            
-                       local pos = player:get_pos()
-                       local inv = player:get_inventory()
-                       --radial detection
-                       for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y+0.5,z=pos.z}, 2)) do
-                               if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
-                                       local pos2 = object:get_pos()
-                                       local diff = vector.subtract(pos2,pos).y
-                                       if diff >= 0 and inv and inv:room_for_item("main", ItemStack(object:get_luaentity().itemstring)) then
-                                               if object:get_luaentity().collectable == true and object:get_luaentity().collected == false then
-                                                       minetest.sound_play("pickup", {
-                                                               to_player = player:get_player_name(),
-                                                               gain = 0.4,
-                                                               pitch = math.random(60,100)/100
-                                                       })
-                                                       inv:add_item("main", ItemStack(object:get_luaentity().itemstring))
-                                                       object:get_luaentity().collector = player:get_player_name()
-                                                       object:get_luaentity().collected = true
-                                                        -- print("Set flag at item: "..dump(object:get_pos()))
-                                                       --object:moveto({x=pos.x,y=pos.y+eye_height,z=pos.z,continuous=true})
-                                                       
-                                               end
+local name
+local pos
+local pos2
+local diff
+local inv
+local entity
+local tick = false
+local function magnet(player)
+       --don't magnetize to dead players
+       if player:get_hp() > 0 then
+               name = player:get_player_name()
+               pos = player:get_pos()
+               inv = player:get_inventory()
+               if tick == true and pool[name] > 0 then
+                       minetest.sound_play("pickup", {
+                               to_player = player:get_player_name(),
+                               gain = 0.4,
+                               pitch = math.random(60,100)/100
+                       })
+                       pool[name] = pool[name] - 1
+               end
+               --radial detection
+               for _,object in ipairs(minetest.get_objects_inside_radius({x=pos.x,y=pos.y+0.5,z=pos.z}, 2)) do
+                       if not object:is_player() then
+                               entity = object:get_luaentity()
+                               if entity.name == "__builtin:item" and entity.collectable == true and object:get_luaentity().collected == false then
+                                       pos2 = object:get_pos()
+                                       diff = vector.subtract(pos2,pos).y
+                                       if diff >= 0 and inv:room_for_item("main", entity.itemstring) then
+                                               pool[name] = pool[name] + 1     
+                                               inv:add_item("main", entity.itemstring)
+                                               entity.collector = player:get_player_name()
+                                               entity.collected = true                                                 
+                                               
                                        end
-                elseif not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "experience:orb" then
-                        object:get_luaentity().collector = player:get_player_name()
-                                               object:get_luaentity().collected = true
+                               elseif not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "experience:orb" then
+                                               entity.collector = player:get_player_name()
+                                               entity.collected = true
                                end
                        end
                end
+       else
+               pool[name] = 0
+       end
+end
+
+
+minetest.register_globalstep(function(dtime)
+       tick = not tick
+       for _,player in ipairs(minetest.get_connected_players()) do
+               magnet(player)
        end
 end)