mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-12-27 07:47:31 +01:00
1310dae884
This is just the start, if my plans work out. The eventual aim here is to implement a generic Heightmap2D class, just like Vector3. This will make interacting with heightmaps much easier.
65 lines
2.3 KiB
Lua
65 lines
2.3 KiB
Lua
--- Applies a layer of 2D noise over the terrain in the defined region.
|
|
-- @module worldeditadditions.noise2d
|
|
|
|
local wea = worldeditadditions
|
|
|
|
-- ███ ██ ██████ ██ ███████ ███████ ██████ ██████
|
|
-- ████ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
-- ██ ██ ██ ██ ██ ██ ███████ █████ █████ ██ ██
|
|
-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
-- ██ ████ ██████ ██ ███████ ███████ ███████ ██████
|
|
--- Applies a layer of 2d noise over the terrain in the defined region.
|
|
-- @param pos1 Vector pos1 of the defined region
|
|
-- @param pos2 Vector pos2 of the defined region
|
|
-- @param noise_params table A noise parameters table.
|
|
function wea.noise.run2d(pos1, pos2, noise_params)
|
|
pos1, pos2 = worldedit.sort_pos(pos1, pos2)
|
|
-- pos2 will always have the highest co-ordinates now
|
|
|
|
-- Fill in the default params
|
|
-- print("DEBUG noise_params_custom ", wea.format.map(noise_params))
|
|
noise_params = wea.noise.params_apply_default(noise_params)
|
|
-- print("DEBUG noise_params[1] ", wea.format.map(noise_params[1]))
|
|
|
|
-- Fetch the nodes in the specified area
|
|
local manip, area = worldedit.manip_helpers.init(pos1, pos2)
|
|
local data = manip:get_data()
|
|
|
|
local heightmap_old, heightmap_size = wea.terrain.make_heightmap(
|
|
pos1, pos2,
|
|
manip, area,
|
|
data
|
|
)
|
|
local heightmap_new = wea.table.shallowcopy(heightmap_old)
|
|
|
|
local success, noisemap = wea.noise.make_2d(
|
|
heightmap_size,
|
|
pos1,
|
|
noise_params)
|
|
if not success then return success, noisemap end
|
|
|
|
local message
|
|
success, message = wea.noise.apply_2d(
|
|
heightmap_new,
|
|
noisemap,
|
|
heightmap_size,
|
|
pos1, pos2,
|
|
noise_params[1].apply
|
|
)
|
|
if not success then return success, message end
|
|
|
|
local stats
|
|
success, stats = wea.terrain.apply_heightmap_changes(
|
|
pos1, pos2,
|
|
area, data,
|
|
heightmap_old, heightmap_new,
|
|
heightmap_size
|
|
)
|
|
if not success then return success, stats end
|
|
|
|
-- Save the modified nodes back to disk & return
|
|
worldedit.manip_helpers.finish(manip, data)
|
|
|
|
return true, stats
|
|
end
|