86 lines
2.2 KiB
Lua
86 lines
2.2 KiB
Lua
local S = minetest.get_translator("sf_particles")
|
|
local EDITOR = minetest.settings:get_bool("sf_editor", false) or minetest.settings:get_bool("creative_mode", false)
|
|
|
|
local register_particle_emitter = function(id, def)
|
|
local drawtype, pointable
|
|
if EDITOR then
|
|
drawtype = "allfaces"
|
|
pointable = true
|
|
else
|
|
drawtype = "airlike"
|
|
pointable = false
|
|
end
|
|
minetest.register_node("sf_particles:emitter_"..id, {
|
|
description = def.description,
|
|
pointable = pointable,
|
|
drawtype = drawtype,
|
|
visual_scale = 0.5,
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
tiles = {"sf_particles_emitter_base.png^"..def.texture.."^sf_particles_emitter_overlay.png"},
|
|
walkable = false,
|
|
groups = { particle_emitter = 1, editor_breakable = 1 },
|
|
on_construct = function(pos)
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(0)
|
|
end,
|
|
on_timer = function(pos)
|
|
if not EDITOR then
|
|
local spawnerdef = table.copy(def.spawner)
|
|
if def.pos_offset_min then
|
|
spawnerdef.pos = {
|
|
min = vector.add(pos, def.pos_offset_min),
|
|
max = vector.add(pos, def.pos_offset_max),
|
|
}
|
|
else
|
|
spawnerdef.pos = pos
|
|
end
|
|
minetest.add_particlespawner(spawnerdef)
|
|
end
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(def.spawntimer)
|
|
end,
|
|
})
|
|
end
|
|
|
|
register_particle_emitter("smoke", {
|
|
description = S("Smoke Emitter"),
|
|
texture = "sf_particles_smoke.png",
|
|
spawntimer = 5,
|
|
pos_offset_min = vector.new(-1.2,0,-1.2),
|
|
pos_offset_max = vector.new(1.2,0,1.2),
|
|
spawner = {
|
|
amount = 3,
|
|
time = 5,
|
|
exptime = {
|
|
min = 30,
|
|
max = 50,
|
|
},
|
|
size = {
|
|
min = 9,
|
|
max = 18,
|
|
},
|
|
vel = {
|
|
min = vector.new(-0.01, 0.2, -0.01),
|
|
max = vector.new(0.01, 0.5, 0.01),
|
|
},
|
|
texpool = {
|
|
{ name = "sf_particles_smoke.png", alpha_tween = { 1, 0, start = 0.75 } },
|
|
{ name = "sf_particles_smoke_med.png", alpha_tween = { 1, 0, start = 0.75 } },
|
|
{ name = "sf_particles_smoke_dense.png", alpha_tween = { 1, 0, start = 0.75 } },
|
|
},
|
|
},
|
|
})
|
|
|
|
minetest.register_lbm({
|
|
label = "Restart particle emitter node timers",
|
|
name = "sf_particles:restart_emitter_node_timers",
|
|
nodenames = {"group:particle_emitter"},
|
|
run_at_every_load = true,
|
|
action = function(pos)
|
|
local timer = minetest.get_node_timer(pos)
|
|
timer:start(0)
|
|
end,
|
|
})
|
|
|