initializeParticles method

void initializeParticles({
  1. required Iterable<Path> paths,
  2. required SpoilerConfig config,
})

Implementation

void initializeParticles({
  required Iterable<Path> paths,
  required SpoilerConfig config,
}) {
  _particles.clear();
  _maxParticleSize = config.particleConfig.maxParticleSize;
  _particleColor = config.particleConfig.color;
  _particleSpeed = config.particleConfig.speed;

  // Refresh circle image to match config
  _circleImage = CircleImageFactory.create(
    diameter: _maxParticleSize,
    color: Colors.white,
    shapePath: config.particleConfig.shapePreset?.path,
  );
  final coverage = config.particleConfig.density.clamp(0.0, 1.0);

  for (final path in paths) {
    final rect = path.getBounds();

    final screenArea = rect.width * rect.height;
    final particleArea = pi *
        pow(config.particleConfig.maxParticleSize * 0.5, 2) *
        config.particleConfig.areaFactor;

    final rawCount = (screenArea * coverage) / particleArea;
    final particleCount = rawCount.round();
    if (particleCount <= 0) {
      continue;
    }

    for (int i = 0; i < particleCount; i++) {
      _particles.add(_createRandomParticlePath(path));
    }
  }
  _reallocBuffers(_particles.length);
}