diff options
Diffstat (limited to 'api.lua')
| -rw-r--r-- | api.lua | 31 | 
1 files changed, 31 insertions, 0 deletions
| @@ -39,3 +39,34 @@ function areas:getNodeOwners(pos)  	return owners  end +--- Checks if the area intersects with an area that the player can't interact in. +-- Note that this fails and returns false when the specified area is fully +-- owned by the player, but with miltiple protection zones, none of which +-- cover the entire checked area. +-- @return Boolean indicating whether the player can interact in that area. +-- @return Un-owned intersecting area id, if found. +function areas:canInteractInArea(pos1, pos2, name) +	areas:sortPos(pos1, pos2) +	-- First check for a fully enclosing owned area +	for id, area in pairs(self.areas) do +		-- A little optimization: isAreaOwner isn't necessary here +		-- since we're iterating through all areas. +		if area.owner == name and self:isSubarea(pos1, pos2, id) then +			return true +		end +	end +	-- Then check for intersecting non-owned areas +	for id, area in pairs(self.areas) do +		local p1, p2 = area.pos1, area.pos2 +		if (p1.x <= pos2.x and p2.x >= pos1.x) and +		   (p1.y <= pos2.y and p2.y >= pos1.y) and +		   (p1.z <= pos2.z and p2.z >= pos1.z) then +			-- Found an intersecting area +			if not areas:isAreaOwner(id, name) then +				return false, id +			end +		end +	end +	return true +end + | 
