mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-10-31 21:33:02 +00:00
noodle around with StagedVoxelRegion
This commit is contained in:
parent
f2c3ca124c
commit
985901de94
4 changed files with 61 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
local weac = worldeditadditions_core
|
||||||
|
|
||||||
|
local weaschem = weac.parse.file.weaschem
|
||||||
|
|
||||||
|
|
||||||
--- A region of the world that is to be or has been saved to/from disk.
|
--- A region of the world that is to be or has been saved to/from disk.
|
||||||
-- This class exists to make moving things to/from disk easier and less complicated.
|
-- This class exists to make moving things to/from disk easier and less complicated.
|
||||||
--
|
--
|
||||||
|
|
44
worldeditadditions_core/utils/io/voxeltools.lua
Normal file
44
worldeditadditions_core/utils/io/voxeltools.lua
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
local weac = worldeditadditions_core
|
||||||
|
local Vector3 = weac.Vector3
|
||||||
|
|
||||||
|
--- Converts data in a VoxelManip to a raw data array for serialisation.
|
||||||
|
-- TODO: Figure out the specifics of how this fits into StagedVoxelRegion, and whether or not StagedVoxelRegion has too many overrides or not. Then implement the counterpart raw2voxelmanip & integrate into WEA + StagedVoxelRegion
|
||||||
|
-- @param voxelmanip VoxelManipulator The voxelmanip instance to extract data from.
|
||||||
|
-- @param pos1 Vector3 Position 1 that defines the region to extract data from.
|
||||||
|
-- @param pos2 Vector3 Position 2 that defines the region to extract data from.
|
||||||
|
local function voxelmanip2raw(voxelmanip, pos1, pos2)
|
||||||
|
|
||||||
|
local pos1_sort, pos2_sort = Vector3.sort(pos1, pos2)
|
||||||
|
local size = pos2_sort - pos1_sort
|
||||||
|
|
||||||
|
local data = voxelmanip:get_data()
|
||||||
|
local param2 = voxelmanip:get_param2_data()
|
||||||
|
|
||||||
|
local pos1_manip, pos2_manip = voxelmanip:get_emerged_area()
|
||||||
|
local area = VoxelArea:new({
|
||||||
|
MinEdge = pos1_manip,
|
||||||
|
MaxEdge = pos2_manip
|
||||||
|
})
|
||||||
|
pos1_manip = Vector3.clone(pos1_manip)
|
||||||
|
pos2_manip = Vector3.clone(pos2_manip)
|
||||||
|
|
||||||
|
local pos1_manip_sort, pos2_manip_sort = Vector3.sort(pos1_manip, pos2_manip)
|
||||||
|
|
||||||
|
local result_data = {}
|
||||||
|
local result_param2 = {}
|
||||||
|
for z = pos2_sort.z, pos1_sort.z, -1 do
|
||||||
|
for x = pos2_sort.x, pos1_sort.x, -1 do
|
||||||
|
for y = pos2_sort.y, pos1_sort.y, -1 do
|
||||||
|
local here = Vector3.new(x, y, z)
|
||||||
|
local here_target = here - pos1_manip_sort
|
||||||
|
local here_target_i = here_target.z * size.y * size.x + here_target.y * size.x + here_target.x -- Minetest flat arrays start from 1 (I thought they started from 0?!?!?!), but WEA flat arrays start from 0. Hence, we don't +1 here, though at some point we'll hafta update eeeevvvveerrrryyything...... :-(
|
||||||
|
|
||||||
|
local here_source_i = area:index(x, y, z)
|
||||||
|
result_data[here_target_i] = data[here_source_i]
|
||||||
|
result_param2[here_target_i] = param2[here_source_i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return result_data, result_param2
|
||||||
|
end
|
9
worldeditadditions_core/utils/parse/file/init.lua
Normal file
9
worldeditadditions_core/utils/parse/file/init.lua
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
local localpath = wea_c.modpath.."/utils/parse/file/"
|
||||||
|
|
||||||
|
--- Parsers specifically for file formats.
|
||||||
|
-- @namespace worldeditadditions_core.parse.file
|
||||||
|
return {
|
||||||
|
weaschem = dofile(localpath.."weaschem.lua")
|
||||||
|
}
|
|
@ -24,7 +24,9 @@ wea_c.parse = {
|
||||||
seed = dofile(wea_c.modpath.."/utils/parse/seed.lua"),
|
seed = dofile(wea_c.modpath.."/utils/parse/seed.lua"),
|
||||||
chance = dofile(wea_c.modpath.."/utils/parse/chance.lua"),
|
chance = dofile(wea_c.modpath.."/utils/parse/chance.lua"),
|
||||||
map = dofile(wea_c.modpath.."/utils/parse/map.lua"),
|
map = dofile(wea_c.modpath.."/utils/parse/map.lua"),
|
||||||
weighted_nodes = dofile(wea_c.modpath.."/utils/parse/weighted_nodes.lua")
|
weighted_nodes = dofile(wea_c.modpath.."/utils/parse/weighted_nodes.lua"),
|
||||||
|
|
||||||
|
file = dofile(wea_c.modpath.."/utils/parse/file/init.lua")
|
||||||
}
|
}
|
||||||
|
|
||||||
dofile(wea_c.modpath.."/utils/parse/tokenise_commands.lua")
|
dofile(wea_c.modpath.."/utils/parse/tokenise_commands.lua")
|
||||||
|
|
Loading…
Reference in a new issue