drawLight method

void drawLight(
  1. Canvas canvas,
  2. Size size
)
override

Implementation

void drawLight(Canvas canvas, Size size) {
  canvas.saveLayer(null, Paint()..blendMode = BlendMode.screen);
  for (EParticle eParticle in _flameParticleList) {
    //make new Color list with new alpha values
    List<Color> lightGradientColors = [];
    _radialLightGradient.colors.forEach((color) {
      lightGradientColors.add(Color.fromARGB(
          (color.alpha * (eParticle.radius / eParticle.initRadius))
              .toInt(), //smaller particles produce less light => lower alpha
          color.red,
          color.green,
          color.blue));
    });
    RadialGradient lightGradient =
        RadialGradient(colors: lightGradientColors);

    Offset eParticlePos =
        eParticle.position.getAbsolutePair(size).getOffset();
    double absLightRadius = lightRadius.getAbsoluteValue(size);

    Rect lightGradientRect =
        Rect.fromCircle(center: eParticlePos, radius: absLightRadius);
    _lightPaint.shader = lightGradient.createShader(lightGradientRect);
    canvas.drawCircle(eParticlePos, absLightRadius, _lightPaint);
  }
  canvas.restore();
}