change lavacooling functions

fix a lava flow bug, add smoke and call it default instead of lavacooling

use 2 vector helpers
This commit is contained in:
HybridDog 2014-05-11 20:30:58 +02:00
parent 03c00a831d
commit 56f2f73776

View file

@ -87,14 +87,91 @@ end
-- Lavacooling
--
default.cool_lava_source = function(pos)
minetest.set_node(pos, {name="default:obsidian"})
local function smoke_and_sound(pos)
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
minetest.add_particlespawner({
amount = 3,
time = 0.1,
minpos = vector.subtract(pos, 0.2),
maxpos = vector.add(pos, 0.2),
minacc = {x=-0.5,y=5,z=-0.5},
maxacc = {x=0.5,y=5,z=0.5},
minexptime = 0.1,
minsize = 2,
maxsize = 8,
texture = "smoke_puff.png"
})
end
local function cool_wf_vm(pos, node1, node2)
local t1 = os.clock()
local minp = vector.subtract(pos, 10)
local maxp = vector.add(pos, 10)
local manip = minetest.get_voxel_manip()
local emerged_pos1, emerged_pos2 = manip:read_from_map(minp, maxp)
local area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2})
local nodes = manip:get_data()
local stone = minetest.get_content_id(node2)
local lava = minetest.get_content_id(node1)
for x = minp.x, maxp.x do
for y = minp.y, maxp.y do
for z = minp.z, maxp.z do
local p = {x=x, y=y, z=z}
local p_p = area:indexp(p)
if nodes[p_p] == lava
and minetest.find_node_near(p, 1, {"group:water"}) then
nodes[p_p] = stone
end
end
end
end
manip:set_data(nodes)
manip:write_to_map()
print(string.format("[default] lava cooled at ("..pos.x.."|"..pos.y.."|"..pos.z..") after ca. %.2fs", os.clock() - t1))
local t1 = os.clock()
manip:update_map()
manip:update_liquids()
print(string.format("[default] map updated after ca. %.2fs", os.clock() - t1))
end
local del1 = 0
local count = 0
default.cool_lava_source = function(pos)
local del2 = tonumber(os.clock())
if del2-del1 < 0.1
and count > 10 then
cool_wf_vm(pos, "default:lava_source", "default:obsidian")
count = 0
else
minetest.set_node(pos, {name="default:obsidian"})
smoke_and_sound(pos)
if del2-del1 < 0.1 then
count = count+1
end
end
del1 = del2
end
default.cool_lava_flowing = function(pos)
minetest.set_node(pos, {name="default:stone"})
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
local del2 = tonumber(os.clock())
if del2-del1 < 0.1
and count > 10 then
cool_wf_vm(pos, "default:lava_flowing", "default:stone")
count = 0
else
minetest.set_node(pos, {name="default:stone"})
smoke_and_sound(pos)
if del2-del1 < 0.1 then
count = count+1
end
end
del1 = del2
end
minetest.register_abm({