2023-02-17 11:06:01 +01:00

128 lines
5.1 KiB
JavaScript

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);
}
}