portalgun/scripts/powerballspawner.lua

96 lines
3.3 KiB
Lua

stone_sounds = {}
stone_sounds.footstep = {name = "stone_walk", gain = 1.0}
stone_sounds.dug = {name = "stone_break", gain = 1.0}
stone_sounds.place = {name = "block_place", gain = 1.0}
glass_sounds = {}
glass_sounds.footstep = {name = "glass_walk", gain = 1.0}
glass_sounds.dug = {name = "glass_break", gain = 1.0}
glass_sounds.place = {name = "block_place", gain = 1.0}
wood_sounds = {}
wood_sounds.footstep = {name = "wood_walk", gain = 1.0}
wood_sounds.dug = {name = "wood_break", gain = 1.0}
wood_sounds.place = {name = "block_place", gain = 1.0}
new = 0
minetest.register_node(
"portalgun:powerballspawner",
{
description = "Power ball spawner",
tiles = {"steel.png", "steel.png", "steel.png", "steel.png", "steel.png", "portalgun_powerballspawner.png"},
groups = {cracky = 2},
sounds = glass_sounds,
is_ground_content = false,
paramtype2 = "facedir",
on_construct = function(pos)
minetest.get_node_timer(pos):start(10)
end,
on_timer = function(pos, elapsed)
local dir = minetest.get_node(pos).param2
local v = {x = 0, y = 0, z = 0}
if dir == 0 then
v.z = -1
elseif dir == 1 then
v.x = -1
elseif dir == 2 then
v.z = 1
elseif dir == 3 then
v.x = 1
elseif dir == 5 then
v.y = -1
elseif dir == 4 then
v.y = 1
else
v.y = -1
end
local pv = {x = pos.x + v.x, y = pos.y + v.y, z = pos.z + v.z}
new = 1
local m = minetest.add_entity(pv, "portalgun:powerball")
m:set_velocity({x = v.x * 4, y = v.y * 4, z = v.z * 4})
return true
end
}
)
minetest.register_node(
"portalgun:powerballspawner2",
{
description = "Power ball spawner (spawn on activate)",
tiles = {
"steel.png",
"steel.png",
"steel.png",
"steel.png",
"steel.png",
"portalgun_powerballspawner.png^[colorize:#aaaa0055"
},
groups = {cracky = 2, mesecon = 1},
sounds = glass_sounds,
is_ground_content = false,
paramtype2 = "facedir",
on_place = minetest.rotate_node,
mesecons = {
effector = {
action_on = function(pos, node)
local dir = minetest.get_node(pos).param2
local v = {x = 0, y = 0, z = 0}
if dir == 0 then
v.z = -1
elseif dir == 1 then
v.x = -1
elseif dir == 2 then
v.z = 1
elseif dir == 3 then
v.x = 1
elseif dir == 8 then
v.y = -1
elseif dir == 4 then
v.y = 1
end
local pv = {x = pos.x + v.x, y = pos.y + v.y, z = pos.z + v.z}
new = 1
local m = minetest.add_entity(pv, "portalgun:powerball")
m:set_velocity({x = v.x * 4, y = v.y * 4, z = v.z * 4})
end
}
}
}
)