public void ForEachInRadius(Vector3 worldPosition, float radius, GridElementCallback callback) { var radiusX = WorldToGridX(radius); var radiusZ = WorldToGridZ(radius); var centerX = WorldToGridX(worldPosition.x); var centerZ = WorldToGridZ(worldPosition.z); for (var x = -radiusX; x <= radiusX; x++) { for (var z = -radiusZ; z <= radiusZ; z++) { if (new Vector2(x, z).sqrMagnitude > radiusX * radiusZ) { continue; } var gridPositionX = x + centerX; var gridPositionZ = z + centerZ; var itemIndex = gridPositionZ * ResolutionX + gridPositionX; if (itemIndex < 0 || itemIndex >= _items.Length) { continue; } callback(_items, gridPositionX, gridPositionZ, itemIndex); } } }
public void ForEachInRect(int x, int z, int itemsX, int itemsZ, GridElementCallback callback) { for (var currentZ = 0; currentZ <= itemsZ; currentZ++) { for (var currentX = 0; currentX <= itemsX; currentX++) { var gridPositionX = currentX + x; var gridPositionZ = currentZ + z; var itemIndex = gridPositionZ * ResolutionX + gridPositionX; if (itemIndex < 0 || itemIndex >= _items.Length) { continue; } callback(_items, gridPositionX, gridPositionZ, itemIndex); } } }