diff --git a/imports/zones/client.lua b/imports/zones/client.lua index 3f4ab34..b74685d 100644 --- a/imports/zones/client.lua +++ b/imports/zones/client.lua @@ -98,20 +98,22 @@ end ---@type table local insideZones = {} ----@type table -local enteringZones = {} ----@type table -local exitingZones = {} -local enteringSize = 0 -local exitingSize = 0 + +---@type CZone[] | Array +local exitingZones = lib.array:new() + +---@type CZone[] | Array +local enteringZones = lib.array:new() + local tick local glm_polygon_contains = glm.polygon.contains -local function removeZone(self) - Zones[self.id] = nil - insideZones[self.id] = nil - enteringZones[self.id] = nil - exitingZones[self.id] = nil +local function removeZone(zone) + Zones[zone.id] = nil + insideZones[zone.id] = nil + + table.remove(exitingZones, exitingZones:indexOf(zone)) + table.remove(enteringZones, enteringZones:indexOf(zone)) end CreateThread(function() @@ -134,8 +136,7 @@ CreateThread(function() zone.insideZone = true if zone.onEnter then - enteringSize += 1 - enteringZones[enteringSize] = zone + enteringZones:push(zone) end if zone.inside or zone.debug then @@ -148,8 +149,7 @@ CreateThread(function() insideZones[zone.id] = nil if zone.onExit then - exitingSize += 1 - exitingZones[exitingSize] = zone + exitingZones:push(zone) end end @@ -159,6 +159,9 @@ CreateThread(function() end end + local exitingSize = #exitingZones + local enteringSize = #enteringZones + if exitingSize > 0 then table.sort(exitingZones, function(a, b) return a.distance > b.distance @@ -168,7 +171,6 @@ CreateThread(function() exitingZones[i]:onExit() end - exitingSize = 0 table.wipe(exitingZones) end @@ -181,7 +183,6 @@ CreateThread(function() enteringZones[i]:onEnter() end - enteringSize = 0 table.wipe(enteringZones) end