@tsparticles/updater-out-modes
Version:
tsParticles particles out modes updater
2 lines (1 loc) • 10.5 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/engine")):"function"==typeof define&&define.amd?define(["exports","@tsparticles/engine"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).__tsParticlesInternals=t.__tsParticlesInternals||{},t.__tsParticlesInternals.updaters=t.__tsParticlesInternals.updaters||{},t.__tsParticlesInternals.updaters.outModes=t.__tsParticlesInternals.updaters.outModes||{}),t.__tsParticlesInternals.engine)}(this,function(t,e){"use strict";class s{modes;#t;#e;constructor(t){this.#t=t,this.modes=[e.OutMode.bounce,e.OutMode.split],this.#e=t.plugins.filter(t=>void 0!==t.particleBounce)}update(t,s,i,n){if(!this.modes.includes(n))return;const o=this.#t;let a=!1;for(const e of this.#e)if(a=e.particleBounce?.(t,i,s)??!1,a)break;if(a)return;const r=t.getPosition(),l=t.offset,c=t.getRadius(),d=e.calculateBounds(r,c),u=o.canvas.size,p=!t.isInsideCanvasForOutMode(n,s);!function(t){if(t.outMode!==e.OutMode.bounce&&t.outMode!==e.OutMode.split||t.direction!==e.OutModeDirection.left&&t.direction!==e.OutModeDirection.right)return;t.bounds.right<0&&t.direction===e.OutModeDirection.left?t.particle.position.x=t.size+t.offset.x:t.bounds.left>t.canvasSize.width&&t.direction===e.OutModeDirection.right&&(t.particle.position.x=t.canvasSize.width-t.size-t.offset.x);const s=t.particle.velocity.x;let i=!1;if(t.outOfCanvas&&(t.direction===e.OutModeDirection.right&&s>0||t.direction===e.OutModeDirection.left&&s<0)){const s=e.getRangeValue(t.particle.options.bounce.horizontal.value);t.particle.velocity.x*=-s,i=!0}if(!i)return;const n=t.offset.x+t.size;t.outOfCanvas&&t.direction===e.OutModeDirection.right?t.particle.position.x=t.canvasSize.width-n:t.outOfCanvas&&t.direction===e.OutModeDirection.left&&(t.particle.position.x=n),t.outMode===e.OutMode.split&&t.particle.destroy()}({particle:t,outMode:n,direction:s,bounds:d,canvasSize:u,offset:l,outOfCanvas:p,size:c}),function(t){if(t.outMode!==e.OutMode.bounce&&t.outMode!==e.OutMode.split||t.direction!==e.OutModeDirection.bottom&&t.direction!==e.OutModeDirection.top)return;t.bounds.bottom<0&&t.direction===e.OutModeDirection.top?t.particle.position.y=t.size+t.offset.y:t.bounds.top>t.canvasSize.height&&t.direction===e.OutModeDirection.bottom&&(t.particle.position.y=t.canvasSize.height-t.size-t.offset.y);const s=t.particle.velocity.y;let i=!1;if(t.outOfCanvas&&(t.direction===e.OutModeDirection.bottom&&s>0||t.direction===e.OutModeDirection.top&&s<0)){const s=e.getRangeValue(t.particle.options.bounce.vertical.value);t.particle.velocity.y*=-s,i=!0}if(!i)return;const n=t.offset.y+t.size;t.outOfCanvas&&t.direction===e.OutModeDirection.bottom?t.particle.position.y=t.canvasSize.height-n:t.outOfCanvas&&t.direction===e.OutModeDirection.top&&(t.particle.position.y=n),t.outMode===e.OutMode.split&&t.particle.destroy()}({particle:t,outMode:n,direction:s,bounds:d,canvasSize:u,offset:l,outOfCanvas:p,size:c})}}class i{modes;constructor(t){this.modes=[e.OutMode.destroy]}update(t,s,i,n){if(this.modes.includes(n)){switch(t.outType){case e.ParticleOutType.normal:case e.ParticleOutType.outside:if(t.isInsideCanvasForOutMode(n,s))return;break;case e.ParticleOutType.inside:{const{dx:s,dy:i}=e.getDistances(t.position,t.moveCenter),{x:n,y:o}=t.velocity;if(n<0&&s>t.moveCenter.radius||o<0&&i>t.moveCenter.radius||n>=0&&s<-t.moveCenter.radius||o>=0&&i<-t.moveCenter.radius)return;break}}t.destroy(!0)}}}class n{modes;#t;constructor(t){this.#t=t,this.modes=[e.OutMode.none]}update(t,s,i,n){if(!this.modes.includes(n))return;if((t.options.move.distance.horizontal&&(s===e.OutModeDirection.left||s===e.OutModeDirection.right))??(t.options.move.distance.vertical&&(s===e.OutModeDirection.top||s===e.OutModeDirection.bottom)))return;const o=t.options.move.gravity,a=this.#t,r=a.canvas.size,l=t.getRadius();if(o.enable){const i=t.position;(!o.inverse&&i.y>r.height+l&&s===e.OutModeDirection.bottom||o.inverse&&i.y<-l&&s===e.OutModeDirection.top)&&t.destroy()}else{if(t.velocity.y>0&&t.position.y<=r.height+l||t.velocity.y<0&&t.position.y>=-l||t.velocity.x>0&&t.position.x<=r.width+l||t.velocity.x<0&&t.position.x>=-l)return;e.isPointInside(t.position,a.canvas.size,e.originPoint,l,s)||t.destroy()}}}const o=e.Vector.origin;class a{modes;#t;constructor(t){this.#t=t,this.modes=[e.OutMode.out]}update(t,s,i,n){if(!this.modes.includes(n))return;const a=this.#t;switch(t.outType){case e.ParticleOutType.inside:{const{x:s,y:i}=t.velocity;o.setTo(e.originPoint),o.length=t.moveCenter.radius,o.angle=t.velocity.angle+Math.PI,o.addTo(t.moveCenter);const{dx:n,dy:r}=e.getDistances(t.position,o);if(s<=0&&n>=0||i<=0&&r>=0||s>=0&&n<=0||i>=0&&r<=0)return;t.position.x=Math.floor(e.randomInRangeValue({min:0,max:a.canvas.size.width})),t.position.y=Math.floor(e.randomInRangeValue({min:0,max:a.canvas.size.height}));const{dx:l,dy:c}=e.getDistances(t.position,t.moveCenter);t.direction=Math.atan2(-c,-l),t.velocity.angle=t.direction,t.justWarped=!0;break}default:if(t.isInsideCanvasForOutMode(n,s))return;switch(t.outType){case e.ParticleOutType.outside:{t.position.x=Math.floor(e.randomInRangeValue({min:-t.moveCenter.radius,max:t.moveCenter.radius}))+t.moveCenter.x,t.position.y=Math.floor(e.randomInRangeValue({min:-t.moveCenter.radius,max:t.moveCenter.radius}))+t.moveCenter.y;const{dx:s,dy:i}=e.getDistances(t.position,t.moveCenter);t.moveCenter.radius&&(t.direction=Math.atan2(i,s),t.velocity.angle=t.direction),t.justWarped=!0;break}case e.ParticleOutType.normal:{const i=t.options.move.warp,n=a.canvas.size,o={bottom:n.height+t.getRadius()+t.offset.y,left:-t.getRadius()-t.offset.x,right:n.width+t.getRadius()+t.offset.x,top:-t.getRadius()-t.offset.y},r=t.getRadius(),l=e.calculateBounds(t.position,r);s===e.OutModeDirection.right&&l.left>n.width+t.offset.x?(t.position.x=o.left,t.initialPosition.x=t.position.x,i||(t.position.y=e.getRandom()*n.height,t.initialPosition.y=t.position.y),t.justWarped=!0):s===e.OutModeDirection.left&&l.right<-t.offset.x&&(t.position.x=o.right,t.initialPosition.x=t.position.x,i||(t.position.y=e.getRandom()*n.height,t.initialPosition.y=t.position.y),t.justWarped=!0),s===e.OutModeDirection.bottom&&l.top>n.height+t.offset.y?(i||(t.position.x=e.getRandom()*n.width,t.initialPosition.x=t.position.x),t.position.y=o.top,t.initialPosition.y=t.position.y,t.justWarped=!0):s===e.OutModeDirection.top&&l.bottom<-t.offset.y&&(i||(t.position.x=e.getRandom()*n.width,t.initialPosition.x=t.position.x),t.position.y=o.bottom,t.initialPosition.y=t.position.y,t.justWarped=!0);break}}}}}class r{updaters;#t;constructor(t){this.#t=t,this.updaters=new Map}init(t){this.#s(t,e.OutMode.bounce,t=>new s(t)),this.#s(t,e.OutMode.out,t=>new a(t)),this.#s(t,e.OutMode.destroy,t=>new i(t)),this.#s(t,e.OutMode.none,t=>new n(t))}isEnabled(t){return!t.destroyed&&!t.spawning}update(t,s){const i=t.options.move.outModes;t.justWarped=!1,this.#i(t,s,i.bottom??i.default,e.OutModeDirection.bottom),this.#i(t,s,i.left??i.default,e.OutModeDirection.left),this.#i(t,s,i.right??i.default,e.OutModeDirection.right),this.#i(t,s,i.top??i.default,e.OutModeDirection.top)}#s=(t,e,s)=>{const i=t.options.move.outModes;!this.updaters.has(e)&&((t,e)=>t.default===e||t.bottom===e||t.left===e||t.right===e||t.top===e)(i,e)&&this.updaters.set(e,s(this.#t))};#i=(t,e,s,i)=>{for(const n of this.updaters.values())n.update(t,i,e,s)}}async function l(t){t.checkVersion("4.1.1"),await t.pluginManager.register(t=>{t.pluginManager.addParticleUpdater("outModes",t=>Promise.resolve(new r(t)))})}const c=globalThis;c.__tsParticlesInternals=c.__tsParticlesInternals??{},c.loadOutModesUpdater=l,t.loadOutModesUpdater=l}),Object.assign(globalThis.window||globalThis,{loadOutModesUpdater:(globalThis.__tsParticlesInternals.updaters.outModes||{}).loadOutModesUpdater}),delete(globalThis.window||globalThis).tsparticlesInternalExports;