portalgun/scripts/powerball.lua

87 lines
3.5 KiB
Lua
Raw Normal View History

2022-07-12 10:20:50 +02:00
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_entity(
"portalgun:powerball",
{
hp_max = 1000,
physical = true,
weight = 0,
collisionbox = {-0.4, -0.4, -0.4, 0.4, 0.4, 0.4},
visual = "sprite",
visual_size = {x = 1.1, y = 1.1},
textures = {"portalgun_powrball.png"},
initial_sprite_basepos = {x = 0, y = 0},
is_visible = true,
makes_footstep_sound = false,
automatic_rotate = 0,
portalgun = 2,
powerball = 1,
on_activate = function(self, staticdata)
if new == 0 then
self.object:remove()
return self
end
new = 0
local pos = self.object:get_pos()
self.sound = minetest.sound_play("portalgun_powerball", {pos = pos, max_hear_distance = 10, gain = 0.5})
minetest.sound_play("portalgun_powerballbonce", {pos = pos, max_hear_distance = 10, gain = 1})
end,
on_step = function(self, dtime)
self.timer = self.timer + dtime
if self.timer < 0.2 then
return self
end
self.timer = 0
local pos = self.object:get_pos()
for i, ob in pairs(minetest.get_objects_inside_radius(pos, 2)) do
if
ob:is_player() or
(ob:get_luaentity() and ob:get_luaentity().portalgun ~= 1 and ob:get_luaentity().wsc == nil and
ob:get_luaentity().powerball ~= 1)
then
ob:set_hp(0)
end
end
self.timer2 = self.timer2 + 1
self.timer3 = self.timer3 + 1
if self.timer3 >= 9 then
self.timer3 = 0
minetest.sound_stop(self.sound)
self.sound = minetest.sound_play("portalgun_powerball", {pos = pos, max_hear_distance = 10, gain = 0.5})
end
if self.timer2 > 40 then
minetest.sound_stop(self.sound)
self.object:set_hp(0)
return self
end
local v = self.object:get_velocity()
local nextn = {x = pos.x + (v.x) / 3, y = pos.y + (v.y) / 3, z = pos.z + (v.z) / 3}
local nname = minetest.get_node(nextn).name
if minetest.registered_nodes[nname].walkable then
if nname == "portalgun:powerballtarget" and mesecon then
mesecon.receptor_on(nextn)
minetest.get_node_timer(nextn):start(5)
self.object:remove()
end
self.object:set_velocity({x = v.x * -1, y = v.y * -1, z = v.z * -1})
minetest.sound_play("portalgun_powerballbonce", {pos = pos, max_hear_distance = 10, gain = 1})
end
end,
timer = 0,
timer2 = 0,
timer3 = 0,
sound = {}
}
)