import { clamp, getRandom, getRangeMax, getRangeMin, getRangeValue, randomInRange, } from "tsparticles-engine"; function checkDestroy(particle, value, minValue, maxValue) { switch (particle.options.opacity.animation.destroy) { case "max": if (value >= maxValue) { particle.destroy(); } break; case "min": if (value <= minValue) { particle.destroy(); } break; } } function updateOpacity(particle, delta) { var _a, _b, _c, _d, _e, _f; if (!particle.opacity) { return; } const minValue = particle.opacity.min, maxValue = particle.opacity.max, decay = (_a = particle.opacity.decay) !== null && _a !== void 0 ? _a : 1; if (particle.destroyed || !particle.opacity.enable || (((_b = particle.opacity.maxLoops) !== null && _b !== void 0 ? _b : 0) > 0 && ((_c = particle.opacity.loops) !== null && _c !== void 0 ? _c : 0) > ((_d = particle.opacity.maxLoops) !== null && _d !== void 0 ? _d : 0))) { return; } switch (particle.opacity.status) { case "increasing": if (particle.opacity.value >= maxValue) { particle.opacity.status = "decreasing"; if (!particle.opacity.loops) { particle.opacity.loops = 0; } particle.opacity.loops++; } else { particle.opacity.value += ((_e = particle.opacity.velocity) !== null && _e !== void 0 ? _e : 0) * delta.factor; } break; case "decreasing": if (particle.opacity.value <= minValue) { particle.opacity.status = "increasing"; if (!particle.opacity.loops) { particle.opacity.loops = 0; } particle.opacity.loops++; } else { particle.opacity.value -= ((_f = particle.opacity.velocity) !== null && _f !== void 0 ? _f : 0) * delta.factor; } break; } if (particle.opacity.velocity && particle.opacity.decay !== 1) { particle.opacity.velocity *= decay; } checkDestroy(particle, particle.opacity.value, minValue, maxValue); if (!particle.destroyed) { particle.opacity.value = clamp(particle.opacity.value, minValue, maxValue); } } export class OpacityUpdater { constructor(container) { this.container = container; } init(particle) { const opacityOptions = particle.options.opacity; particle.opacity = { enable: opacityOptions.animation.enable, max: getRangeMax(opacityOptions.value), min: getRangeMin(opacityOptions.value), value: getRangeValue(opacityOptions.value), loops: 0, maxLoops: getRangeValue(opacityOptions.animation.count), }; const opacityAnimation = opacityOptions.animation; if (opacityAnimation.enable) { particle.opacity.decay = 1 - getRangeValue(opacityAnimation.decay); particle.opacity.status = "increasing"; const opacityRange = opacityOptions.value; particle.opacity.min = getRangeMin(opacityRange); particle.opacity.max = getRangeMax(opacityRange); switch (opacityAnimation.startValue) { case "min": particle.opacity.value = particle.opacity.min; particle.opacity.status = "increasing"; break; case "random": particle.opacity.value = randomInRange(particle.opacity); particle.opacity.status = getRandom() >= 0.5 ? "increasing" : "decreasing"; break; case "max": default: particle.opacity.value = particle.opacity.max; particle.opacity.status = "decreasing"; break; } particle.opacity.velocity = (getRangeValue(opacityAnimation.speed) / 100) * this.container.retina.reduceFactor; if (!opacityAnimation.sync) { particle.opacity.velocity *= getRandom(); } } particle.opacity.initialValue = particle.opacity.value; } isEnabled(particle) { var _a, _b, _c, _d; return (!particle.destroyed && !particle.spawning && !!particle.opacity && particle.opacity.enable && (((_a = particle.opacity.maxLoops) !== null && _a !== void 0 ? _a : 0) <= 0 || (((_b = particle.opacity.maxLoops) !== null && _b !== void 0 ? _b : 0) > 0 && ((_c = particle.opacity.loops) !== null && _c !== void 0 ? _c : 0) < ((_d = particle.opacity.maxLoops) !== null && _d !== void 0 ? _d : 0)))); } reset(particle) { if (particle.opacity) { particle.opacity.loops = 0; } } update(particle, delta) { if (!this.isEnabled(particle)) { return; } updateOpacity(particle, delta); } }