Skip to content

Commit

Permalink
Add voxelarea.lua helper to builtin
Browse files Browse the repository at this point in the history
  • Loading branch information
kwolekr committed Jun 28, 2013
1 parent 280946b commit 3f13dc7
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 1 deletion.
2 changes: 1 addition & 1 deletion builtin/builtin.lua
Expand Up @@ -25,4 +25,4 @@ dofile(minetest.get_modpath("__builtin").."/static_spawn.lua")
dofile(minetest.get_modpath("__builtin").."/detached_inventory.lua")
dofile(minetest.get_modpath("__builtin").."/falling.lua")
dofile(minetest.get_modpath("__builtin").."/features.lua")

dofile(minetest.get_modpath("__builtin").."/voxelarea.lua")
46 changes: 46 additions & 0 deletions builtin/voxelarea.lua
@@ -0,0 +1,46 @@
VoxelArea = {
MinEdge = {x=1, y=1, z=1},
MaxEdge = {x=0, y=0, z=0},
ystride = 0,
zstride = 0,
}

function VoxelArea:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self

local e = o:getExtent()
o.ystride = e.x
o.zstride = e.x * e.y

return o
end

function VoxelArea:getExtent()
return {
x = self.MaxEdge.x - self.MinEdge.x + 1,
y = self.MaxEdge.y - self.MinEdge.y + 1,
z = self.MaxEdge.z - self.MinEdge.z + 1,
}
end

function VoxelArea:getVolume()
local e = self:getExtent()
return e.x * e.y * e.z
end

function VoxelArea:index(x, y, z)
local i = (z - self.MinEdge.z) * self.zstride +
(y - self.MinEdge.y) * self.ystride +
(x - self.MinEdge.x) + 1
return math.floor(i)
end

function VoxelArea:indexp(p)
local i = (p.z - self.MinEdge.z) * self.zstride +
(p.y - self.MinEdge.y) * self.ystride +
(p.x - self.MinEdge.x) + 1
return math.floor(i)
end

10 changes: 10 additions & 0 deletions doc/lua_api.txt
Expand Up @@ -1572,6 +1572,16 @@ methods:
^ will be ignored
- update_liquids(): Update liquid flow

VoxelArea: A helper class for voxel areas
- Can be created via VoxelArea:new{MinEdge=pmin, MaxEdge=pmax}
- Coordinates are *inclusive*, like most other things in Minetest
methods:
- getExtent(): returns a 3d vector containing the size of the area formed by MinEdge and MaxEdge
- getVolume(): returns the volume of the area formed by MinEdge and MaxEdge
- index(x, y, z): returns the index of an absolute position in a flat array starting at 1
^ useful for things like VoxelManip, raw Schematic specifiers, PerlinNoiseMap:get2d/3dMap, and so on
- indexp(p): same as above, except takes a vector

Mapgen objects
---------------
A mapgen object is a construct used in map generation. Mapgen objects can be used by an on_generate
Expand Down

0 comments on commit 3f13dc7

Please sign in to comment.