memoscan
← all memos

Memo 0x8f9effb1…c9d13c on Ethereum

sk.value=t.skipMask||this._skipMask,e>.7&&(n.uSkipMask.value=t.skipMask||this._skipMask)):n.uSkipMask.value=!0,n.uPercentGrid.value=e,n.uIsFlower.value=!0}update(e,t,s,i=1){const n=this.u;n.tPattern.value=e,n.uPercentGrid.value=s-.1,n.uSkipMask.value=t.skipMask,s>.7&&(n.uSkipMask.value=t.skipMask||this._skipMask),n.uThM.value*=2,n.uThA.value=(c.vegeLinesData.lines.thA+s*.1)*2,n.uDontUsePattern.value=t.skipPattern,n.uCountLines.value=t.countLines,n.uLineColor.value=new E(t.color),n.uLengthA.value=t.lengthA*2,n.uRotType.value=t.rotationType,n.uAlpha.value.x=t.alpha*i,n.uAlpha.value.y=t.alpha*i+.01,n.ugenhash.value=a.seed+t.id*1234,n.uIsFlower.value=!1}setPattern(e){this.u.tPattern.value=e}}var ua=`#define M_PI 3.1415926535897932384626433832795 #i_ noiseUtils #i_ snoise2d #i_ snoise3d #injectUniforms _u _f uSeed;_u bool hasMask;_u _s2 tMask;in _v2 vUv;out _v4 outColor0;_vm_f z=uTime+uSeed;_v2 uv=vUv;uv-=.5;uv*=uScale;uv+=.5;if(uMode==0){_f noise=sn3d(_v3(uv,z))*uStr;outColor0=_v4(_v3(noise),1.0);}else{_v3 p=_v3(uv,z);_v3 curl=curlNoise(p);_f noise=atan(curl.y,curl.x)/M_PI*2.;outColor0=_v4(_v3(noise*uStr),1.0);}if(hasMask){_v4 mask=texture(tMask,vUv);outColor0*=mask;}}`;class da extends j{constructor({textures:e={},cellSize:t=1024}={}){const s=a.gl,n=a.size.width/t/a.size.width;super(1,{type:s.FLOAT,internalFormat:s.renderer.isWebgl2?s.RGBA32F:s.RGBA,wrapS:s.CLAMP_TO_EDGE,wrapT:s.CLAMP_TO_EDGE,generateMipmaps:!1,minFilter:s.NEAREST,magFilter:s.NEAREST},{ratio:n}),this.init({uniforms:{uSeed:{value:0}},textures:e,fs:ua,dataFroms:[c.patternNoiseData,c.gridData]}),this._mask=new G({ratio:.1}),this.uniforms.hasMask={value:!1},this.uniforms.tMask={value:this._mask.texture}}generate(e){this.uniforms.uSeed.value=a.seed}render(e=1,t,s=!1,i=null){this._programLinker?.update(),s&&(i?this.uniforms.tMask.value=i:(this._drawMask(),this.uniforms.tMask.value=this._mask.texture)),this.uniforms.hasMask.value=s,t?(this.uniforms.uScale.value=c.patternNoiseData.scale+t.scaleMax,this.uniforms.uTime.value=t.time,this.uniforms.uMode.value=t.mode):(this.uniforms.uScale.value=c.patternNoiseData.scale+e*c.patternNoiseData.scaleMax,this.uniforms.uTime.value+=.1),super.render({hasToUpdateUniforms:!1})}_drawMask(){this._mask.clear();const e=a.size.width,t=a.size.height;this._mask.ctx.fillStyle="#fff";const s=this._mask.ratio;this._mask.ctx.beginPath(),this._mask.ctx.moveTo(0,0),this._mask.ctx.lineTo(e*.5*s,0),this._mask.ctx.lineTo(0,t*.5*s),this._mask.ctx.fill(),this._mask.ctx.closePath(),this._mask.ctx.beginPath(),this._mask.ctx.moveTo(e*.5*s,0),this._mask.ctx.lineTo(e*s,0),this._mask.ctx.lineTo(e*s,t*.5*s),this._mask.ctx.fill(),this._mask.ctx.closePath(),this._mask.ctx.beginPath(),this._mask.ctx.moveTo(0,t*.5*s),this._mask.ctx.lineTo(e*.5*s,t*s),this._mask.ctx.lineTo(0,t*s),this._mask.ctx.fill(),this._mask.ctx.closePath(),this._mask.ctx.beginPath(),this._mask.ctx.moveTo(e*.5*s,t*s),this._mask.ctx.lineTo(e*s,t*s),this._mask.ctx.lineTo(e*s,t*.5*s),this._mask.ctx.fill(),this._mask.ctx.closePath(),this._mask.texture.needsUpdate=!0}}function ca(r){const e=r>>16&255,t=r>>8&255,s=r&255;return{r:e/255,g:t/255,b:s/255}}function fa(r,e,t,s="array"){var i=Math.max(r,e,t),n=Math.min(r,e,t),l,o,h=(i+n)/2;if(i==n)l=o=0;else{var d=i-n;switch(o=h>.5?d/(2-i-n):d/(i+n),i){case r:l=(e-t)/d+(e<t?6:0);break;case e:l=(t-r)/d+2;break;case t:l=(r-e)/d+4;break}l/=6}return s==="array"?[l,o,h]:s==="rgb"?{r:l,g:o,b:h}:{h:l,s:o,l:h}}function ga(r,e=!0){const t=ca(r),s=fa(t.r,t.g,t.b);return e?(s[0]*=360,s[1]*=100,s[2]*=100,`hsl( ${s[0]}, ${s[1]}%, ${s[2]}% )`):s}const tt=function(r){const e=ga(r,!1);return{h:e[0]*360,s:e[1]*100,l:e[2]*100}};class st{constructor({x:e,y:t,a:s,length:i=220,color:n,maxDepth:l=15,branchAngle:o=.99,type:h="tree"}={}){this.x=e,this.y=t,this.a=s,this.length=i,this.color=n,this.maxDepth=l,this.branchAngle=o,this.type=h,this._boundaryDepthRatio=12,this.branches=[],this.flowers=[],this.flowersSpecial=[]}async generate(){this._countSplit=0,this.branches.push({x:this.x,y:this.y,z:0,a:this.a,length:this.length,color:this.color}),await this._split(this.x+Math.cos(this.a)*this.length,this.y+Math.sin(this.a)*this.length,this.a,this.length,0,this.color)}async _split(e,t,s,i,n=0,l={h:a.rand()*360,s:100,l:50},o=0){const h=c.treebstractData;let d=h.splitCountMin+h.splitCountAdd*a.rand()>>0;n>8?d=Math.min(2,d):n>12&&(d=Math.min(1,d));const u=this.maxDepth*.4;let f;this.maxDepth<=this._boundaryDepthRatio?f=ie(n,0,this.maxDepth,1,1.2):f=ie(n,0,u,1,1.4)+ie(n,u,this.maxDepth,0,.2);let g=s;d>1&&(g-=this.branchAngle*.5*f);let _=i*.9;_=Math.max(h.minLength,_);const m=this.maxDepth>this._boundaryDepthRatio;this._countSplit++,this._countSplit%250===0&&await P();for(let p=0;p<d;p++){const w=p>=3&&p<5&&m?10:1,v=a.rand()*this.branchAngle*f*w,x=g+v,y={x:e,y:t,z:o,a:x,length:_,color:l,type:"branch"};n>4&&a.rand3()<.4&&this.branches.push(y);const M=n+1,k=ie(M,0,this.maxDepth,.9,.3);if(M<3||M<this.maxDepth&&a.rand()<k){l={...l},l.h=a.rand()<.3?l.h+a.rand()*20-10:l.h;const S=e+Math.cos(x)*_,U=t+Math.sin(x)*_,C=o+a.rand()*4-2;if(S<-300||U<-300||S>a.size.width+300||U>a.size.height+300)continue;this._split(S,U,x,_,n+1,l,C)}else{this.flowers.push({x:e+Math.cos(x)*_,y:t+Math.sin(x)*_,z:o+4,a:x,color:l,type:"flower"});const S=1+a.rand()*3>>0,U=Math.PI*.6/S;let L=x-Math.PI*.3;for(let D=0;D<S;D++){const A=-20+a.rand()*60,I=a.rand()<.15?"radial":"tangent",q=e+Math.cos(L)*(_+A),H=t+Math.sin(L)*(_+A);if(q<0||H<0||q>a.size.width||H>a.size.height)continue;const Y={x:q,y:H,z:o+4,dir:L,color:l,size:a.rand2()*40+4,type:"flower",typeOrientation:I};this.flowers.length<600&&this.flowers.push(Y),I=="radial"&&this.flowersSpecial.push(Y),L+=U}}}}prepareRendering(){this.elementsByZ=this.branches.concat(this.flowers)}async render(e,t,s){let i=16,n=36*2;e.fillStyle="#fff";let l=0;for(const o of this.elementsByZ){const h=Math.cos(o.a)*.5+.5,d=Math.sin(o.a)*.5+.5;if(o.type=="flower"){const u=o.x,f=o.y,g=n;e.fillRect((u-g*.5)*s,(f-g*.5)*s,g*s,g*s)}else{const u=o.x,f=o.y,g=o.x+Math.cos(o.a)*o.length,_=o.y+Math.sin(o.a)*o.length;t.beginPath(),t.strokeStyle=`rgb(${h*255}, ${d*255}, 255)`,t.lineWidth=i*s,t.moveTo(u*s,f*s),t.lineTo(g*s,_*s),t.stroke(),t.closePath()}l++,l%300===0&&await P()}}}class _a{constructor(){this.position={x:a.size.width*.5,y:0},this._ratio=.1;const e={flipY:!1};this.canvasBranch=new G({renderTargetOpts:e,ratio:this._ratio}),this.canvasElements=new G({renderTargetOpts:e,ratio:this._ratio})}generate(){this._trees=[];const e=1+a.rand()*12>>0,t=a.size.width/(e+1);for(let i=0;i<e;i++){const n=t*(i+1)+a.rand()*a.size.width*.2-a.size.width*.1;this._generateForestTree(n)}let s=0;e==1?s=a.rand()<.5?0:2:s=a.rand()*3>>0,this._generateForegroundTree(s)}async generateForest(e){this.color=e,this._trees=[];const t=3+a.rand()*5>>0,s=a.size.width/(t+1);for(let i=0;i<t;i++){const n=s*(i+1)+a.rand()*a.size.width*.2-a.size.width*.1;a.renderingMode!=="editor"?(await this._generateForestTree(n),P()):this._generateForestTree(n)}}generateForeground(e){this.color=e,this._trees=[],this._generateForegroundTree(a.rand()*3>>0)}async _generateForegroundTree(e=-1){e==-1&&(e=a.rand()*3>>0);let t=0;e==0?t=.25+a.rand()*.15-.075:e==1?t=.4+a.rand()*.2:t=.6+a.rand()*.15;const s=a.size.width*t,i=0;let n=(a.size.width<a.size.height?200:0)+500;n*=2;const l=this._getColor(),o=new st({x:s,y:i,a:Math.PI*.45+a.rand()*Math.PI*.1,length:n,color:l,maxDepth:12,branchAngle:1.503,type:"foreground"});a.renderingMode!=="editor"?await o.generate():o.generate(),this._trees.push(o)}async _generateForestTree(e){const t=e,s=a.rand()*-600,i=Math.PI*.45+a.rand()*Math.PI*.1,n=11+a.rand()*5>>0;let l=(a.size.width<a.size.height?200:-130*a.rand())+300+a.rand()*ie(n,11,16,150+a.rand()*150,100)>>0;l*=2;const o=.85+a.rand()*.3,h=this._getColor(),d=new st({x:t,y:s,a:i,length:l,color:h,maxDepth:n,branchAngle:o,type:"forest"});a.renderingMode!=="editor"?await d.generate():d.generate(),this._trees.push(d)}_getColor(){if(this.color){let e;return typeof this.color=="string"?e=tt(parseInt(this.color.replace("#",""),16)):e=tt(this.color),e.h=(e.h+a.rand()*150)%360,e}return{h:2.68392420373857+a.rand()*150,s:100,l:50}}getFlowerSpecial(){const e=[];for(const t of this._trees)for(const s of t.flowersSpecial)e.push(s);return e}get trees(){return this._trees}get flowersSpecial(){return this._trees.reduce((e,t)=>e.concat(t.flowersSpecial),[])}get texture(){return this.canvasElements.texture}get textureOrientation(){return this.texture}get textureBranch(){return this.canvasBranch.texture}get textureBranchOrientation(){return this.canvasBranch.texture}}class le{constructor(e,t,s,i,n){this._layer=e,this._sceneDeformer=t,this._patternsRenderer=s,this._vegeLines=i,this._elements=n,this._percentRender=0}setLayer(e){this._layer=e}async generate(){}_getPattern(e){return this._sceneDeformer.render(this._patternsRenderer.texture,e),this._sceneDeformer.texture}async renderScene(e,t,s=1){const i=this._layer.isSingleDir?[new F(1,1)]:[new F(1,0),new F(0,1)],n=i.length,l=1/a.size.width*2;for(let o=0;o<n;o++){const h=i[o];let d=this._getPattern(h);this._vegeLines.updateProgramLinker(),this._vegeLines.uniforms.uIsNormal.value=o==0;const u=o==0?0:l;this._vegeLines.uniforms.uOffset.value.x=h.x*u,this._vegeLines.uniforms.uOffset.value.y=h.y*u,this._vegeLines.update(d,this._layer,t),a.renderingMode!=="editor"?await this.renderVegeLines(s/n):this.renderVegeLines(s/n),this._vegeLines.uniforms.hasToCheckColor.value=!1}}async renderVegeLines(e=1,t=a.linesPerGeometry){const s=Math.ceil(a.linesTotal/t),i=e/s;this._vegeLines.uniforms.uIDAdd.value=0;for(let n=0;n<s;n++)this._vegeLines.render({hasToClear:!1,hasToUpdateUniforms:!1}),this._vegeLines.uniforms.uIDAdd.value+=t,this._percentRender+=i,a.loader.setProgressRender(a.loader.progressRenderLocal+this._percentRender),a.renderingMode!=="editor"&&await Nt()}get patternId(){return this._layer.patternId}}class pa extends le{constructor(e,t,s,i,n){super(e,t,s,i,n),this._treebstract=new _a}async generate(){a.renderingMode!=="editor"?this._layer.maskType==1?await this._treebstract.generateForest(this._layer.color):await this._treebstract.generateForeground(this._layer.color):this._layer.maskType==1?this._treebstract.generateForest(this._layer.color):this._treebstract.generateForeground(this._layer.color)}_getPattern(){return this._elements.treebstractRenderer.texture}async render(e,t,s){this._percentRender=0;const i=s/3,n=this._elements.treebstractRenderer;await n.render(this._treebstract.trees);const l=this._elements.flowersRenderer,o=this._treebstract.getFlowerSpecial();l.renderFlowers(o),this._vegeLines.updateProgramLinker(),this._vegeLines.uniforms.tTrees.value=n.textureBranch,this._vegeLines.uniforms.tTreesOrientation.value=n.textureBranchOrientation,this._vegeLines.updateForTrees(t,!0),await this.renderVegeLines(i),this._vegeLines.updateProgramLinker(),this._vegeLines.uniforms.tTrees.value=l.texture,this._vegeLines.uniforms.tTreesOrientation.value=l.textureOrientation,this._vegeLines.updateForFlowers(t,this._layer,null,!1),await this.renderVegeLines(i),await this.renderScene(e,t,i)}}class ma extends le{constructor(e,t,s,i,n){super(e,t,s,i,n)}async render(e,t,s){this._percentRender=0,this._patternsRenderer.render(e,this._layer.noise,this._layer.hasMask),await this.renderScene(e,t,s)}}class xa{constructor(){}prepare(e){this._ryokanCellSize=e}async generate(){const e=a.size.width/this._ryokanCellSize,t=a.size.height/this._ryokanCellSize;this._noise=new je(a.rand2),this._branches=[],this._dir=Math.PI*.1+Math.PI*a.rand2()*.8;const s=10+a.rand2()*10>>0;for(let i=0;i<s;i++){const n=Math.floor(6+a.rand2()*(e-3))*this._ryokanCellSize,l=Math.floor(6+a.rand2()*(t-3))*this._ryokanCellSize;this._branches.push(this._generateFromNewOrigin(n,l,i)),await P()}}_generateFromNewOrigin(e,t,s){this._leavesData=[];const i=this._generateTrunk(e,t,this._dir,5+a.rand2()*15>>0,s),n=this._generateLeaves();return{trunk:i,leaves:n}}_generateTrunk(e,t,s,i,n=0,l=!0){const o=c.treesData.flowers,h=[];h.push({x:e,y:t});const d=[];let u=e,f=t;for(let _=0;_<i;_++){s+=this._noise.noise3D(u*o.trunkNoiseScale,f*o.trunkNoiseScale,n)*(o.trunkNoiseStr*(l?1:.5)),u+=Math.cos(s)*o.trunkStep,f+=Math.sin(s)*o.trunkStep;const m=_/i;if(m>.3&&a.rand2()<o.leavesChance&&this._leavesData.push({x:u,y:f,a:s}),l&&m>.4&&a.rand2()<o.trunkBranchChance){const p=a.rand2()<.5?2:4;d.push(this._generateTrunk(u,f,s+Math.PI*.5*(a.rand2()<.5?-1:1),i/p>>0,n,!1))}h.push({x:u,y:f,a:s})}const g=[h];for(const _ of d)g.push(_);return l?g:h}_generateLeaves(){const e=[];for(const t of this._leavesData){const s=a.rand2()*12+1>>0;for(let i=0;i<s;i++){const n=t.a+Math.PI*a.rand2()-Math.PI*.5,l=a.rand2()*200,o=t.x+Math.cos(n)*l,h=t.y+Math.sin(n)*l,d={x:o,y:h,size:a.rand2()*50+4,a:n};e.push(d)}}return e}get branches(){return this._branches}}class va extends le{constructor(e,t,s,i,n){super(e,t,s,i,n),this._flowers=new xa}async generate(e){this._flowers.prepare(e),a.renderingMode!=="editor"?await this._flowers.generate():this._flowers.generate()}async render(e,t,s){this._percentRender=0;const i=this._elements.flowersRenderer,n=this._flowers.branches;i.render(n),this._vegeLines.updateProgramLinker(),this._vegeLines.uniforms.tTrees.value=i.texture,this._vegeLines.uniforms.tTreesOrientation.value=i.textureOrientation,this._vegeLines.updateForFlowers(t,this._layer,c.treesData.flowers.color2,!1),await this.renderVegeLines(s)}}class ya extends le{constructor(e,t,s,i,n){super(e,t,s,i,n)}async render(e,t,s){const i=this._elements.trees;this._vegeLines.updateProgramLinker(),this._vegeLines.uniforms.tTrees.value=i.texture,this._vegeLines.uniforms.tTreesOrientation.value=i.textureOrientation,this._vegeLines.updateForTrees(t,!0,!0),await this.renderVegeLines(1*s)}}class it extends le{constructor(e,t,s,i,n){super(e,t,s,i,n)}async render(){const e=this._elements.gridPattern;e.render({hasToClear:!1}),this._vegeLines.addChild(e.mesh),this._vegeLines.removeChild(this._vegeLines._mesh),this._vegeLines.render({hasToClear:!1,hasToUpdateUniforms:!1}),this._vegeLines.addChild(this._vegeLines._mesh),this._vegeLines.removeChild(e.mesh)}}class wa{constructor(e,t=512,s=!1,i=null,n){e=e,this._flowers=i.flowers,this._flowersRenderer=i.flowersRenderer,this._gridPattern=i.gridPattern,this._treebstract=i.treebstract,this._treebstractRenderer=i.treebstractRenderer,this._elements=i,this._vegeLines=i.vegeLines,this._texturesDeformer={...e},this._texturesVegeLines={...e},this._cellSize=t,this._idx=n,this._patternsRenderer=new da({cellSize:t}),this._sceneDeformer=new sa(this._texturesDeformer)}async generate(e,t=-1){this._idxPalette=t,this._patternsRenderer.generate(e),this._layers=[];const s=a.generator.layers,i=s.length;for(let n=0;n<i;n++){const l=s[n];let o=null;switch(l.patternId){case"classic":l.maskType!==0?o=pa:o=ma;break;case"flowers":o=va;break;case"tree":o=ya;break;case"grid":o=it;break}const h=new o(l,this._sceneDeformer,this._patternsRenderer,this._vegeLines,this._elements);a.renderingMode!=="editor"?await h.generate(e):h.generate(e),this._layers.push(h)}this._sceneLayerGrid=new it(null,this._sceneDeformer,this._patternsRenderer,this._vegeLines,this._elements)}refreshLayers(){const e=a.generator.layers;for(let t=0;t<e.length;t++){const s=e[t];this._layers[t].setLayer(s)}}async render(){this._vegeLines.clear();let e=c.compositionsData.layers.totalDivider;const t=.34*this._idx;a.isOver||a.loader.setProgressRenderLocal(t);const s=this._layers.length,i=1/s;for(let n=0;n<s;n++){const l=this._layers[n],o=n/s,h=Math.floor(o*e)/e;n===c.gridPatternData.index&&this._sceneLayerGrid.render(),await l.render(o,h,i/3),a.isOver||(a.loader.setProgressRenderLocal(t+o/3),a.loader.setProgressRender(t+o/3))}}get texture(){return this._vegeLines.texture}}class ba{constructor(e,t){this._textures=e,this._elements=t,this._vegeLines=new ha(e,!1),this._elements.vegeLines=this._vegeLines;const s=1;this._sceneBuilder0=this._createSceneBuilder(512*s,0),this._sceneBuilder1=this._createSceneBuilder(128*s,1),this._sceneBuilder2=this._createSceneBuilder(32*s,2),this._assembler=new ea({tGrid:t.deformerGridScene.texture,tFlow:t.flow.texture}),this._assemblerAnimated=new Zr({tAssembler:this._assembler.texture,tVegeLines:this._vegeLines.texture,tGrid:t.deformerGrid.texture,tGridScene:t.deformerGridScene.texture,tGridLines:t.gridLines.texture,tFlow:t.flow.texture})}_createSceneBuilder(e,t){return new wa(this._textures,e,!1,this._elements,t)}async generate(e){await this._vegeLines?.generate(),a.loader?.update(),a.renderingMode!=="editor"?(await this._sceneBuilder0?.generate(e,3),a.loader?.update(),await this._sceneBuilder1?.generate(e,5),a.loader?.update(),await this._sceneBuilder2?.generate(e,4),a.loader?.update()):(await this._sceneBuilder0?.generate(e,3),await this._sceneBuilder1?.generate(e,5),await this._sceneBuilder2?.generate(e,4))}async render(){if(a.loader?.setProgress(1),a.gl.renderer.autoClear=!0,this._assemblerAnimated.render({hasToClear:!0,clearBG:!0}),a.gl.renderer.autoClear=!1,this._step=0,await this._sceneBuilder0?.render(),a.gl.renderer.autoClear=!0,this._assembler.render({hasToClear:!0,texture:this._sceneBuilder0.texture,min:0,max:.2499}),a.gl.renderer.autoClear=!1,this._step=1,await this._sceneBuilder1?.render(),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder1.texture,min:.25,max:.4999}),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder1.texture,min:.75,max:1}),this._step=2,await this._sceneBuilder2?.render(),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder2.texture,min:.5,max:.7499}),a.renderingMode==="animated"&&!a.isOver){let e=1-a.loader.progressRender;const t=10;let s=e/t;for(let i=0;i<t;i++)a.loader.setProgressRender(a.loader.progressRender+s),await Nt();await P()}if(a.infoDiv){const e=document.createElement("p");e.innerHTML=`<strong>Render Time:</strong> ${renderTime}ms`,a.infoDiv.appendChild(e)}this._assemblerAnimated.setPercent(2),a.isOver=!0}renderAnimated(){let e=0,t=.25,s=!1,i=0,n=1;this._step==1?(e=.25,t=.4999,i=.75,n=1,s=!0):this._step==2&&(e=.5,t=.7499),this._assemblerAnimated.render({hasToClear:!1,min1:e,max1:t,minMax2Activated:s,min2:i,max2:n})}async reRenderAnimated(){this._step=0,this._sceneBuilder0?.refreshLayers(),await this._sceneBuilder0?.render(),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder0.texture,min:0,max:.2499}),this._step=1,this._sceneBuilder1?.refreshLayers(),await this._sceneBuilder1?.render(),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder1.texture,min:.25,max:.4999}),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder1.texture,min:.75,max:1}),this._step=2,this._sceneBuilder2?.refreshLayers(),await this._sceneBuilder2?.render(),this._assembler.render({hasToClear:!1,texture:this._sceneBuilder2.texture,min:.5,max:.7499}),this._assemblerAnimated.setPercent(2)}get texture(){return this._assembler.texture}get textureAnimated(){return this._assemblerAnimated.texture}}class Ma{constructor(){this._ratio=.1;const e={flipY:!1};this.canvasBranch=new G({renderTargetOpts:e,ratio:this._ratio}),this.canvasElements=new G({renderTargetOpts:e,ratio:this._ratio})}async render(e){this.canvasElements.clear(),this.canvasBranch.clear();for(const t of e)t.prepareRendering();for(const t of e)await t.render(this.canvasElements.ctx,this.canvasBranch.ctx,this._ratio);this.canvasElements.texture.needsUpdate=!0,this.canvasBranch.texture.needsUpdate=!0}get texture(){return this.canvasElements.texture}get textureOrientation(){return this.texture}get textureBranch(){return this.canvasBranch.texture}get textureBranchOrientation(){return this.canvasBranch.texture}}class La extends Fr{constructor(){super()}async init(){this._grid=new jr,this.add(this._grid,[c.gridData,c.compositionsData,c.gridPatternData]),this._flow=new Gr,this.add(this._flow,c.flowData),this._deformerGrid=new Ue({tToDeform:this._grid.texture}),this.add(this._deformerGrid),this._deformerGridScene=new Ue({tToDeform:this._grid.textureScene}),this.add(this._deformerGridScene),this._deformerGridLines=new Ue({tToDeform:this._grid.textureLines},1),this.add(this._deformerGridLines),this._trees=new Xr,this.add(this._trees,c.treesData),this._treebstractRenderer=new Ma,this._flowersRenderer=new qr,this._gridPattern=new Yr({tGridPattern:this._deformerGridLines.texture}),this._texturesScenes={tFlow:this._flow.texture,tGrid:this._deformerGrid.texture,tTrees:this._trees.texture,tTreesOrientation:this._trees.textureOrientation,tPattern:new oe(a.gl,{})},this._momentsRenderer=new ba(this._texturesScenes,{trees:this._trees,flowersRenderer:this._flowersRenderer,gridPattern:this._gridPattern,gridLines:this._deformerGridLines,treebstractRenderer:this._treebstractRenderer,deformerGrid:this._deformerGrid,deformerGridScene:this._deformerGridScene,flow:this._flow}),this.add(this._momentsRenderer,[c.treesData,c.treebstractData,c.patternNoiseData,c.vegeLinesData,c.compositionsData,c.gridPatternData,c.composerData])}async generate(){const e=c.gridData.isDirty,t=c.gridRyokanData.isDirty,s=c.compositionsData.isDirty||c.compositionsData.layers.isDirty;if(!this._gridRyokanCellSize||e||t||s){let i=Or.getNewRandomCellSize(128);i=1024/c.compositionsData.divider,await this._grid.generate(i),a.loader?.update();const l=[32,64,128];this._gridRyokanCellSize=l[l.length*a.rand2()>>0],a.renderingMode!=="editor"?await this._grid.seasonize():this._grid.seasonize(),a.loader?.update(),this._trees?.prepare(i)}this._trees?.generate(this._gridRyokanCellSize),await this._momentsRenderer.generate(this._gridRyokanCellSize)}async prerenderAnimated(){await this._grid.render(),this._flow.render(),await P(),this._deformerGrid.render(),this._deformerGridScene.render(),this._deformerGridLines.render(),this._trees.render(),await P()}async renderMoments(){await this._momentsRenderer.render()}async regenerateAndRenderGrids(){a.idxPalette+=1,c.paletteData.palette=a.palettes[a.idxPalette%4],a.generator.refreshLayers(),await this._grid.render(),await P(),this._flow.render(),await P(),this._deformerGrid.render(),await P(),this._deformerGridScene.render(),await P(),this._deformerGridLines.render(),await P()}renderAnimated(){a.loader.hide(),this._momentsRenderer.renderAnimated()}async reRenderAnimated(){await this._momentsRenderer.reRenderAnimated()}get texture(){return c.displayData.showExtra?c.displayData.getSelectedExtraTexture():c.displayData.getSelectedCoreTexture()}get textureAnimated(){return this._momentsRenderer.textureAnimated}}const ye=[];function z(r,e){ye.push({text:r,value:ye.length,data:e})}z("Autumn classic 3",gt);z("Green spring pluie"