128 lines
5.1 KiB
JavaScript
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);
|
|
}
|
|
}
|