mirror of
https://github.com/luanti-org/minetest_game.git
synced 2025-05-31 02:56:26 -04:00
Merge 56f2f73776
into e604d8d7f3
This commit is contained in:
commit
bc7fed2665
1 changed files with 81 additions and 4 deletions
|
@ -87,14 +87,91 @@ end
|
||||||
-- Lavacooling
|
-- Lavacooling
|
||||||
--
|
--
|
||||||
|
|
||||||
default.cool_lava_source = function(pos)
|
local function smoke_and_sound(pos)
|
||||||
minetest.set_node(pos, {name="default:obsidian"})
|
|
||||||
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
|
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
|
end
|
||||||
|
|
||||||
default.cool_lava_flowing = function(pos)
|
default.cool_lava_flowing = function(pos)
|
||||||
minetest.set_node(pos, {name="default:stone"})
|
local del2 = tonumber(os.clock())
|
||||||
minetest.sound_play("default_cool_lava", {pos = pos, gain = 0.25})
|
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
|
end
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
|
|
Loading…
Add table
Reference in a new issue