draw method

void draw(
  1. Canvas canvas,
  2. List<Sprite> sprites, [
  3. Paint? paint,
  4. BlendMode blendMode = BlendMode.modulate,
])

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,
  );
}