X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=builtin%2Fmisc.lua;h=82a0ba298bfbba5afc0349002517cdf8be0e3052;hb=d52185c43e7fa96174bb9e0d6d7a38f894b3a356;hp=23baca1c8cd2d0bc1e4e33ba5f829cbbbf9fef40;hpb=2b4d21160f1376b80068e2dec4fde3036fd9d6b4;p=minetest.git diff --git a/builtin/misc.lua b/builtin/misc.lua index 23baca1c8..82a0ba298 100644 --- a/builtin/misc.lua +++ b/builtin/misc.lua @@ -14,14 +14,14 @@ minetest.register_globalstep(function(dtime) for index, timer in ipairs(minetest.timers) do timer.time = timer.time - dtime if timer.time <= 0 then - timer.func(timer.param) + timer.func(unpack(timer.args or {})) table.remove(minetest.timers,index) end end end) -function minetest.after(time, func, param) - table.insert(minetest.timers_to_add, {time=time, func=func, param=param}) +function minetest.after(time, func, ...) + table.insert(minetest.timers_to_add, {time=time, func=func, args={...}}) end function minetest.check_player_privs(name, privs) @@ -43,8 +43,8 @@ end function minetest.get_connected_players() -- This could be optimized a bit, but leave that for later local list = {} - for _, obj in pairs(minetest.env:get_objects_inside_radius({x=0,y=0,z=0}, 1000000)) do - if obj:get_player_name() then + for _, obj in pairs(minetest.get_objects_inside_radius({x=0,y=0,z=0}, 1000000)) do + if obj:is_player() then table.insert(list, obj) end end @@ -55,11 +55,47 @@ function minetest.hash_node_position(pos) return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768 end -function minetest.get_node_group(name, group) - if not minetest.registered_nodes[name] or not - minetest.registered_nodes[name].groups[group] then +function minetest.get_item_group(name, group) + if not minetest.registered_items[name] or not + minetest.registered_items[name].groups[group] then return 0 end - return minetest.registered_nodes[name].groups[group] + return minetest.registered_items[name].groups[group] +end + +function minetest.get_node_group(name, group) + return minetest.get_item_group(name, group) +end + +function minetest.string_to_pos(value) + local p = {} + p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") + if p.x and p.y and p.z then + p.x = tonumber(p.x) + p.y = tonumber(p.y) + p.z = tonumber(p.z) + return p + end + local p = {} + p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$") + if p.x and p.y and p.z then + p.x = tonumber(p.x) + p.y = tonumber(p.y) + p.z = tonumber(p.z) + return p + end + return nil +end + +assert(minetest.string_to_pos("10.0, 5, -2").x == 10) +assert(minetest.string_to_pos("( 10.0, 5, -2)").z == -2) +assert(minetest.string_to_pos("asd, 5, -2)") == nil) + +function minetest.setting_get_pos(name) + local value = minetest.setting_get(name) + if not value then + return nil + end + return minetest.string_to_pos(value) end