"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OpacityUpdater = void 0; const tsparticles_engine_1 = require("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 = (0, tsparticles_engine_1.clamp)(particle.opacity.value, minValue, maxValue); } } class OpacityUpdater { constructor(container) { this.container = container; } init(particle) { const opacityOptions = particle.options.opacity; particle.opacity = { enable: opacityOptions.animation.enable, max: (0, tsparticles_engine_1.getRangeMax)(opacityOptions.value), min: (0, tsparticles_engine_1.getRangeMin)(opacityOptions.value), value: (0, tsparticles_engine_1.getRangeValue)(opacityOptions.value), loops: 0, maxLoops: (0, tsparticles_engine_1.getRangeValue)(opacityOptions.animation.count), }; const opacityAnimation = opacityOptions.animation; if (opacityAnimation.enable) { particle.opacity.decay = 1 - (0, tsparticles_engine_1.getRangeValue)(opacityAnimation.decay); particle.opacity.status = "increasing"; const opacityRange = opacityOptions.value; particle.opacity.min = (0, tsparticles_engine_1.getRangeMin)(opacityRange); particle.opacity.max = (0, tsparticles_engine_1.getRangeMax)(opacityRange); switch (opacityAnimation.startValue) { case "min": particle.opacity.value = particle.opacity.min; particle.opacity.status = "increasing"; break; case "random": particle.opacity.value = (0, tsparticles_engine_1.randomInRange)(particle.opacity); particle.opacity.status = (0, tsparticles_engine_1.getRandom)() >= 0.5 ? "increasing" : "decreasing"; break; case "max": default: particle.opacity.value = particle.opacity.max; particle.opacity.status = "decreasing"; break; } particle.opacity.velocity = ((0, tsparticles_engine_1.getRangeValue)(opacityAnimation.speed) / 100) * this.container.retina.reduceFactor; if (!opacityAnimation.sync) { particle.opacity.velocity *= (0, tsparticles_engine_1.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); } } exports.OpacityUpdater = OpacityUpdater;