UNPKG

@tsparticles/updater-orbit

Version:

tsParticles particles orbit updater

87 lines (86 loc) 3.75 kB
"use strict"; 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;