Aaron Suen ef61cfffa6 Start work on buffing lux rad effect
Still needs more tweaking and testing
2020-09-04 14:58:32 -04:00

87 lines
2.3 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local minetest, nodecore, pairs, vector
= minetest, nodecore, pairs, vector
-- LUALOCALS > ---------------------------------------------------------
local modname = minetest.get_current_modname()
local wetdef = {
description = "Lux Flow",
tiles = {modname .. "_base.png"},
special_tiles = {modname .. "_base.png", modname .. "_base.png"},
paramtype = "light",
alpha = 64,
liquid_viscosity = 0,
liquid_renewable = false,
liquid_range = 2,
liquid_alternative_flowing = modname .. ":flux_flowing",
liquid_alternative_source = modname .. ":flux_source",
pointable = false,
walkable = false,
buildable_to = true,
light_source = 10,
sunlight_propagates = true,
air_pass = true,
drowning = 0,
groups = {
lux_emit = 100,
lux_fluid = 1,
stack_as_node = 1
},
post_effect_color = {a = 64, r = 251, g = 241, b = 143}
}
minetest.register_node(modname .. ":flux_source", nodecore.underride({
drawtype = "liquid",
liquidtype = "source"
}, wetdef))
minetest.register_node(modname .. ":flux_flowing", nodecore.underride({
drawtype = "flowingliquid",
liquidtype = "flowing",
paramtype2 = "flowingliquid"
}, wetdef))
local outdirs = {}
for _, v in pairs(nodecore.dirs()) do
if v.y <= 0 then
outdirs[#outdirs + 1] = v
end
end
nodecore.register_limited_abm({
label = "lux flow leak",
interval = 1,
chance = 2,
limited_max = 100,
nodenames = {"group:lux_cobble_max"},
action = function(pos)
for _, v in pairs(outdirs) do
local p = vector.add(pos, v)
if minetest.get_node(p).name ~= modname .. ":flux_source"
and nodecore.buildable_to(p) then
minetest.set_node(p, {name = modname .. ":flux_source"})
end
end
end
})
local indirs = {}
for _, v in pairs(nodecore.dirs()) do
if v.y >= 0 then
indirs[#indirs + 1] = v
end
end
nodecore.register_limited_abm({
label = "lux flow ebb",
interval = 1,
chance = 2,
limited_max = 100,
nodenames = {modname .. ":flux_source"},
action = function(pos)
for _, v in pairs(indirs) do
local p = vector.add(pos, v)
local def = minetest.registered_nodes[minetest.get_node(p).name]
if def and def.groups and def.groups.lux_cobble_max then return end
end
return minetest.set_node(pos, {name = modname .. ":flux_flowing", param2 = 7})
end
})