@tsparticles/updater-size
Version:
tsParticles particles size updater
55 lines (54 loc) • 2.1 kB
JavaScript
import { getRandom, getRangeValue, loadOptionProperty, percentDenominator, } from "@tsparticles/engine";
import { initParticleNumericAnimationValue, updateAnimation } from "@tsparticles/animation-utils";
import { Size } from "./Options/Classes/Size.js";
const minLoops = 0;
export class SizeUpdater {
#container;
constructor(container) {
this.#container = container;
}
init(particle) {
const container = this.#container, sizeOptions = particle.options.size;
if (!sizeOptions) {
return;
}
const sizeAnimation = sizeOptions.animation;
if (!sizeAnimation.enable) {
return;
}
particle.size.velocity = (particle.retina.sizeAnimationSpeed / percentDenominator) * container.retina.reduceFactor;
if (sizeAnimation.sync) {
return;
}
particle.size.velocity *= getRandom();
}
isEnabled(particle) {
return (!particle.destroyed &&
!particle.spawning &&
particle.size.enable &&
((particle.size.maxLoops ?? minLoops) <= minLoops ||
((particle.size.maxLoops ?? minLoops) > minLoops &&
(particle.size.loops ?? minLoops) < (particle.size.maxLoops ?? minLoops))));
}
loadOptions(options, ...sources) {
loadOptionProperty(options, "size", Size, ...sources);
}
preInit(particle) {
const pxRatio = this.#container.retina.pixelRatio, options = particle.options, sizeOptions = options.size;
if (!sizeOptions) {
return;
}
particle.size = initParticleNumericAnimationValue(sizeOptions, pxRatio);
particle.retina.sizeAnimationSpeed = getRangeValue(sizeOptions.animation.speed) * pxRatio;
}
reset(particle) {
particle.size.time = 0;
particle.size.loops = 0;
}
update(particle, delta) {
if (!this.isEnabled(particle) || !particle.options.size) {
return;
}
updateAnimation(particle, particle.size, true, particle.options.size.animation.destroy, delta);
}
}