public void QueryAABB(ref AABB aabb, SpatialDatabaseCallback callback) { _callback = callback; _aabb = aabb; _spatialDatabase.Query(ref aabb, _aabbCallback); _callback = null; }
public Space(ISpatialDatabase spatialDatabase) { _spatialDatabase = spatialDatabase; _aabbCallback = AABBCallback; _circleCallback = CircleCallback; _addToListCallback = AddToList; }
public void QueryCircle(ref FixVec2 position, Fix radius, SpatialDatabaseCallback callback) { var aabb = new AABB(position, radius); _callback = callback; _aabb = aabb; _circlePosition = position; _circleRadius = radius; _spatialDatabase.Query(ref aabb, _circleCallback); _callback = null; }
public void Query(ref AABB aabb, SpatialDatabaseCallback callback) { var l = (int)FixMath.Floor(aabb.L / CellSize); var b = (int)FixMath.Floor(aabb.B / CellSize); var r = (int)FixMath.Floor(aabb.R / CellSize); var t = (int)FixMath.Floor(aabb.T / CellSize); for (var i = b; i <= t; i++) { for (var j = l; j <= r; j++) { EnumerateBodies(j, i, callback); } } _stamp++; }
private void EnumerateBodies(int x, int y, SpatialDatabaseCallback callback) { var hash = HashFunction(x, y); for (var tmp = _cells[hash]; tmp != null; tmp = tmp.Next) { // TODO check for same entity var shape = tmp.Shape; if (shape.Stamp == _stamp) { continue; } callback(tmp.Entity, shape); shape.Stamp = _stamp; } }