]> git.lizzy.rs Git - minetest.git/blob - builtin/voxelarea.lua
Add voxelarea.lua helper to builtin
[minetest.git] / builtin / voxelarea.lua
1 VoxelArea = {
2         MinEdge = {x=1, y=1, z=1},
3         MaxEdge = {x=0, y=0, z=0},
4         ystride = 0,
5         zstride = 0,
6 }
7
8 function VoxelArea:new(o)
9         o = o or {}
10         setmetatable(o, self)
11         self.__index = self
12
13         local e = o:getExtent()
14         o.ystride = e.x
15         o.zstride = e.x * e.y
16
17         return o
18 end
19
20 function VoxelArea:getExtent()
21         return {
22                 x = self.MaxEdge.x - self.MinEdge.x + 1,
23                 y = self.MaxEdge.y - self.MinEdge.y + 1,
24                 z = self.MaxEdge.z - self.MinEdge.z + 1,
25         }
26 end
27
28 function VoxelArea:getVolume()
29         local e = self:getExtent()
30         return e.x * e.y * e.z
31 end
32
33 function VoxelArea:index(x, y, z)
34         local i = (z - self.MinEdge.z) * self.zstride +
35                           (y - self.MinEdge.y) * self.ystride +
36                           (x - self.MinEdge.x) + 1
37         return math.floor(i)
38 end
39
40 function VoxelArea:indexp(p)
41         local i = (p.z - self.MinEdge.z) * self.zstride +
42                           (p.y - self.MinEdge.y) * self.ystride +
43                           (p.x - self.MinEdge.x) + 1
44         return math.floor(i)
45 end
46