nodecore-cd2025/mods/nc_api/fx_digparticles.lua
Aaron Suen 0d3f26b861 Fix particles for non-16x textures.
Resize base texture down to 16x first, so mask works
as expected.  Some textures may be blurred, but
we're more concerned with getting the overal color
right more than showing actual patterns.
2019-12-30 14:16:14 -05:00

42 lines
1.3 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local math, minetest, nodecore, pairs
= math, minetest, nodecore, pairs
local math_ceil, math_floor, math_random
= math.ceil, math.floor, math.random
-- LUALOCALS > ---------------------------------------------------------
function nodecore.digparticles(nodedef, partdef)
if partdef.forcetexture then
partdef.texture = partdef.forcetexture
local id = minetest.add_particlespawner(partdef)
return function() minetest.delete_particlespawner(id) end
end
local img = {}
if nodedef.tiles then
for i = 1, 6 do
img[#img + 1] = nodedef.tiles[i > #nodedef.tiles and #nodedef.tiles or i]
end
elseif nodedef.inventory_image then
img[1] = nodedef.inventory_image
end
if #img < 1 then return minetest.log("no pummel tile images found!") end
img = nodecore.pickrand(img)
if img.name then img = img.name end
partdef.amount = partdef.amount and math_ceil(partdef.amount / 4) or 4
local t = {}
for _ = 1, 4 do
partdef.texture = img .. "^[resize:16x16^[mask:[combine\\:16x16\\:"
.. math_floor(math_random() * 12) .. ","
.. math_floor(math_random() * 12) .. "=nc_api_pummel.png"
t[#t + 1] = minetest.add_particlespawner(partdef)
end
return function()
for _, v in pairs(t) do
minetest.delete_particlespawner(v)
end
end
end