90476217a3
As table hashes are generated from their GC pointer, and these pointers are potentially different each time a program is run, using them for keys in a table causes the iteration order to potentially differ between runs, too. This commit changes each_overlapping_entity() to not iterate the set of entities, assuring the order in which :each() passes entities to the callback function is deterministic. |
||
---|---|---|
LICENSE | ||
README.md | ||
shash.lua |
shash.lua
A simple, lightweight spatial hash for Lua.
Functions
shash.new([cellsize])
Creates a new spatial hash; if cellsize
is not specified a default value of
64
is used.
:add(obj, x, y, w, h)
Adds an object with the given bounding box to the spatial hash.
:update(obj, x, y [, w, h])
Updates the object's bounding box.
:remove(obj)
Removes the object from the spatial hash.
:clear()
Removes all objects from the spatial hash.
:each(x, y, w, h, fn, ...)
:each(obj, fn, ...)
For each object which overlaps with the given bounding box or object, the
function fn
is called. The first argument passed to fn
is the overlapping
object, followed by any additional arguments passed to each()
.
:info(opt, ...)
Returns information about the spatial hash which can be useful for debugging. Available options and their arguments are as follows:
Opt | Args | Description |
---|---|---|
entities |
Returns the total number of entities | |
cells |
Returns the total number of cells | |
cell |
x , y |
Returns the number of entities in the cell |
License
This library is free software; you can redistribute it and/or modify it under the terms of the MIT license. See LICENSE for details.