draw method
void
draw(})
Implementation
void draw(
Canvas canvas,
List<Sprite> sprites, {
BlendMode blendMode = BlendMode.modulate,
AABB? cullArea,
}) {
final count = sprites.length;
if (count == 0) return;
_ensureCapacity(count);
int bufIdx = 0;
int batchStart = 0;
int currentPage = sprites[0].texture.pageIndex;
for (int j = 0; j < count; j++) {
final sprite = sprites[j];
if (j > 0 && sprite.texture.pageIndex != currentPage) {
_drawBatch(canvas, batchStart, bufIdx - batchStart, currentPage, blendMode, cullArea?.rect);
currentPage = sprite.texture.pageIndex;
batchStart = bufIdx;
}
final rect = _spriteRect(sprite);
final ri = bufIdx * 4;
_rects[ri + 0] = rect.left;
_rects[ri + 1] = rect.top;
_rects[ri + 2] = rect.right;
_rects[ri + 3] = rect.bottom;
double scos = sprite.scale;
double ssin = 0;
if (sprite.rotation != 0) {
scos = math.cos(sprite.rotation) * sprite.scale;
ssin = math.sin(sprite.rotation) * sprite.scale;
}
final anchorX = rect.width * sprite.originX;
final anchorY = rect.height * sprite.originY;
final tx = sprite.position.x + -scos * anchorX + ssin * anchorY;
final ty = sprite.position.y + -ssin * anchorX - scos * anchorY;
final ti = bufIdx * 4;
_transforms[ti + 0] = scos;
_transforms[ti + 1] = ssin;
_transforms[ti + 2] = tx;
_transforms[ti + 3] = ty;
_colors[bufIdx] = sprite.tint.withAlpha(sprite.opacity).toARGB32();
bufIdx++;
}
_drawBatch(canvas, batchStart, bufIdx - batchStart, currentPage, blendMode, cullArea?.rect);
}