2024-11-28 21:29:26 -06:00

107 lines
2.6 KiB
Lua

core.register_entity("pyutest_fireworks:firework", {
initial_properties = {
visual = "upright_sprite",
textures = { "pyutest-firework.png", "pyutest-firework.png" },
physical = true,
glow = core.LIGHT_MAX
},
on_activate = function(self)
self.object:set_velocity(vector.new(0, 10, 0))
end,
on_step = function(self, dtime)
local vel = self.object:get_velocity()
if vel.y < 0 then
self:explode()
self.object:remove()
return
end
vel.y = vel.y - 2 * dtime
self.object:set_velocity(vel)
self:trail()
end,
trail = function(self)
local pos = self.object:get_pos() - vector.new(0, 1, 0)
local velocity = vector.new(math.random(-1, 1), 0, math.random(-1, 1))
if math.random(1, 2) == 1 then
core.add_particle({
pos = pos,
size = 1.2,
expirationtime = 0.6,
glow = core.LIGHT_MAX,
vertical = true,
velocity = velocity,
collisiondetection = true,
collision_removal = true,
texture = "pyutest-firework-trail1.png"
})
else
core.add_particle({
pos = pos,
size = 1.2,
expirationtime = 0.6,
glow = core.LIGHT_MAX,
vertical = true,
velocity = velocity,
collisiondetection = true,
collision_removal = true,
texture = "pyutest-firework-trail2.png"
})
end
end,
explode = function(self)
local color = {
r = math.random(50, 255),
g = math.random(50, 255),
b = math.random(50, 255),
}
local texture = string.format("pyutest-firework-blast.png^[colorize:%s", core.colorspec_to_colorstring(color))
local pos = self.object:get_pos()
core.add_particlespawner({
amount = math.random(20, 40),
time = 0.8,
minexptime = 0.4,
maxexptime = 1.4,
minsize = 2,
maxsize = 2,
vertical = false,
glow = core.LIGHT_MAX,
collisiondetection = false,
texture = texture,
minpos = pos,
maxpos = pos,
minvel = vector.new(-6, -6, -6),
maxvel = vector.new(6, 6, 6),
})
core.sound_play({
name = "pyutest-firework",
gain = 1.2,
pos = pos,
max_hear_distance = 30
}, true)
end
})
PyuTest.make_item("pyutest_fireworks:firework", "Firework", {}, "pyutest-firework.png", {
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type == "node" then
local pos = pointed_thing.above
core.add_entity(pos, "pyutest_fireworks:firework")
itemstack:take_item()
end
return itemstack
end
})