mirror of
https://github.com/luanti-org/minetest_game.git
synced 2025-05-28 17:46:28 -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
|
||||
--
|
||||
|
||||
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({
|
||||
|
|
Loading…
Add table
Reference in a new issue