refactor(grid): use an array to store nearby entries

This commit is contained in:
Linden
2025-03-13 19:28:57 +11:00
parent 5fb16444e6
commit 0b9f6e0cce

View File

@@ -32,7 +32,7 @@ local xDelta = (mapMaxX - mapMinX) / 34
local yDelta = (mapMaxY - mapMinY) / 50 local yDelta = (mapMaxY - mapMinY) / 50
local grid = {} local grid = {}
local lastCell = {} local lastCell = {}
local lastNearbyEntries = {} local gridCache = {}
local entrySet = {} local entrySet = {}
lib.grid = {} lib.grid = {}
@@ -82,18 +82,18 @@ end
---@param point vector ---@param point vector
---@param filter? fun(entry: GridEntry): boolean ---@param filter? fun(entry: GridEntry): boolean
---@return GridEntry[] ---@return Array<GridEntry>
function lib.grid.getNearbyEntries(point, filter) function lib.grid.getNearbyEntries(point, filter)
local minX, maxX, minY, maxY = getGridDimensions(point, xDelta, yDelta) local minX, maxX, minY, maxY = getGridDimensions(point, xDelta, yDelta)
if lastNearbyEntries.minX == minX and if gridCache.minX == minX and
lastNearbyEntries.maxX == maxX and gridCache.maxX == maxX and
lastNearbyEntries.minY == minY and gridCache.minY == minY and
lastNearbyEntries.maxY == maxY then gridCache.maxY == maxY then
return lastNearbyEntries.entries return gridCache.entries
end end
local entries = {} local entries = lib.array:new()
local n = 0 local n = 0
table.wipe(entrySet) table.wipe(entrySet)
@@ -118,11 +118,11 @@ function lib.grid.getNearbyEntries(point, filter)
end end
end end
lastNearbyEntries.minX = minX gridCache.minX = minX
lastNearbyEntries.maxX = maxX gridCache.maxX = maxX
lastNearbyEntries.minY = minY gridCache.minY = minY
lastNearbyEntries.maxY = maxY gridCache.maxY = maxY
lastNearbyEntries.entries = entries gridCache.entries = entries
return entries return entries
end end
@@ -145,7 +145,7 @@ function lib.grid.addEntry(entry)
grid[y] = row grid[y] = row
table.wipe(lastNearbyEntries) table.wipe(gridCache)
end end
end end
@@ -184,7 +184,7 @@ function lib.grid.removeEntry(entry)
::continue:: ::continue::
end end
table.wipe(lastNearbyEntries) table.wipe(gridCache)
return success return success
end end