Page 1 of 1

Why doesn't fill this code the air?

PostPosted: Thu Feb 16, 2017 19:05
by burli
I want to find air in a map. To test my code I replace air with meselamp. But it doesn't fill everything. The gap is 39 nodes wide, the filled area 41 nodes

Edit: it also happens if I remove the if statement and try to overwrite each node

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
minetest.register_on_generated(function(minp, maxp)
   local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
   local a = VoxelArea:new({MinEdge = minp, MaxEdge = maxp})
   local data = vm:get_data()
   local c_air = minetest.get_content_id("air")
   local c_glass = minetest.get_content_id("default:meselamp")

   for z = minp.z, maxp.z do
   for y = minp.y, maxp.y do
   for x = minp.x, maxp.x do
      local vi = a:index(x, y, z)
      if data[vi] == c_air then
         data[vi] = c_glass
      end
   end
   end
   end

   vm:set_data(data)
   vm:write_to_map()
end)


Image

Re: Why doesn't fill this code the air?

PostPosted: Fri Feb 17, 2017 19:23
by paramat
Now solved.

Re: Why doesn't fill this code the air?

PostPosted: Fri Feb 17, 2017 19:48
by rubenwardy
For reference

paramat wrote:Try local a = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
The voxelarea is always set to emin, emax which is the minimum volume of complete mapblocks that contains the requested volume.
With the mapgen object voxelmanip, although the mapchunk is minp to maxp 5^3 mapblocks, the actual processed volume is that plus a 1-mapblock deep shell of mapblocks (that overlap with other mapchunks), so 7^3 mapblocks.


https://github.com/minetest/minetest/issues/5254

Re: Why doesn't fill this code the air?

PostPosted: Fri Feb 17, 2017 19:53
by burli
Thanks. Had no time to update here