Skip to content

Commit

Permalink
Add VoxelArea() constructor (minetest#12886)
Browse files Browse the repository at this point in the history
  • Loading branch information
TurkeyMcMac committed Oct 22, 2022
1 parent 7e11b8e commit 8f1593e
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
11 changes: 10 additions & 1 deletion builtin/game/voxelarea.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ VoxelArea = {
zstride = 0,
}

function VoxelArea:new(o)
local class_metatable = {}
setmetatable(VoxelArea, class_metatable)

local function new(self, o)
o = o or {}
setmetatable(o, self)
self.__index = self
Expand All @@ -20,6 +23,12 @@ function VoxelArea:new(o)
return o
end

function class_metatable:__call(MinEdge, MaxEdge)
return new(self, {MinEdge = MinEdge, MaxEdge = MaxEdge})
end

VoxelArea.new = new

function VoxelArea:getExtent()
local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge
return vector_new(
Expand Down
5 changes: 3 additions & 2 deletions doc/lua_api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4485,7 +4485,8 @@ Methods
-----------

A helper class for voxel areas.
It can be created via `VoxelArea:new({MinEdge = pmin, MaxEdge = pmax})`.
It can be created via `VoxelArea(pmin, pmax)` or
`VoxelArea:new({MinEdge = pmin, MaxEdge = pmax})`.
The coordinates are *inclusive*, like most other things in Minetest.

### Methods
Expand Down Expand Up @@ -4533,7 +4534,7 @@ the axes in a voxel area:

If, for example:

local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
local area = VoxelArea(emin, emax)

The values of `ystride` and `zstride` can be obtained using `area.ystride` and
`area.zstride`.
Expand Down

0 comments on commit 8f1593e

Please sign in to comment.