draw method
void
draw(])
Implementation
void draw(Canvas canvas, List<Sprite> sprites,
[Paint? paint, BlendMode blendMode = BlendMode.modulate]) {
final count = sprites.length;
_ensureCapacity(count);
var i = 0;
for (int j = 0; j < count; j++) {
final sprite = sprites[j];
// --- rect (left, top, right, bottom)
final rect = _spriteRect(sprite);
final ri = i * 4;
_rects[ri + 0] = rect.left;
_rects[ri + 1] = rect.top;
_rects[ri + 2] = rect.right;
_rects[ri + 3] = rect.bottom;
// --- transform (scos, ssin, tx, ty)
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 = i * 4;
_transforms[ti + 0] = scos;
_transforms[ti + 1] = ssin;
_transforms[ti + 2] = tx;
_transforms[ti + 3] = ty;
// --- color (as ARGB int)
_colors[i] = sprite.tint.withAlpha(sprite.opacity).toARGB32();
i++;
}
canvas.drawRawAtlas(
image,
Float32List.sublistView(_transforms, 0, count * 4),
Float32List.sublistView(_rects, 0, count * 4),
Int32List.sublistView(_colors, 0, count),
blendMode,
null,
paint ?? _emptyPaint,
);
}