@tsparticles/updater-orbit
Version:
tsParticles particles orbit updater
87 lines (86 loc) • 3.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrbitUpdater = void 0;
const engine_1 = require("@tsparticles/engine");
const Orbit_js_1 = require("./Options/Classes/Orbit.js");
const Enums_js_1 = require("./Enums.js");
const Utils_js_1 = require("./Utils.js");
const double = 2, half = 0.5, doublePI = Math.PI * double, defaultOrbitSpeed = 0, halfPI = Math.PI * half, piAndAHalf = Math.PI + halfPI, startAngle = 0, defaultOpacity = 1, defaultWidth = 1, defaultRotation = 0;
class OrbitUpdater {
constructor(container, engine) {
this._engine = engine;
this._container = container;
}
afterDraw(particle) {
const orbitOptions = particle.options.orbit;
if (orbitOptions?.enable) {
this.drawOrbit(particle, Enums_js_1.OrbitType.front);
}
}
beforeDraw(particle) {
const orbitOptions = particle.options.orbit;
if (orbitOptions?.enable) {
this.drawOrbit(particle, Enums_js_1.OrbitType.back);
}
}
drawOrbit(particle, type) {
const container = this._container;
let start, end;
switch (type) {
case Enums_js_1.OrbitType.back:
start = halfPI;
end = piAndAHalf;
break;
case Enums_js_1.OrbitType.front:
start = piAndAHalf;
end = halfPI;
break;
default:
start = startAngle;
end = doublePI;
}
container.canvas.draw(ctx => {
(0, Utils_js_1.drawEllipse)(ctx, particle, particle.orbitColor ?? particle.getFillColor(), particle.retina.orbitRadius ?? container.retina.orbitRadius ?? particle.getRadius(), particle.orbitOpacity ?? defaultOpacity, particle.orbitWidth ?? defaultWidth, (particle.orbitRotation ?? defaultRotation) * container.retina.pixelRatio, start, end);
});
}
init(particle) {
const container = this._container, particlesOptions = particle.options, orbitOptions = particlesOptions.orbit;
if (!orbitOptions?.enable) {
return;
}
particle.orbitRotation = (0, engine_1.getRangeValue)(orbitOptions.rotation.value);
particle.orbitColor = (0, engine_1.rangeColorToHsl)(this._engine, orbitOptions.color);
particle.retina.orbitRadius =
orbitOptions.radius !== undefined
? (0, engine_1.getRangeValue)(orbitOptions.radius) * container.retina.pixelRatio
: undefined;
container.retina.orbitRadius = particle.retina.orbitRadius;
particle.orbitAnimationSpeed = orbitOptions.animation.enable
? (0, engine_1.getRangeValue)(orbitOptions.animation.speed)
: defaultOrbitSpeed;
particle.orbitWidth = (0, engine_1.getRangeValue)(orbitOptions.width);
particle.orbitOpacity = (0, engine_1.getRangeValue)(orbitOptions.opacity);
}
isEnabled(particle) {
const orbitAnimations = particle.options.orbit?.animation;
return !particle.destroyed && !particle.spawning && !!orbitAnimations?.enable;
}
loadOptions(options, ...sources) {
if (!options.orbit) {
options.orbit = new Orbit_js_1.Orbit();
}
for (const source of sources) {
options.orbit.load(source?.orbit);
}
}
update(particle, delta) {
if (!this.isEnabled(particle)) {
return;
}
if (particle.orbitRotation === undefined) {
particle.orbitRotation = defaultRotation;
}
particle.orbitRotation += (particle.orbitAnimationSpeed ?? defaultOrbitSpeed / doublePI) * delta.factor;
}
}
exports.OrbitUpdater = OrbitUpdater;