initializeParticles method
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);
}