UNPKG

@tsparticles/updater-size

Version:

tsParticles particles size updater

55 lines (54 loc) 2.1 kB
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); } }