nodecore-cd2025/mods/nc_lux/cherenkov.lua
2020-06-18 07:23:11 -04:00

49 lines
1.4 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local math, minetest, nodecore, pairs, vector
= math, minetest, nodecore, pairs, vector
local math_random
= math.random
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
local particle = modname .. "_base.png^[mask:" .. modname .. "_dot_mask.png^[opacity:32"
local function check(pos, player)
local p = player:get_pos();
p = {
x = p.x + nodecore.boxmuller() * 2,
y = p.y + nodecore.boxmuller() * 2,
z = p.z + nodecore.boxmuller() * 2,
}
local light = nodecore.get_node_light(p)
if (not light) or (light >= math_random(4, 8)) then return end
local rel = vector.subtract(p, pos)
local dsqr = vector.dot(rel, rel)
if math_random() * 128 < dsqr then return end
local pname = player:get_player_name()
minetest.after(math_random(), function()
minetest.add_particle({
pos = p,
velocity = vector.multiply(vector.normalize(rel), 4),
texture = particle,
exptime = 0.25,
playername = pname,
glow = 8
})
end)
return check(pos, player)
end
nodecore.register_limited_abm({
label = "lux react",
interval = 1,
chance = 2,
nodenames = {"group:lux_emit"},
action = function(pos)
for _, player in pairs(minetest.get_connected_players()) do
check(pos, player)
end
end
})