perf(client/zones): reduce overhead

In a naive test with 10k sphere zones vs points, zones ran 0.02~0.04ms higher.
Overhead is roughly halved with these tweaks.
This commit is contained in:
Linden
2022-09-11 12:06:30 +10:00
parent be8b740937
commit 57187c8c30

View File

@@ -218,22 +218,26 @@ local function removeZone(self)
end end
local inside = {} local inside = {}
local insideCount local insideCount = 0
local tick local tick
local glm_polygon_contains = glm.polygon.contains
CreateThread(function() CreateThread(function()
while true do while true do
table.wipe(inside) if insideCount ~= 0 then
table.wipe(inside)
insideCount = 0
end
local coords = GetEntityCoords(cache.ped) local coords = GetEntityCoords(cache.ped)
cache.coords = coords cache.coords = coords
insideCount = 0
for _, zone in pairs(Zones) do for _, zone in pairs(Zones) do
local contains = zone:contains(coords)
zone.distance = #(zone.coords - coords) zone.distance = #(zone.coords - coords)
local radius = zone.radius
if contains then if not radius and glm_polygon_contains(zone.polygon, coords, zone.thickness / 4) or zone.distance < radius then
if not zone.insideZone then if not zone.insideZone then
zone.insideZone = true zone.insideZone = true
@@ -263,7 +267,7 @@ CreateThread(function()
end end
if not tick then if not tick then
if insideCount > 0 then if insideCount ~= 0 then
tick = SetInterval(function() tick = SetInterval(function()
for i = 1, insideCount do for i = 1, insideCount do
local zone = inside[i] local zone = inside[i]
@@ -317,8 +321,6 @@ local function debugSphere(self)
self.radius, 255, 42, 24, 100, false, false, false, true, false, false, false) self.radius, 255, 42, 24, 100, false, false, false, true, false, false, false)
end end
local glm_polygon_contains = glm.polygon.contains
local function contains(self, coords) local function contains(self, coords)
return glm_polygon_contains(self.polygon, coords, self.thickness / 4) return glm_polygon_contains(self.polygon, coords, self.thickness / 4)
end end