forEachDrawArea method
void
forEachDrawArea({})
Implementation
void forEachDrawArea({
required void Function(double screenX, double screenY, int tile) visit,
Vec2? position,
AABB? cullArea,
}) {
position ??= Vec2.zero();
cullArea ??= AABB(
Vec2.zero(),
width: (width * cellSize).toDouble(),
height: (height * cellSize).toDouble(),
);
final cullLeft = cullArea.left - position.x;
final cullRight = cullArea.right - position.x;
final cullTop = cullArea.top - position.y;
final cullBottom = cullArea.bottom - position.y;
final minX = (cullLeft / cellSize).floor();
final maxX = (cullRight / cellSize).ceil();
final minY = (cullTop / cellSize).floor();
final maxY = (cullBottom / cellSize).ceil();
for (int gy = minY; gy < maxY; gy++) {
for (int gx = minX; gx < maxX; gx++) {
if (!inBounds2d(gx, gy)) continue;
final value = tileAt2d(gx, gy);
if (value < 0) continue;
visit(
position.x + cellSize * gx,
position.y + cellSize * gy,
value,
);
}
}
}