@tsparticles/plugin-emitters
Version:
tsParticles emitters plugin
2 lines (1 loc) • 17.7 kB
JavaScript
!function(t){t.__tsParticlesInternals=t.__tsParticlesInternals||{},t.__tsParticlesInternals.bundles=t.__tsParticlesInternals.bundles||{},t.__tsParticlesInternals.effects=t.__tsParticlesInternals.effects||{},t.__tsParticlesInternals.engine=t.__tsParticlesInternals.engine||{},t.__tsParticlesInternals.interactions=t.__tsParticlesInternals.interactions||{},t.__tsParticlesInternals.palettes=t.__tsParticlesInternals.palettes||{},t.__tsParticlesInternals.paths=t.__tsParticlesInternals.paths||{},t.__tsParticlesInternals.plugins=t.__tsParticlesInternals.plugins||{},t.__tsParticlesInternals.plugins=t.__tsParticlesInternals.plugins||{},t.__tsParticlesInternals.plugins.emittersShapes=t.__tsParticlesInternals.plugins.emittersShapes||{},t.__tsParticlesInternals.presets=t.__tsParticlesInternals.presets||{},t.__tsParticlesInternals.shapes=t.__tsParticlesInternals.shapes||{},t.__tsParticlesInternals.updaters=t.__tsParticlesInternals.updaters||{},t.__tsParticlesInternals.utils=t.__tsParticlesInternals.utils||{},t.__tsParticlesInternals.canvas=t.__tsParticlesInternals.canvas||{},t.__tsParticlesInternals.canvas=t.__tsParticlesInternals.canvas||{},t.__tsParticlesInternals.canvas.utils=t.__tsParticlesInternals.canvas.utils||{},t.__tsParticlesInternals.path=t.__tsParticlesInternals.path||{},t.__tsParticlesInternals.path=t.__tsParticlesInternals.path||{},t.__tsParticlesInternals.path.utils=t.__tsParticlesInternals.path.utils||{};var e="undefined"!=typeof Proxy?function(t){return new Proxy(t,{get:function(t,e){return e in t||(t[e]={}),t[e]}})}:function(t){return t};t.__tsParticlesInternals.bundles=e(t.__tsParticlesInternals.bundles),t.__tsParticlesInternals.effects=e(t.__tsParticlesInternals.effects),t.__tsParticlesInternals.interactions=e(t.__tsParticlesInternals.interactions),t.__tsParticlesInternals.palettes=e(t.__tsParticlesInternals.palettes),t.__tsParticlesInternals.paths=e(t.__tsParticlesInternals.paths),t.__tsParticlesInternals.plugins=e(t.__tsParticlesInternals.plugins),t.__tsParticlesInternals.plugins.emittersShapes=e(t.__tsParticlesInternals.plugins.emittersShapes),t.__tsParticlesInternals.presets=e(t.__tsParticlesInternals.presets),t.__tsParticlesInternals.shapes=e(t.__tsParticlesInternals.shapes),t.__tsParticlesInternals.updaters=e(t.__tsParticlesInternals.updaters),t.__tsParticlesInternals.utils=e(t.__tsParticlesInternals.utils),t.__tsParticlesInternals.canvas=e(t.__tsParticlesInternals.canvas),t.__tsParticlesInternals.path=e(t.__tsParticlesInternals.path),t.tsparticlesInternalExports=t.tsparticlesInternalExports||{}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:this),function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine")):"function"==typeof define&&define.amd?define(["exports","@tsparticles/plugin-interactivity","@tsparticles/engine"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).__tsParticlesInternals=t.__tsParticlesInternals||{},t.__tsParticlesInternals.plugins=t.__tsParticlesInternals.plugins||{},t.__tsParticlesInternals.plugins.emitters=t.__tsParticlesInternals.plugins.emitters||{}),t.__tsParticlesInternals.plugins.interactivity,t.__tsParticlesInternals.engine)}(this,function(t,e,i){"use strict";class s{count;delay;duration;wait=!1;load(t){i.isNull(t)||(i.loadProperty(this,"count",t.count),i.loadRangeProperty(this,"delay",t.delay),i.loadRangeProperty(this,"duration",t.duration),i.loadProperty(this,"wait",t.wait))}}class n{delay=.1;quantity=1;load(t){i.isNull(t)||(i.loadRangeProperty(this,"quantity",t.quantity),i.loadRangeProperty(this,"delay",t.delay))}}class a{color=!1;opacity=!1;load(t){i.isNull(t)||(i.loadProperty(this,"color",t.color),i.loadProperty(this,"opacity",t.opacity))}}class r{options={};replace=new a;type="square";load(t){i.isNull(t)||(void 0!==t.options&&(this.options=i.deepExtend({},t.options??{})),this.replace.load(t.replace),i.loadProperty(this,"type",t.type))}}class o{height=0;mode=i.PixelMode.percent;width=0;load(t){i.isNull(t)||(i.loadProperty(this,"mode",t.mode),i.loadProperty(this,"height",t.height),i.loadProperty(this,"width",t.width))}}class l{fill;stroke;load(t){i.isNull(t)||(t.fill&&(this.fill??=new i.Fill,this.fill.load(t.fill)),t.stroke&&(this.stroke??=new i.Stroke,this.stroke.load(t.stroke)))}}class c{autoPlay=!0;direction;domId;fill=!0;life=new s;name;particles;position;rate=new n;shape=new r;size;spawn=new l;spawnFillColor;spawnStrokeColor;startCount=0;load(t){i.isNull(t)||(i.loadProperty(this,"autoPlay",t.autoPlay),void 0!==t.size&&(this.size??=new o,this.size.load(t.size)),i.loadProperty(this,"direction",t.direction),i.loadProperty(this,"domId",t.domId),i.loadProperty(this,"fill",t.fill),this.life.load(t.life),i.loadProperty(this,"name",t.name),this.particles=i.executeOnSingleOrMultiple(t.particles,t=>i.deepExtend({},t)),this.rate.load(t.rate),this.shape.load(t.shape),this.spawn.load(t.spawn),void 0!==t.position&&(this.position={},void 0!==t.position.x&&(this.position.x=i.setRangeValue(t.position.x)),void 0!==t.position.y&&(this.position.y=i.setRangeValue(t.position.y))),void 0!==t.spawnFillColor&&(this.spawnFillColor??=new i.AnimatableColor,this.spawnFillColor.load(t.spawnFillColor)),void 0!==t.spawnStrokeColor&&(this.spawnStrokeColor??=new i.AnimatableColor,this.spawnStrokeColor.load(t.spawnStrokeColor)),i.loadProperty(this,"startCount",t.startCount))}}const h={count:1,enable:!0},p="emitters";class d extends e.ExternalInteractorBase{handleClickMode;maxDistance;#t;constructor(t,e){super(e),this.#t=t,this.maxDistance=0,this.handleClickMode=(t,e)=>{const s=this.container.actualOptions.interactivity.modes.emitters;if(!s||t!==p)return;let n;if(i.isArray(s.value)){const t=0,e=s.value.length;if(e>t&&s.random.enable){n=[];const t=new Set;for(let a=0;a<s.random.count;a++){const r=Math.floor(i.getRandom()*s.value.length);if(t.has(r)&&t.size<e){a--;continue}t.add(r);const o=i.itemFromArray(s.value,r);o&&n.push(o)}}else n=s.value}else n=s.value;const a=n,r=e.mouse.clickPosition;i.executeOnSingleOrMultiple(a,async t=>{await this.#t.addEmitter(this.container,t,r)})}}clear(){}init(){}interact(t,e){for(const t of this.#t.getArray(this.container))t.update(e)}isEnabled(t,e){const s=this.container.actualOptions,n=t.mouse,a=(e?.interactivity??s.interactivity).events;return!(!n.clickPosition||!a.onClick.enable)&&i.isInArray(p,a.onClick.mode)}loadModeOptions(t,...e){t.emitters={random:h,value:[]};for(const s of e)if(s?.emitters)if(i.isArray(s.emitters))for(const e of s.emitters){const i=new c;i.load(e),t.emitters.value.push(i)}else if("value"in s.emitters){const e=s.emitters;if(t.emitters.random.enable=e.random?.enable??t.emitters.random.enable,t.emitters.random.count=e.random?.count??t.emitters.random.count,i.isArray(e.value))for(const i of e.value){const e=new c;e.load(i),t.emitters.value.push(e)}else{const i=new c;i.load(e.value),t.emitters.value.push(i)}}else{const e=new c;e.load(s.emitters),t.emitters.value.push(e)}}removeEmitter(t){const e=this.#t.getArray(this.container).indexOf(t);e>=0&&this.#t.getArray(this.container).splice(e,1)}reset(){}}async function u(t){const{ShapeManager:e}=await Promise.resolve().then(function(){return f}),i=t.pluginManager;i.emitterShapeManager??=new e,i.addEmitterShapeGenerator??=(t,e)=>{i.emitterShapeManager?.addShapeGenerator(t,e)}}const m=new WeakMap;function g(t){const e=t.pluginManager;let i=m.get(e);return i||(i=Promise.resolve().then(function(){return v}).then(({EmittersInstancesManager:t})=>new t(e)).catch(t=>{throw m.delete(e),t}),m.set(e,i)),i}t.EmitterClickMode=void 0,(t.EmitterClickMode||(t.EmitterClickMode={})).emitter="emitter";class y{id="emitters";#t;constructor(t){this.#t=t}async getPlugin(t){const{EmittersPluginInstance:e}=await Promise.resolve().then(function(){return I});return new e(this.#t,t)}loadOptions(t,e,s){(this.needsPlugin(e)||this.needsPlugin(s))&&s?.emitters&&(e.emitters=i.executeOnSingleOrMultiple(s.emitters,t=>{const e=new c;return e.load(t),e}))}needsPlugin(t){if(!t)return!1;const e=t.emitters;return i.isArray(e)&&!!e.length||void 0!==e}}async function _(t){await async function(t){t.checkVersion("4.3.2"),await t.pluginManager.register(async t=>{const e=await g(t);await u(t),t.pluginManager.addPlugin(new y(e))})}(t),await async function(t){t.checkVersion("4.3.2"),await t.pluginManager.register(async t=>{const i=await g(t);e.ensureInteractivityPluginLoaded(t),await u(t),t.pluginManager.addInteractor?.("externalEmitters",t=>Promise.resolve(new d(i,t)))})}(t)}const w=globalThis;w.__tsParticlesInternals=w.__tsParticlesInternals??{},w.loadEmittersPlugin=_;const P=new Map;var f=Object.freeze({__proto__:null,ShapeManager:class{addShapeGenerator(t,e){this.getShapeGenerator(t)||P.set(t,e)}getShapeGenerator(t){return P.get(t)}getSupportedShapeGenerators(){return P.keys()}}});var v=Object.freeze({__proto__:null,EmittersInstancesManager:class{#e;#i;constructor(t){this.#e=new Map,this.#i=t}async addEmitter(t,e,i){const s=new c;s.load(e);const{EmitterInstance:n}=await Promise.resolve().then(function(){return M}),a=new n(this.#i,t,e=>{this.removeEmitter(t,e)},s,i);return await a.init(),this.getArray(t).push(a),a}clear(t){this.initContainer(t),this.#e.set(t,[])}getArray(t){this.initContainer(t);let e=this.#e.get(t);return e||(e=[],this.#e.set(t,e)),e}initContainer(t){this.#e.has(t)||(this.#e.set(t,[]),t.getEmitter=e=>{const s=this.getArray(t);return void 0===e||i.isNumber(e)?s[e??0]:s.find(t=>t.name===e)},t.addEmitter=async(e,i)=>this.addEmitter(t,e,i),t.removeEmitter=e=>{const i=t.getEmitter?.(e);i&&this.removeEmitter(t,i)},t.playEmitter=e=>{const i=t.getEmitter?.(e);i&&i.externalPlay()},t.pauseEmitter=e=>{const i=t.getEmitter?.(e);i&&i.externalPause()})}removeEmitter(t,e){const i=this.getArray(t).indexOf(e);i>=0&&this.getArray(t).splice(i,1)}}});var I=Object.freeze({__proto__:null,EmittersPluginInstance:class{#s;#t;constructor(t,e){this.#t=t,this.#s=e,this.#t.initContainer(e)}async init(){const t=this.#s.actualOptions.emitters;if(i.isArray(t))for(const e of t)await this.#t.addEmitter(this.#s,e);else await this.#t.addEmitter(this.#s,t)}pause(){for(const t of this.#t.getArray(this.#s))t.pause()}play(){for(const t of this.#t.getArray(this.#s))t.play()}resize(){for(const t of this.#t.getArray(this.#s))t.resize()}stop(){this.#t.clear(this.#s)}update(t){this.#t.getArray(this.#s).forEach(e=>{e.update(t)})}}});function C(t,e,s,n){(t.paint??=new i.Paint).fill={color:i.AnimatableColor.create(void 0,{value:e}),enable:n,opacity:s}}function S(t,e,s,n){(t.paint??=new i.Paint).stroke={color:i.AnimatableColor.create(void 0,{value:e}),opacity:s,width:n}}var M=Object.freeze({__proto__:null,EmitterInstance:class{fill;name;options;position;size;spawnFillColor;spawnFillEnabled;spawnFillOpacity;spawnStrokeColor;spawnStrokeOpacity;spawnStrokeWidth;#s;#n;#a;#r;#o;#l;#c;#h;#p;#d;#u;#m;#g;#i;#y;#_;#w;#P;#f;#v;constructor(t,e,s,n,a){this.#i=t,this.#s=e,this.#y=s,this.#n=0,this.#a=0,this.#r=0,this.#p=a,n instanceof c?this.options=n:(this.options=new c,this.options.load(n)),this.#f=e.retina.reduceFactor?i.getRangeValue(this.options.life.delay??0)*i.millisecondsToSeconds/e.retina.reduceFactor:1/0,this.position=this.#p??this.#I(),this.name=this.options.name,this.fill=this.options.fill,this.#c=!this.options.life.wait,this.#v=!1;const r=i.deepExtend({},this.options.particles);if(r.move??={},r.move.direction??=this.options.direction,this.options.spawn.fill?.color&&(this.spawnFillColor=i.rangeColorToHsl(this.#i,this.options.spawn.fill.color)),this.options.spawn.stroke?.color&&(this.spawnStrokeColor=i.rangeColorToHsl(this.#i,this.options.spawn.stroke.color)),this.#g=!this.options.autoPlay,this.#m=r,this.#P=this.#C(),this.size=this.#P.mode===i.PixelMode.percent?{width:this.#P.width/i.percentDenominator*this.#s.canvas.size.width,height:this.#P.height/i.percentDenominator*this.#s.canvas.size.height}:{width:this.#P.width,height:this.#P.height},this.#d=this.options.life.count??-1,this.#h=this.#d<=0,this.options.domId){const t=i.safeDocument().getElementById(this.options.domId);t&&(this.#u=new MutationObserver(()=>{this.resize()}),this.#_=new ResizeObserver(()=>{this.resize()}),this.#u.observe(t,{attributes:!0,attributeFilter:["style","width","height"]}),this.#_.observe(t))}const o=this.options.shape,l=this.#i.emitterShapeManager?.getShapeGenerator(o.type);l&&(this.#w=l.generate(this.#s,this.position,this.size,this.fill,o.options)),this.#s.dispatchEvent("emitterCreated",{emitter:this}),this.play()}externalPause(){this.#g=!0,this.pause()}externalPlay(){this.#g=!1,this.play()}async init(){await(this.#w?.init())}pause(){this.#g||(this.#l=void 0)}play(){if(this.#g)return;if(!(this.#d>0||this.#h)&&this.options.life.count||!(this.#c||this.#r>=(this.#f??0)))return;const t=this.#s;if(void 0===this.#l){const e=i.getRangeValue(this.options.rate.delay);this.#l=t.retina.reduceFactor?e*i.millisecondsToSeconds/t.retina.reduceFactor:1/0}(this.#d>0||this.#h)&&this.#S()}resize(){const t=this.#p,e=this.#s;this.position=t&&i.isPointInside(t,e.canvas.size,i.Vector.origin)?t:this.#I(),this.#P=this.#C(),this.size=this.#P.mode===i.PixelMode.percent?{width:this.#P.width/i.percentDenominator*e.canvas.size.width,height:this.#P.height/i.percentDenominator*e.canvas.size.height}:{width:this.#P.width,height:this.#P.height},this.#w?.resize(this.position,this.size)}update(t){if(this.#g)return;const e=this.#s;this.#c&&(this.#c=!1,this.#r=this.#f??0,this.#a=this.#l??0),this.#v||(this.#v=!0,this.#M(this.options.startCount)),void 0!==this.#o&&(this.#n+=t.value,this.#n>=this.#o&&(this.pause(),void 0!==this.#f&&(this.#f=void 0),this.#h||this.#d--,this.#d>0||this.#h?(this.position=this.#I(),this.#w?.resize(this.position,this.size),this.#f=e.retina.reduceFactor?i.getRangeValue(this.options.life.delay??0)*i.millisecondsToSeconds/e.retina.reduceFactor:1/0):this.#E(),this.#n-=this.#o,this.#o=void 0)),void 0!==this.#f&&(this.#r+=t.value,this.#r>=this.#f&&(this.#s.dispatchEvent("emitterPlay"),this.play(),this.#r-=this.#f,this.#f=void 0)),void 0!==this.#l&&(this.#a+=t.value,this.#a>=this.#l&&(this.#z(),this.#a-=this.#l))}#I(){const t=this.#s;if(this.options.domId){const e=i.safeDocument().getElementById(this.options.domId);if(e){const s=e.getBoundingClientRect(),n=t.retina.pixelRatio;return{x:(s.x+s.width*i.half)*n,y:(s.y+s.height*i.half)*n}}}return i.calcPositionOrRandomFromSizeRanged({size:t.canvas.size,position:this.options.position})}#C(){const t=this.#s;if(this.options.domId){const e=i.safeDocument().getElementById(this.options.domId);if(e){const s=e.getBoundingClientRect();return{width:s.width*t.retina.pixelRatio,height:s.height*t.retina.pixelRatio,mode:i.PixelMode.precise}}}return this.options.size??(()=>{const t=new o;return t.load({height:0,mode:i.PixelMode.percent,width:0}),t})()}#E(){this.#u?.disconnect(),this.#u=void 0,this.#_?.disconnect(),this.#_=void 0,this.#y(this),this.#s.dispatchEvent("emitterDestroyed",{emitter:this})}#z(){if(this.#g)return;const t=i.getRangeValue(this.options.rate.quantity);this.#M(t)}#M(t){const e=i.itemFromSingleOrMultiple(this.#m)??{},s=this.options.spawn.fill?.color?.animation,n=this.options.spawn.fill?.enable??!!this.options.spawn.fill?.color,a=void 0===this.options.spawn.fill?.opacity?i.defaultOpacity:i.getRangeValue(this.options.spawn.fill.opacity),r=this.options.spawn.stroke?.color?.animation,o=void 0===this.options.spawn.stroke?.opacity?i.defaultOpacity:i.getRangeValue(this.options.spawn.stroke.opacity),l=void 0===this.options.spawn.stroke?.width?1:i.getRangeValue(this.options.spawn.stroke.width),c=this.#s.retina.reduceFactor,h=!!s,p=!!r,d=!!this.#w,u=h||p,m=u||d,g=u?{h:i.hMax,s:i.sMax,l:i.lMax}:null,y=this.options.shape;for(let h=0;h<t*c;h++){const t=m?i.deepExtend({},e):e;this.spawnFillOpacity=a,this.spawnFillEnabled=n,this.spawnStrokeOpacity=o,this.spawnStrokeWidth=l,this.spawnFillColor&&(s&&g&&(this.spawnFillColor.h=this.#b(s.h,this.spawnFillColor.h,g.h,3.6),this.spawnFillColor.s=this.#b(s.s,this.spawnFillColor.s,g.s),this.spawnFillColor.l=this.#b(s.l,this.spawnFillColor.l,g.l)),C(t,this.spawnFillColor,this.spawnFillOpacity,this.spawnFillEnabled)),this.spawnStrokeColor&&(r&&g&&(this.spawnStrokeColor.h=this.#b(r.h,this.spawnStrokeColor.h,g.h,3.6),this.spawnStrokeColor.s=this.#b(r.s,this.spawnStrokeColor.s,g.s),this.spawnStrokeColor.l=this.#b(r.l,this.spawnStrokeColor.l,g.l)),S(t,this.spawnStrokeColor,this.spawnStrokeOpacity,this.spawnStrokeWidth));let c=this.position;if(this.#w){const e=this.#w.randomPosition();if(e){c=e.position;const s=y.replace;s.color&&e.color&&C(t,e.color,s.opacity?e.opacity??i.defaultOpacity:i.defaultOpacity,!0)}else c=null}c&&this.#s.particles.addParticle(c,t)}}#S(){if(this.#g)return;const t=void 0!==this.options.life.duration?i.getRangeValue(this.options.life.duration):void 0;(this.#d>0||this.#h)&&void 0!==t&&t>0&&(this.#o=t*i.millisecondsToSeconds)}#b(t,e,s,n=1){const a=this.#s;if(!t.enable)return e;const r=i.randomInRangeValue(t.offset),o=i.getRangeValue(this.options.rate.delay),l=a.retina.reduceFactor?o*i.millisecondsToSeconds/a.retina.reduceFactor:1/0;return(e+i.getRangeValue(t.speed)*a.fpsLimit/l+r*n)%s}}});t.EmitterShapeBase=class{fill;options;position;size;constructor(t,e,i,s){this.position=t,this.size=e,this.fill=i,this.options=s}resize(t,e){this.position=t,this.size=e}},t.ensureEmittersPluginLoaded=function(t){if(!t.pluginManager.addEmitterShapeGenerator)throw new Error("tsParticles Emitters Plugin is not loaded")},t.loadEmittersPlugin=_}),Object.assign(globalThis.window||globalThis,{loadEmittersPlugin:(globalThis.__tsParticlesInternals.plugins.emitters||{}).loadEmittersPlugin}),delete(globalThis.window||globalThis).tsparticlesInternalExports;