UNPKG

macaw-threejs

Version:

Macaw Three.js is ready to use library to connect Three.js with your project.<br/> Under the hood is a fully optimized, clean Three.js set up to make it easy to implement effects for images (future text, etc.). With effects out of the box, you don't even

2 lines (1 loc) 2.02 kB
import{__awaiter as t}from"tslib";import e from"animejs";import{SCENE_TYPE as i}from"../constants.js";import{Effect as r}from"../Effect/index.js";class n extends r{constructor(t){super(),this.settings=t;const e=new Set;e.add(i.fixed),e.add(i.absolute),this.type=e,this.imageFragmentString={varying:"\n\t\t\t\tvarying float vNoise;\n\t\t\t",afterGl_FragColor:"\n\t\t\t\tgl_FragColor.rgb += 0.05*vec3(vNoise);\n\t\t\t"},this.imageVertexString={struct:"\n\t\t\t\tstruct ClickWave {\n\t\t\t\t\tfloat strength;\n\t\t\t\t};\n\t\t\t",uniforms:"\n\t\t\t\tuniform ClickWave u_clickWave;\n\t\t\t",varying:"\n\t\t\t\tvarying float vNoise;\n\t\t\t",beforeGl_Position:" \n\t\t\t\tfloat dist = distance(uv, u_clickPosition);\n\n\t\t\t\tnewposition.z += u_click*10.*sin(dist*u_clickWave.strength + u_time);\n\t\t\t\tvNoise = u_click*sin(dist*10. - u_time);\n "},this.imageUniforms={u_clickWave:{value:this.settings}}}setSettings(t){if(!this.core)throw new Error(`Unable set settings for ${this.constructor.name}, core is undefined`);this.settings=t,this.core.storage.meshImages.forEach((t=>{this.setImageUniforms(t)}))}click(i,r){return t(this,void 0,void 0,(function*(){if(!this.core)throw new Error(`Unable "play" click for ${this.constructor.name}, core is undefined`);const t=this.core.storage.meshImages.get(i);if(r.length>0&&t&&t.material){const{material:i}=t;i.uniforms.u_clickPosition.value=r[0].uv,this.core.controllers.render.isManualShouldRender=!0,this.core.controllers.render.countClickRender+=1,e({targets:i.uniforms.u_click,easing:"easeOutQuart",value:[1,0]}).finished.then((()=>{if(!this.core)throw new Error(`Unable anime in ${this.constructor.name}`);this.core.controllers.render.countClickRender-=1,0===this.core.controllers.render.countClickRender&&(this.core.controllers.render.isManualShouldRender=!1)}))}}))}setImageUniforms({material:t}){if(!t)throw new Error(`Unable set uniforms for ${this.constructor.name}, material is undefined`);t.uniforms.u_clickWave.value=this.settings}}export{n as ClickWave};