mirror of
https://github.com/pandorabox-io/spacecannon.git
synced 2024-12-21 05:15:47 +01:00
57 lines
1.3 KiB
Lua
57 lines
1.3 KiB
Lua
|
|
||
|
|
||
|
-- destroy stuff in range
|
||
|
spacecannon.destroy = function(pos,range)
|
||
|
for x=-range,range do
|
||
|
for y=-range,range do
|
||
|
for z=-range,range do
|
||
|
if x*x+y*y+z*z <= range * range + range then
|
||
|
local np={x=pos.x+x,y=pos.y+y,z=pos.z+z}
|
||
|
|
||
|
if minetest.is_protected(np, "") then
|
||
|
return -- fail fast
|
||
|
end
|
||
|
|
||
|
local n = minetest.env:get_node(np)
|
||
|
if n.name ~= "air" then
|
||
|
minetest.env:remove_node(np)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local radius = range
|
||
|
|
||
|
-- https://github.com/minetest/minetest_game/blob/master/mods/tnt/init.lua
|
||
|
minetest.add_particlespawner({
|
||
|
amount = 64,
|
||
|
time = 0.5,
|
||
|
minpos = vector.subtract(pos, radius / 2),
|
||
|
maxpos = vector.add(pos, radius / 2),
|
||
|
minvel = {x = -10, y = -10, z = -10},
|
||
|
maxvel = {x = 10, y = 10, z = 10},
|
||
|
minacc = vector.new(),
|
||
|
maxacc = vector.new(),
|
||
|
minexptime = 1,
|
||
|
maxexptime = 2.5,
|
||
|
minsize = radius * 3,
|
||
|
maxsize = radius * 5,
|
||
|
texture = "spacecannon_spark.png",
|
||
|
})
|
||
|
|
||
|
minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = math.min(radius * 20, 128)})
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
-- convert face dir to vector
|
||
|
spacecannon.facedir_to_down_dir = function(facing)
|
||
|
return (
|
||
|
{[0]={x=0, y=-1, z=0},
|
||
|
{x=0, y=0, z=-1},
|
||
|
{x=0, y=0, z=1},
|
||
|
{x=-1, y=0, z=0},
|
||
|
{x=1, y=0, z=0},
|
||
|
{x=0, y=1, z=0}})[math.floor(facing/4)]
|
||
|
end
|