initializeParticles method
Sets up the spoiler region, the bounding path, and initializes all particles.
If config.isEnabled
is true, the spoiler is turned on, and we start the particle animation.
path
is the shape describing where particles should exist.
config
includes fade, density, maxParticleSize, etc.
Implementation
void initializeParticles(Path path, SpoilerConfig config) {
// Ensure maxParticleSize is valid
assert(config.maxParticleSize >= 1, 'maxParticleSize must be >= 1');
_config = config;
particles.clear();
if (_spoilerPath != path) {
_spoilerPath.reset();
if (config.maskConfig != null) {
final newPath = Path.combine(
config.maskConfig!.maskOperation,
path,
config.maskConfig!.maskPath.shift(
config.maskConfig!.offset,
),
);
_spoilerPath.addPath(newPath, Offset.zero);
} else {
_spoilerPath.addPath(path, Offset.zero);
}
_spoilerBounds = _spoilerPath.getBounds();
}
_initFadeIfNeeded();
if (_circleImage.color != _config.particleColor ||
_circleImage.dimension != _config.maxParticleSize) {
_circleImage = CircleImageFactory.create(
diameter: _config.maxParticleSize,
color: _config.particleColor,
);
}
final subPaths = _spoilerPath.subPaths;
for (final path in subPaths) {
final rect = path.getBounds();
final particleCount =
(rect.width * rect.height) * _config.particleDensity;
for (int i = 0; i < particleCount; i++) {
particles.add(_createRandomParticlePath(path));
}
}
_isEnabled = config.isEnabled;
_reallocAtlasBuffers();
_startParticleAnimationIfNeeded();
}