76 lines
1.6 KiB
Lua
76 lines
1.6 KiB
Lua
PyuTestCore.util = {
|
|
toint = function (float)
|
|
return tonumber(string.format("%d", float))
|
|
end,
|
|
|
|
tableconcat = function (t1, t2)
|
|
local nt = t1
|
|
for k, v in pairs(t2) do
|
|
nt[k] = v
|
|
end
|
|
return nt
|
|
end
|
|
}
|
|
|
|
PyuTestCore.dorange = function(origin, range, action)
|
|
for dx = -range, range do
|
|
for dz = -range, range do
|
|
for dy = -range, range do
|
|
action(vector.new(origin.x + dx, origin.y + dy, origin.z + dz))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
PyuTestCore.create_explosion = function (pos, range, rm_pos, dmg, creator)
|
|
if rm_pos then
|
|
minetest.remove_node(pos)
|
|
end
|
|
|
|
PyuTestCore.dorange(pos, range, function(p)
|
|
if minetest.get_node(p).name == "pyutest_core:tnt" then
|
|
minetest.get_node_timer(p):start(0.2)
|
|
else
|
|
minetest.dig_node(p)
|
|
end
|
|
end)
|
|
|
|
for _, v in pairs(minetest.get_objects_inside_radius(pos, range)) do
|
|
if v ~= nil and v ~= creator then
|
|
if creator ~= nil then
|
|
v:punch(creator, nil, {
|
|
damage_groups = {fleshy = dmg}
|
|
}, nil)
|
|
else
|
|
v:set_hp(v:get_hp() - dmg)
|
|
end
|
|
end
|
|
end
|
|
|
|
local r = range
|
|
local minpos = {x = pos.x - r, y = pos.y - r, z = pos.z - r}
|
|
local maxpos = {x = pos.x + r, y = pos.y + r, z = pos.z + r}
|
|
|
|
minetest.add_particlespawner({
|
|
amount = range * 3,
|
|
time = 0.1,
|
|
minexptime = 0.4,
|
|
maxexptime = 1.4,
|
|
minsize = 32,
|
|
maxsize = 64,
|
|
|
|
collisiondetection = false,
|
|
texture = "blast.png",
|
|
|
|
minpos = minpos,
|
|
maxpos = maxpos,
|
|
})
|
|
|
|
minetest.sound_play("block_break", {
|
|
pos = pos,
|
|
gain = 1.5
|
|
})
|
|
end
|
|
|
|
|