@midscene/playground 1.0.1-beta-20251217082334.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/adapters/local-execution.mjs +5 -1
- package/dist/es/adapters/local-execution.mjs.map +1 -1
- package/dist/es/adapters/remote-execution.mjs +4 -1
- package/dist/es/adapters/remote-execution.mjs.map +1 -1
- package/dist/es/sdk/index.mjs +10 -0
- package/dist/es/sdk/index.mjs.map +1 -1
- package/dist/lib/adapters/local-execution.js +5 -1
- package/dist/lib/adapters/local-execution.js.map +1 -1
- package/dist/lib/adapters/remote-execution.js +4 -1
- package/dist/lib/adapters/remote-execution.js.map +1 -1
- package/dist/lib/sdk/index.js +10 -0
- package/dist/lib/sdk/index.js.map +1 -1
- package/dist/types/adapters/local-execution.d.ts +2 -0
- package/dist/types/adapters/remote-execution.d.ts +2 -0
- package/dist/types/sdk/index.d.ts +4 -0
- package/package.json +3 -3
- package/static/index.html +1 -1
- package/static/static/css/index.d32b7df9.css +2 -0
- package/static/static/css/index.d32b7df9.css.map +1 -0
- package/static/static/js/79.25af61dc.js +611 -0
- package/static/static/js/{79.2e552a95.js.map → 79.25af61dc.js.map} +1 -1
- package/static/static/js/async/195.0366f6e8.js +3 -0
- package/static/static/js/async/{195.6b544830.js.map → 195.0366f6e8.js.map} +1 -1
- package/static/static/js/async/{199.30b3461a.js → 199.f31e52e7.js} +11 -11
- package/static/static/js/async/{199.30b3461a.js.map → 199.f31e52e7.js.map} +1 -1
- package/static/static/js/async/{221.d7bad1ad.js → 221.591b048e.js} +3 -3
- package/static/static/js/async/{221.d7bad1ad.js.map → 221.591b048e.js.map} +1 -1
- package/static/static/js/async/271.15d46ff8.js +30 -0
- package/static/static/js/async/{271.8c3746e1.js.map → 271.15d46ff8.js.map} +1 -1
- package/static/static/js/async/35.2b64fb0f.js +1 -0
- package/static/static/js/async/{467.b56c3730.js → 467.710fa05a.js} +1 -1
- package/static/static/js/async/652.b5a7c7b4.js +3 -0
- package/static/static/js/async/{652.7a830db9.js.map → 652.b5a7c7b4.js.map} +1 -1
- package/static/static/js/async/856.be9fd814.js +158 -0
- package/static/static/js/async/{856.0d869a94.js.map → 856.be9fd814.js.map} +1 -1
- package/static/static/js/async/860.b56301d9.js +2 -0
- package/static/static/js/async/{860.1bcb36d0.js.map → 860.b56301d9.js.map} +1 -1
- package/static/static/js/async/990.82a78a53.js +26 -0
- package/static/static/js/async/{990.27e22d92.js.map → 990.82a78a53.js.map} +1 -1
- package/static/static/js/index.ac2feba9.js +10 -0
- package/static/static/js/index.ac2feba9.js.map +1 -0
- package/static/static/js/lib-react.7b1abe58.js +3 -0
- package/static/static/js/{lib-react.bc3a3965.js.map → lib-react.7b1abe58.js.map} +1 -1
- package/static/static/css/index.a2591d9c.css +0 -2
- package/static/static/css/index.a2591d9c.css.map +0 -1
- package/static/static/js/79.2e552a95.js +0 -611
- package/static/static/js/async/195.6b544830.js +0 -3
- package/static/static/js/async/271.8c3746e1.js +0 -30
- package/static/static/js/async/35.4b29edc8.js +0 -1
- package/static/static/js/async/652.7a830db9.js +0 -3
- package/static/static/js/async/856.0d869a94.js +0 -158
- package/static/static/js/async/860.1bcb36d0.js +0 -2
- package/static/static/js/async/990.27e22d92.js +0 -26
- package/static/static/js/index.25ba485f.js +0 -10
- package/static/static/js/index.25ba485f.js.map +0 -1
- package/static/static/js/lib-react.bc3a3965.js +0 -3
- /package/static/static/js/{79.2e552a95.js.LICENSE.txt → 79.25af61dc.js.LICENSE.txt} +0 -0
- /package/static/static/js/{index.25ba485f.js.LICENSE.txt → index.ac2feba9.js.LICENSE.txt} +0 -0
- /package/static/static/js/{lib-react.bc3a3965.js.LICENSE.txt → lib-react.7b1abe58.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkplayground=self.webpackChunkplayground||[]).push([["856"],{2884(e,t,r){var i=r(3071);class s{static init(e){Object.defineProperty(this,"resizeTo",{set(e){globalThis.removeEventListener("resize",this.queueResize),this._resizeTo=e,e&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get(){return this._resizeTo}}),this.queueResize=()=>{this._resizeTo&&(this._cancelResize(),this._resizeId=requestAnimationFrame(()=>this.resize()))},this._cancelResize=()=>{this._resizeId&&(cancelAnimationFrame(this._resizeId),this._resizeId=null)},this.resize=()=>{let e,t;if(this._resizeTo){if(this._cancelResize(),this._resizeTo===globalThis.window)e=globalThis.innerWidth,t=globalThis.innerHeight;else{let{clientWidth:r,clientHeight:i}=this._resizeTo;e=r,t=i}this.renderer.resize(e,t),this.render()}},this._resizeId=null,this._resizeTo=null,this.resizeTo=e.resizeTo||null}static destroy(){globalThis.removeEventListener("resize",this.queueResize),this._cancelResize(),this._cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null}}s.extension=i.Ag.Application;var a=r(1982),n=r(4366);class l{static init(e){e=Object.assign({autoStart:!0,sharedTicker:!1},e),Object.defineProperty(this,"ticker",{set(e){this._ticker&&this._ticker.remove(this.render,this),this._ticker=e,e&&e.add(this.render,this,a.d.LOW)},get(){return this._ticker}}),this.stop=()=>{this._ticker.stop()},this.start=()=>{this._ticker.start()},this._ticker=null,this.ticker=e.sharedTicker?n.R.shared:new n.R,e.autoStart&&this.start()}static destroy(){if(this._ticker){let e=this._ticker;this.ticker=null,e.destroy()}}}l.extension=i.Ag.Application,i.XO.add(s),i.XO.add(l)},1630(e,t,r){var i=r(3071);class s{constructor(e){this._renderer=e}push(e,t,r){this._renderer.renderPipes.batch.break(r),r.add({renderPipeId:"filter",canBundle:!1,action:"pushFilter",container:t,filterEffect:e})}pop(e,t,r){this._renderer.renderPipes.batch.break(r),r.add({renderPipeId:"filter",action:"popFilter",canBundle:!1})}execute(e){"pushFilter"===e.action?this._renderer.filter.push(e):"popFilter"===e.action&&this._renderer.filter.pop()}destroy(){this._renderer=null}}s.extension={type:[i.Ag.WebGLPipes,i.Ag.WebGPUPipes,i.Ag.CanvasPipes],name:"filter"};var a=r(6253),n=r(8569),l=r(2781),o=r(9442),h=r(8625),d=r(7633),u=r(3097),c=r(2031),p=r(6904),g=r(3268);let f=new a.u;var m=r(6840);let x=new o.V({attributes:{aPosition:{buffer:new Float32Array([0,0,1,0,1,1,0,1]),location:0,format:"float32x2",stride:8,offset:0}},indexBuffer:new Uint32Array([0,1,2,0,2,3])});class _{constructor(e){this._filterStackIndex=0,this._filterStack=[],this._filterGlobalUniforms=new h.k({uInputSize:{value:new Float32Array(4),type:"vec4<f32>"},uInputPixel:{value:new Float32Array(4),type:"vec4<f32>"},uInputClamp:{value:new Float32Array(4),type:"vec4<f32>"},uOutputFrame:{value:new Float32Array(4),type:"vec4<f32>"},uGlobalFrame:{value:new Float32Array(4),type:"vec4<f32>"},uOutputTexture:{value:new Float32Array(4),type:"vec4<f32>"}}),this._globalFilterBindGroup=new l.T({}),this.renderer=e}get activeBackTexture(){return this._activeFilterData?.backTexture}push(e){let t=this.renderer,r=e.filterEffect.filters;this._filterStack[this._filterStackIndex]||(this._filterStack[this._filterStackIndex]=this._getFilterData());let i=this._filterStack[this._filterStackIndex];if(this._filterStackIndex++,0===r.length){i.skip=!0;return}let s=i.bounds;if(e.renderables)!function(e,t){t.clear();let r=t.matrix;for(let r=0;r<e.length;r++){let i=e[r];i.globalDisplayStatus<7||(t.matrix=i.worldTransform,i.addBounds(t))}t.matrix=r}(e.renderables,s);else if(e.filterEffect.filterArea)s.clear(),s.addRect(e.filterEffect.filterArea),s.applyMatrix(e.container.worldTransform);else{var a;a=e.container,s.clear(),function e(t,r){if(7!==t.localDisplayStatus||!t.measurable)return;let i=!!t.effects.length,s=r;if((t.isRenderGroupRoot||i)&&(s=g.o.get().clear()),t.boundsArea)r.addRect(t.boundsArea,t.worldTransform);else{if(t.renderPipeId){let e=t.bounds;s.addFrame(e.minX,e.minY,e.maxX,e.maxY,t.groupTransform)}let r=t.children;for(let t=0;t<r.length;t++)e(r[t],s)}if(i){let e=!1;for(let r=0;r<t.effects.length;r++)t.effects[r].addBounds&&(e||(e=!0,s.applyMatrix(t.renderGroup.worldTransform)),t.effects[r].addBounds(s,!0));e&&(s.applyMatrix(t.renderGroup.worldTransform.copyTo(f).invert()),r.addBounds(s,t.relativeGroupTransform)),r.addBounds(s),g.o.return(s)}else t.isRenderGroupRoot&&(r.addBounds(s,t.relativeGroupTransform),g.o.return(s))}(a,s),s.isValid||s.set(0,0,0,0),a.isRenderGroupRoot?s.applyMatrix(a.renderGroup.localTransform):s.applyMatrix(a.renderGroup.worldTransform)}let n=t.renderTarget.rootRenderTarget.colorTexture.source,l=n._resolution,o=0,h=n.antialias,d=!1,c=!1;for(let e=0;e<r.length;e++){let i=r[e];if(l=Math.min(l,i.resolution),o+=i.padding,"inherit"!==i.antialias&&(h="on"===i.antialias),!(i.compatibleRenderers&t.type)){c=!1;break}if(i.blendRequired&&!(t.backBuffer?.useBackBuffer??!0)){(0,m.R)("Blend filter requires backBuffer on WebGL renderer to be enabled. Set `useBackBuffer: true` in the renderer options."),c=!1;break}c=i.enabled||c,d=d||i.blendRequired}if(!c){i.skip=!0;return}let p=t.renderTarget.rootViewPort;if(s.scale(l).fitBounds(0,p.width,0,p.height).scale(1/l).pad(o).ceil(),!s.isPositive){i.skip=!0;return}i.skip=!1,i.bounds=s,i.blendRequired=d,i.container=e.container,i.filterEffect=e.filterEffect,i.previousRenderSurface=t.renderTarget.renderSurface,i.inputTexture=u.W.getOptimalTexture(s.width,s.height,l,h),t.renderTarget.bind(i.inputTexture,!0),t.globalUniforms.push({offset:s})}pop(){let e=this.renderer;this._filterStackIndex--;let t=this._filterStack[this._filterStackIndex];if(t.skip)return;this._activeFilterData=t;let r=t.inputTexture,i=t.bounds,s=d.g.EMPTY;if(e.renderTarget.finishRenderPass(),t.blendRequired){let r=this._filterStackIndex>0?this._filterStack[this._filterStackIndex-1].bounds:null,a=e.renderTarget.getRenderTarget(t.previousRenderSurface);s=this.getBackTexture(a,i,r)}t.backTexture=s;let a=t.filterEffect.filters;if(this._globalFilterBindGroup.setResource(r.source.style,2),this._globalFilterBindGroup.setResource(s.source,3),e.globalUniforms.pop(),1===a.length)a[0].apply(this,r,t.previousRenderSurface,!1),u.W.returnTexture(r);else{let e=t.inputTexture,r=u.W.getOptimalTexture(i.width,i.height,e.source._resolution,!1),s=0;for(s=0;s<a.length-1;++s){a[s].apply(this,e,r,!0);let t=e;e=r,r=t}a[s].apply(this,e,t.previousRenderSurface,!1),u.W.returnTexture(e),u.W.returnTexture(r)}t.blendRequired&&u.W.returnTexture(s)}getBackTexture(e,t,r){let i=e.colorTexture.source._resolution,s=u.W.getOptimalTexture(t.width,t.height,i,!1),a=t.minX,n=t.minY;r&&(a-=r.minX,n-=r.minY),a=Math.floor(a*i),n=Math.floor(n*i);let l=Math.ceil(t.width*i),o=Math.ceil(t.height*i);return this.renderer.renderTarget.copyToTexture(e,s,{x:a,y:n},{width:l,height:o},{x:0,y:0}),s}applyFilter(e,t,r,i){let s=this.renderer,a=this._filterStack[this._filterStackIndex],l=a.bounds,o=n.b.shared,h=a.previousRenderSurface===r,u=this.renderer.renderTarget.rootRenderTarget.colorTexture.source._resolution,p=this._filterStackIndex-1;for(;p>0&&this._filterStack[p].skip;)--p;p>0&&(u=this._filterStack[p].inputTexture.source._resolution);let g=this._filterGlobalUniforms,f=g.uniforms,m=f.uOutputFrame,_=f.uInputSize,b=f.uInputPixel,y=f.uInputClamp,T=f.uGlobalFrame,v=f.uOutputTexture;if(h){let e=this._filterStackIndex;for(;e>0;){e--;let t=this._filterStack[this._filterStackIndex-1];if(!t.skip){o.x=t.bounds.minX,o.y=t.bounds.minY;break}}m[0]=l.minX-o.x,m[1]=l.minY-o.y}else m[0]=0,m[1]=0;m[2]=t.frame.width,m[3]=t.frame.height,_[0]=t.source.width,_[1]=t.source.height,_[2]=1/_[0],_[3]=1/_[1],b[0]=t.source.pixelWidth,b[1]=t.source.pixelHeight,b[2]=1/b[0],b[3]=1/b[1],y[0]=.5*b[2],y[1]=.5*b[3],y[2]=t.frame.width*_[2]-.5*b[2],y[3]=t.frame.height*_[3]-.5*b[3];let w=this.renderer.renderTarget.rootRenderTarget.colorTexture;T[0]=o.x*u,T[1]=o.y*u,T[2]=w.source.width*u,T[3]=w.source.height*u;let S=this.renderer.renderTarget.getRenderTarget(r);if(s.renderTarget.bind(r,!!i),r instanceof d.g?(v[0]=r.frame.width,v[1]=r.frame.height):(v[0]=S.width,v[1]=S.height),v[2]=S.isRoot?-1:1,g.update(),s.renderPipes.uniformBatch){let e=s.renderPipes.uniformBatch.getUboResource(g);this._globalFilterBindGroup.setResource(e,0)}else this._globalFilterBindGroup.setResource(g,0);this._globalFilterBindGroup.setResource(t.source,1),this._globalFilterBindGroup.setResource(t.source.style,2),e.groups[0]=this._globalFilterBindGroup,s.encoder.draw({geometry:x,shader:e,state:e._state,topology:"triangle-list"}),s.type===c.W.WEBGL&&s.renderTarget.finishRenderPass()}_getFilterData(){return{skip:!1,inputTexture:null,bounds:new p.c,container:null,filterEffect:null,blendRequired:!1,previousRenderSurface:null}}calculateSpriteMatrix(e,t){let r=this._activeFilterData,i=e.set(r.inputTexture._source.width,0,0,r.inputTexture._source.height,r.bounds.minX,r.bounds.minY),s=t.worldTransform.copyTo(a.u.shared);return s.invert(),i.prepend(s),i.scale(1/t.texture.frame.width,1/t.texture.frame.height),i.translate(t.anchor.x,t.anchor.y),i}}_.extension={type:[i.Ag.WebGLSystem,i.Ag.WebGPUSystem],name:"filter"},i.XO.add(_),i.XO.add(s)},7728(e,t,r){r.d(t,{v:()=>a});var i=r(8625);let s=new Int32Array(16);for(let e=0;e<16;e++)s[e]=e;let a=new i.k({uTextures:{value:s,type:"i32",size:16}},{isStatic:!0})},2271(e,t,r){r.d(t,{N:()=>a});var i=r(8370),s=r(551);let a=new class{constructor(e){this._canvasPool=Object.create(null),this.canvasOptions=e||{},this.enableFullScreen=!1}_createCanvasAndContext(e,t){let r=i.e.get().createCanvas();r.width=e,r.height=t;let s=r.getContext("2d");return{canvas:r,context:s}}getOptimalCanvasAndContext(e,t,r=1){e=Math.ceil(e*r-1e-6),t=Math.ceil(t*r-1e-6),e=(0,s.U5)(e),t=(0,s.U5)(t);let i=(e<<17)+(t<<1);this._canvasPool[i]||(this._canvasPool[i]=[]);let a=this._canvasPool[i].pop();return a||(a=this._createCanvasAndContext(e,t)),a}returnCanvasAndContext(e){let{width:t,height:r}=e.canvas;this._canvasPool[(t<<17)+(r<<1)].push(e)}clear(){this._canvasPool={}}}},1231(e,t,r){var i=r(3071),s=r(4547),a=r(1447),n=r(2078),l=r(3372),o=r(3737);class h{constructor(e,t){this.state=a.U.for2d(),this._graphicsBatchesHash=Object.create(null),this.renderer=e,this._adaptor=t,this._adaptor.init()}validateRenderable(e){let t=e.context,r=!!this._graphicsBatchesHash[e.uid],i=this.renderer.graphicsContext.updateGpuContext(t);return!!i.isBatchable||r!==i.isBatchable}addRenderable(e,t){let r=this.renderer.graphicsContext.updateGpuContext(e.context);e._didGraphicsUpdate&&(e._didGraphicsUpdate=!1,this._rebuild(e)),r.isBatchable?this._addToBatcher(e,t):(this.renderer.renderPipes.batch.break(t),t.add(e))}updateRenderable(e){let t=this._graphicsBatchesHash[e.uid];if(t)for(let e=0;e<t.length;e++){let r=t[e];r.batcher.updateElement(r)}}destroyRenderable(e){this._graphicsBatchesHash[e.uid]&&this._removeBatchForRenderable(e.uid)}execute(e){if(!e.isRenderable)return;let t=this.renderer,r=e.context;if(!t.graphicsContext.getGpuContext(r).batches.length)return;let i=r.customShader||this._adaptor.shader;this.state.blendMode=e.groupBlendMode;let s=i.resources.localUniforms.uniforms;s.uTransformMatrix=e.groupTransform,s.uRound=t._roundPixels|e._roundPixels,(0,l.V)(e.groupColorAlpha,s.uColor,0),this._adaptor.execute(this,e)}_rebuild(e){let t=!!this._graphicsBatchesHash[e.uid],r=this.renderer.graphicsContext.updateGpuContext(e.context);t&&this._removeBatchForRenderable(e.uid),r.isBatchable&&this._initBatchesForRenderable(e),e.batched=r.isBatchable}_addToBatcher(e,t){let r=this.renderer.renderPipes.batch,i=this._getBatchesForRenderable(e);for(let e=0;e<i.length;e++){let s=i[e];r.addToBatch(s,t)}}_getBatchesForRenderable(e){return this._graphicsBatchesHash[e.uid]||this._initBatchesForRenderable(e)}_initBatchesForRenderable(e){let t=e.context,r=this.renderer.graphicsContext.getGpuContext(t),i=this.renderer._roundPixels|e._roundPixels,s=r.batches.map(t=>{let r=n.Z.get(o.G);return t.copyTo(r),r.renderable=e,r.roundPixels=i,r});return this._graphicsBatchesHash[e.uid]=s,e.on("destroyed",()=>{this.destroyRenderable(e)}),s}_removeBatchForRenderable(e){this._graphicsBatchesHash[e].forEach(e=>{n.Z.return(e)}),this._graphicsBatchesHash[e]=null}destroy(){for(let e in this.renderer=null,this._adaptor.destroy(),this._adaptor=null,this.state=null,this._graphicsBatchesHash)this._removeBatchForRenderable(e);this._graphicsBatchesHash=null}}h.extension={type:[i.Ag.WebGLPipes,i.Ag.WebGPUPipes,i.Ag.CanvasPipes],name:"graphics"},i.XO.add(h),i.XO.add(s.GH)},6842(e,t,r){var i=r(3071),s=r(6253),a=r(2781),n=r(8625),l=r(2078),o=r(3372),h=r(1202);class d{constructor(e,t){this.localUniforms=new n.k({uTransformMatrix:{value:new s.u,type:"mat3x3<f32>"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uRound:{value:0,type:"f32"}}),this.localUniformsBindGroup=new a.T({0:this.localUniforms}),this._meshDataHash=Object.create(null),this._gpuBatchableMeshHash=Object.create(null),this.renderer=e,this._adaptor=t,this._adaptor.init()}validateRenderable(e){let t=this._getMeshData(e),r=t.batched,i=e.batched;if(t.batched=i,r!==i)return!0;if(i){let r=e._geometry;if(r.indices.length!==t.indexSize||r.positions.length!==t.vertexSize)return t.indexSize=r.indices.length,t.vertexSize=r.positions.length,!0;let i=this._getBatchableMesh(e),s=e.texture;if(i.texture._source!==s._source&&i.texture._source!==s._source)return!i.batcher.checkAndUpdateTexture(i,s)}return!1}addRenderable(e,t){let r=this.renderer.renderPipes.batch,{batched:i}=this._getMeshData(e);if(i){let t=this._getBatchableMesh(e);t.texture=e._texture,t.geometry=e._geometry,r.addToBatch(t)}else r.break(t),t.add({renderPipeId:"mesh",mesh:e})}updateRenderable(e){if(e.batched){let t=this._gpuBatchableMeshHash[e.uid];t.texture=e._texture,t.geometry=e._geometry,t.batcher.updateElement(t)}}destroyRenderable(e){this._meshDataHash[e.uid]=null;let t=this._gpuBatchableMeshHash[e.uid];t&&(l.Z.return(t),this._gpuBatchableMeshHash[e.uid]=null)}execute({mesh:e}){if(!e.isRenderable)return;e.state.blendMode=e.groupBlendMode;let t=this.localUniforms;t.uniforms.uTransformMatrix=e.groupTransform,t.uniforms.uRound=this.renderer._roundPixels|e._roundPixels,t.update(),(0,o.V)(e.groupColorAlpha,t.uniforms.uColor,0),this._adaptor.execute(this,e)}_getMeshData(e){return this._meshDataHash[e.uid]||this._initMeshData(e)}_initMeshData(e){return this._meshDataHash[e.uid]={batched:e.batched,indexSize:e._geometry.indices?.length,vertexSize:e._geometry.positions?.length},e.on("destroyed",()=>{this.destroyRenderable(e)}),this._meshDataHash[e.uid]}_getBatchableMesh(e){return this._gpuBatchableMeshHash[e.uid]||this._initBatchableMesh(e)}_initBatchableMesh(e){let t=l.Z.get(h.U);return t.mesh=e,t.texture=e._texture,t.roundPixels=this.renderer._roundPixels|e._roundPixels,this._gpuBatchableMeshHash[e.uid]=t,t.mesh=e,t}destroy(){for(let e in this._gpuBatchableMeshHash)this._gpuBatchableMeshHash[e]&&l.Z.return(this._gpuBatchableMeshHash[e]);this._gpuBatchableMeshHash=null,this._meshDataHash=null,this.localUniforms=null,this.localUniformsBindGroup=null,this._adaptor.destroy(),this._adaptor=null,this.renderer=null}}d.extension={type:[i.Ag.WebGLPipes,i.Ag.WebGPUPipes,i.Ag.CanvasPipes],name:"mesh"},i.XO.add(d)},1202(e,t,r){r.d(t,{U:()=>i});class i{constructor(){this.batcher=null,this.batch=null,this.roundPixels=0,this._uvUpdateId=-1,this._textureMatrixUpdateId=-1}get blendMode(){return this.mesh.groupBlendMode}reset(){this.mesh=null,this.texture=null,this.batcher=null,this.batch=null}packIndex(e,t,r){let i=this.geometry.indices;for(let s=0;s<i.length;s++)e[t++]=i[s]+r}packAttributes(e,t,r,i){let s=this.mesh,a=this.geometry,n=s.groupTransform,l=i<<16|65535&this.roundPixels,o=n.a,h=n.b,d=n.c,u=n.d,c=n.tx,p=n.ty,g=a.positions,f=a.getBuffer("aUV"),m=f.data,x=m,_=this.texture.textureMatrix;_.isSimple||(x=this._transformedUvs,(this._textureMatrixUpdateId!==_._updateID||this._uvUpdateId!==f._updateID)&&((!x||x.length<m.length)&&(x=this._transformedUvs=new Float32Array(m.length)),this._textureMatrixUpdateId=_._updateID,this._uvUpdateId=f._updateID,_.multiplyUvs(m,x)));let b=s.groupColorAlpha;for(let i=0;i<g.length;i+=2){let s=g[i],a=g[i+1];e[r]=o*s+d*a+c,e[r+1]=h*s+u*a+p,e[r+2]=x[i],e[r+3]=x[i+1],t[r+4]=b,t[r+5]=l,r+=6}}get vertexSize(){return this.geometry.positions.length/2}get indexSize(){return this.geometry.indices.length}}},8392(e,t,r){r.d(t,{u:()=>o});var i=r(8113),s=r(1720),a=r(9442),n=r(5746);let l=class e extends a.V{constructor(...t){let r=t[0]??{};r instanceof Float32Array&&((0,n.t)("8.0.0","use new MeshGeometry({ positions, uvs, indices }) instead"),r={positions:r,uvs:t[1],indices:t[2]});const a=(r={...e.defaultOptions,...r}).positions||new Float32Array([0,0,1,0,1,1,0,1]),l=r.uvs||new Float32Array([0,0,1,0,1,1,0,1]),o=r.indices||new Uint32Array([0,1,2,0,2,3]),h=r.shrinkBuffersToFit,d=new i.h({data:a,label:"attribute-mesh-positions",shrinkToFit:h,usage:s.S.VERTEX|s.S.COPY_DST});super({attributes:{aPosition:{buffer:d,format:"float32x2",stride:8,offset:0},aUV:{buffer:new i.h({data:l,label:"attribute-mesh-uvs",shrinkToFit:h,usage:s.S.VERTEX|s.S.COPY_DST}),format:"float32x2",stride:8,offset:0}},indexBuffer:new i.h({data:o,label:"index-mesh-buffer",shrinkToFit:h,usage:s.S.INDEX|s.S.COPY_DST}),topology:r.topology}),this.batchMode="auto"}get positions(){return this.attributes.aPosition.buffer.data}set positions(e){this.attributes.aPosition.buffer.data=e}get uvs(){return this.attributes.aUV.buffer.data}set uvs(e){this.attributes.aUV.buffer.data=e}get indices(){return this.indexBuffer.data}set indices(e){this.indexBuffer.data=e}};l.defaultOptions={topology:"triangle-list",shrinkBuffersToFit:!1};let o=l},9846(e,t,r){var i=r(3071),s=r(2078),a=r(1202),n=r(5746),l=r(8392);let o=class e extends l.u{constructor(...e){super({});let t=e[0]??{};"number"==typeof t&&((0,n.t)("8.0.0","PlaneGeometry constructor changed please use { width, height, verticesX, verticesY } instead"),t={width:t,height:e[1],verticesX:e[2],verticesY:e[3]}),this.build(t)}build(t){t={...e.defaultOptions,...t},this.verticesX=this.verticesX??t.verticesX,this.verticesY=this.verticesY??t.verticesY,this.width=this.width??t.width,this.height=this.height??t.height;let r=this.verticesX*this.verticesY,i=[],s=[],a=[],n=this.verticesX-1,l=this.verticesY-1,o=this.width/n,h=this.height/l;for(let e=0;e<r;e++){let t=e%this.verticesX,r=e/this.verticesX|0;i.push(t*o,r*h),s.push(t/n,r/l)}let d=n*l;for(let e=0;e<d;e++){let t=e%n,r=e/n|0,i=r*this.verticesX+t,s=r*this.verticesX+t+1,l=(r+1)*this.verticesX+t,o=(r+1)*this.verticesX+t+1;a.push(i,s,l,s,o,l)}this.buffers[0].data=new Float32Array(i),this.buffers[1].data=new Float32Array(s),this.indexBuffer.data=new Uint32Array(a),this.buffers[0].update(),this.buffers[1].update(),this.indexBuffer.update()}};o.defaultOptions={width:100,height:100,verticesX:10,verticesY:10};let h=o,d=class e extends h{constructor(t={}){t={...e.defaultOptions,...t},super({width:t.width,height:t.height,verticesX:4,verticesY:4}),this.update(t)}update(e){this.width=e.width??this.width,this.height=e.height??this.height,this._originalWidth=e.originalWidth??this._originalWidth,this._originalHeight=e.originalHeight??this._originalHeight,this._leftWidth=e.leftWidth??this._leftWidth,this._rightWidth=e.rightWidth??this._rightWidth,this._topHeight=e.topHeight??this._topHeight,this._bottomHeight=e.bottomHeight??this._bottomHeight,this.updateUvs(),this.updatePositions()}updatePositions(){let e=this.positions,t=this._leftWidth+this._rightWidth,r=this.width>t?1:this.width/t,i=this._topHeight+this._bottomHeight,s=Math.min(r,this.height>i?1:this.height/i);e[9]=e[11]=e[13]=e[15]=this._topHeight*s,e[17]=e[19]=e[21]=e[23]=this.height-this._bottomHeight*s,e[25]=e[27]=e[29]=e[31]=this.height,e[2]=e[10]=e[18]=e[26]=this._leftWidth*s,e[4]=e[12]=e[20]=e[28]=this.width-this._rightWidth*s,e[6]=e[14]=e[22]=e[30]=this.width,this.getBuffer("aPosition").update()}updateUvs(){let e=this.uvs;e[0]=e[8]=e[16]=e[24]=0,e[1]=e[3]=e[5]=e[7]=0,e[6]=e[14]=e[22]=e[30]=1,e[25]=e[27]=e[29]=e[31]=1;let t=1/this._originalWidth,r=1/this._originalHeight;e[2]=e[10]=e[18]=e[26]=t*this._leftWidth,e[9]=e[11]=e[13]=e[15]=r*this._topHeight,e[4]=e[12]=e[20]=e[28]=1-t*this._rightWidth,e[17]=e[19]=e[21]=e[23]=1-r*this._bottomHeight,this.getBuffer("aUV").update()}};d.defaultOptions={width:100,height:100,leftWidth:10,topHeight:10,rightWidth:10,bottomHeight:10,originalWidth:100,originalHeight:100};class u{constructor(e){this._gpuSpriteHash=Object.create(null),this._renderer=e}addRenderable(e,t){let r=this._getGpuSprite(e);e._didSpriteUpdate&&this._updateBatchableSprite(e,r),this._renderer.renderPipes.batch.addToBatch(r)}updateRenderable(e){let t=this._gpuSpriteHash[e.uid];e._didSpriteUpdate&&this._updateBatchableSprite(e,t),t.batcher.updateElement(t)}validateRenderable(e){let t=e._texture,r=this._getGpuSprite(e);return r.texture._source!==t._source&&!r.batcher.checkAndUpdateTexture(r,t)}destroyRenderable(e){let t=this._gpuSpriteHash[e.uid];s.Z.return(t),this._gpuSpriteHash[e.uid]=null}_updateBatchableSprite(e,t){e._didSpriteUpdate=!1,t.geometry.update(e),t.texture=e._texture}_getGpuSprite(e){return this._gpuSpriteHash[e.uid]||this._initGPUSprite(e)}_initGPUSprite(e){let t=new a.U;return t.geometry=new d,t.mesh=e,t.texture=e._texture,t.roundPixels=this._renderer._roundPixels|e._roundPixels,this._gpuSpriteHash[e.uid]=t,e.on("destroyed",()=>{this.destroyRenderable(e)}),t}destroy(){for(let e in this._gpuSpriteHash)this._gpuSpriteHash[e].geometry.destroy();this._gpuSpriteHash=null,this._renderer=null}}u.extension={type:[i.Ag.WebGLPipes,i.Ag.WebGPUPipes,i.Ag.CanvasPipes],name:"nineSliceSprite"},i.XO.add(u)},4196(e,t,r){let i,s;var a=r(3071),n=r(1447),l=r(2031),o=r(3372),h=r(1202),d=r(8392),u=r(6253),c=r(6653),p=r(4447),g=r(7261),f=r(8023),m=r(8625),x=r(7633);let _={name:"tiling-bit",vertex:{header:`
|
|
2
|
+
struct TilingUniforms {
|
|
3
|
+
uMapCoord:mat3x3<f32>,
|
|
4
|
+
uClampFrame:vec4<f32>,
|
|
5
|
+
uClampOffset:vec2<f32>,
|
|
6
|
+
uTextureTransform:mat3x3<f32>,
|
|
7
|
+
uSizeAnchor:vec4<f32>
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
@group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;
|
|
11
|
+
@group(2) @binding(1) var uTexture: texture_2d<f32>;
|
|
12
|
+
@group(2) @binding(2) var uSampler: sampler;
|
|
13
|
+
`,main:`
|
|
14
|
+
uv = (tilingUniforms.uTextureTransform * vec3(uv, 1.0)).xy;
|
|
15
|
+
|
|
16
|
+
position = (position - tilingUniforms.uSizeAnchor.zw) * tilingUniforms.uSizeAnchor.xy;
|
|
17
|
+
`},fragment:{header:`
|
|
18
|
+
struct TilingUniforms {
|
|
19
|
+
uMapCoord:mat3x3<f32>,
|
|
20
|
+
uClampFrame:vec4<f32>,
|
|
21
|
+
uClampOffset:vec2<f32>,
|
|
22
|
+
uTextureTransform:mat3x3<f32>,
|
|
23
|
+
uSizeAnchor:vec4<f32>
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
@group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;
|
|
27
|
+
@group(2) @binding(1) var uTexture: texture_2d<f32>;
|
|
28
|
+
@group(2) @binding(2) var uSampler: sampler;
|
|
29
|
+
`,main:`
|
|
30
|
+
|
|
31
|
+
var coord = vUV + ceil(tilingUniforms.uClampOffset - vUV);
|
|
32
|
+
coord = (tilingUniforms.uMapCoord * vec3(coord, 1.0)).xy;
|
|
33
|
+
var unclamped = coord;
|
|
34
|
+
coord = clamp(coord, tilingUniforms.uClampFrame.xy, tilingUniforms.uClampFrame.zw);
|
|
35
|
+
|
|
36
|
+
var bias = 0.;
|
|
37
|
+
|
|
38
|
+
if(unclamped.x == coord.x && unclamped.y == coord.y)
|
|
39
|
+
{
|
|
40
|
+
bias = -32.;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
outColor = textureSampleBias(uTexture, uSampler, coord, bias);
|
|
44
|
+
`}},b={name:"tiling-bit",vertex:{header:`
|
|
45
|
+
uniform mat3 uTextureTransform;
|
|
46
|
+
uniform vec4 uSizeAnchor;
|
|
47
|
+
|
|
48
|
+
`,main:`
|
|
49
|
+
uv = (uTextureTransform * vec3(aUV, 1.0)).xy;
|
|
50
|
+
|
|
51
|
+
position = (position - uSizeAnchor.zw) * uSizeAnchor.xy;
|
|
52
|
+
`},fragment:{header:`
|
|
53
|
+
uniform sampler2D uTexture;
|
|
54
|
+
uniform mat3 uMapCoord;
|
|
55
|
+
uniform vec4 uClampFrame;
|
|
56
|
+
uniform vec2 uClampOffset;
|
|
57
|
+
`,main:`
|
|
58
|
+
|
|
59
|
+
vec2 coord = vUV + ceil(uClampOffset - vUV);
|
|
60
|
+
coord = (uMapCoord * vec3(coord, 1.0)).xy;
|
|
61
|
+
vec2 unclamped = coord;
|
|
62
|
+
coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);
|
|
63
|
+
|
|
64
|
+
outColor = texture(uTexture, coord, unclamped == coord ? 0.0 : -32.0);// lod-bias very negative to force lod 0
|
|
65
|
+
|
|
66
|
+
`}};class y extends f.M{constructor(){i??(i=(0,c.v)({name:"tiling-sprite-shader",bits:[p.Ls,_,g.b]})),s??(s=(0,c.I)({name:"tiling-sprite-shader",bits:[p.mA,b,g.m]})),super({glProgram:s,gpuProgram:i,resources:{localUniforms:new m.k({uTransformMatrix:{value:new u.u,type:"mat3x3<f32>"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uRound:{value:0,type:"f32"}}),tilingUniforms:new m.k({uMapCoord:{value:new u.u,type:"mat3x3<f32>"},uClampFrame:{value:new Float32Array([0,0,1,1]),type:"vec4<f32>"},uClampOffset:{value:new Float32Array([0,0]),type:"vec2<f32>"},uTextureTransform:{value:new u.u,type:"mat3x3<f32>"},uSizeAnchor:{value:new Float32Array([100,100,.5,.5]),type:"vec4<f32>"}}),uTexture:x.g.EMPTY.source,uSampler:x.g.EMPTY.source.style}})}updateUniforms(e,t,r,i,s,a){let n=this.resources.tilingUniforms,l=a.width,o=a.height,h=a.textureMatrix,d=n.uniforms.uTextureTransform;d.set(r.a*l/e,r.b*l/t,r.c*o/e,r.d*o/t,r.tx/e,r.ty/t),d.invert(),n.uniforms.uMapCoord=h.mapCoord,n.uniforms.uClampFrame=h.uClampFrame,n.uniforms.uClampOffset=h.uClampOffset,n.uniforms.uTextureTransform=d,n.uniforms.uSizeAnchor[0]=e,n.uniforms.uSizeAnchor[1]=t,n.uniforms.uSizeAnchor[2]=i,n.uniforms.uSizeAnchor[3]=s,a&&(this.resources.uTexture=a.source,this.resources.uSampler=a.source.style)}}class T extends d.u{constructor(){super({positions:new Float32Array([0,0,1,0,1,1,0,1]),uvs:new Float32Array([0,0,1,0,1,1,0,1]),indices:new Uint32Array([0,1,2,0,2,3])})}}let v=new T;class w{constructor(e){this._tilingSpriteDataHash=Object.create(null),this._renderer=e}validateRenderable(e){let t=this._getTilingSpriteData(e),r=t.canBatch;this._updateCanBatch(e);let i=t.canBatch;if(i&&i===r){let{batchableMesh:r}=t;if(r.texture._source!==e.texture._source)return!r.batcher.checkAndUpdateTexture(r,e.texture)}return r!==i}addRenderable(e,t){let r=this._renderer.renderPipes.batch;this._updateCanBatch(e);let i=this._getTilingSpriteData(e),{geometry:s,canBatch:a}=i;if(a){i.batchableMesh||(i.batchableMesh=new h.U);let t=i.batchableMesh;e._didTilingSpriteUpdate&&(e._didTilingSpriteUpdate=!1,this._updateBatchableMesh(e),t.geometry=s,t.mesh=e,t.texture=e._texture),t.roundPixels=this._renderer._roundPixels|e._roundPixels,r.addToBatch(t)}else r.break(t),i.shader||(i.shader=new y),this.updateRenderable(e),t.add(e)}execute(e){let{shader:t}=this._tilingSpriteDataHash[e.uid];t.groups[0]=this._renderer.globalUniforms.bindGroup;let r=t.resources.localUniforms.uniforms;r.uTransformMatrix=e.groupTransform,r.uRound=this._renderer._roundPixels|e._roundPixels,(0,o.V)(e.groupColorAlpha,r.uColor,0),this._renderer.encoder.draw({geometry:v,shader:t,state:n.U.default2d})}updateRenderable(e){let t=this._getTilingSpriteData(e),{canBatch:r}=t;if(r){let{batchableMesh:r}=t;e._didTilingSpriteUpdate&&this._updateBatchableMesh(e),r.batcher.updateElement(r)}else if(e._didTilingSpriteUpdate){let{shader:r}=t;r.updateUniforms(e.width,e.height,e._tileTransform.matrix,e.anchor.x,e.anchor.y,e.texture)}e._didTilingSpriteUpdate=!1}destroyRenderable(e){let t=this._getTilingSpriteData(e);t.batchableMesh=null,t.shader?.destroy(),this._tilingSpriteDataHash[e.uid]=null}_getTilingSpriteData(e){return this._tilingSpriteDataHash[e.uid]||this._initTilingSpriteData(e)}_initTilingSpriteData(e){let t=new d.u({indices:v.indices,positions:v.positions.slice(),uvs:v.uvs.slice()});return this._tilingSpriteDataHash[e.uid]={canBatch:!0,renderable:e,geometry:t},e.on("destroyed",()=>{this.destroyRenderable(e)}),this._tilingSpriteDataHash[e.uid]}_updateBatchableMesh(e){var t,r;let i,s,a,n,l,o,h,d,{geometry:c}=this._getTilingSpriteData(e),p=e.texture.source.style;"repeat"!==p.addressMode&&(p.addressMode="repeat",p.update()),t=c.uvs,s=(i=e.texture).frame.width,a=i.frame.height,n=0,l=0,e._applyAnchorToTexture&&(n=e.anchor.x,l=e.anchor.y),t[0]=t[6]=-n,t[2]=t[4]=1-n,t[1]=t[3]=-l,t[5]=t[7]=1-l,(o=u.u.shared).copyFrom(e._tileTransform.matrix),o.tx/=e.width,o.ty/=e.height,o.invert(),o.scale(e.width/s,e.height/a),function(e,t,r,i){let s=0,a=e.length/2,n=i.a,l=i.b,o=i.c,h=i.d,d=i.tx,u=i.ty;for(r*=2;s<a;){let t=e[r],i=e[r+1];e[r]=n*t+o*i+d,e[r+1]=l*t+h*i+u,r+=2,s++}}(t,0,0,o),r=c.positions,h=e.anchor.x,d=e.anchor.y,r[0]=-h*e.width,r[1]=-d*e.height,r[2]=(1-h)*e.width,r[3]=-d*e.height,r[4]=(1-h)*e.width,r[5]=(1-d)*e.height,r[6]=-h*e.width,r[7]=(1-d)*e.height}destroy(){for(let e in this._tilingSpriteDataHash)this.destroyRenderable(this._tilingSpriteDataHash[e].renderable);this._tilingSpriteDataHash=null,this._renderer=null}_updateCanBatch(e){let t=this._getTilingSpriteData(e),r=e.texture,i=!0;return this._renderer.type===l.W.WEBGL&&(i=this._renderer.context.supports.nonPowOf2wrapping),t.canBatch=r.textureMatrix.isSimple&&(i||r.source.isPowerOfTwo),t.canBatch}}w.extension={type:[a.Ag.WebGLPipes,a.Ag.WebGPUPipes,a.Ag.CanvasPipes],name:"tilingSprite"},a.XO.add(w)},5105(e,t,r){var i=r(3071),s=r(6713),a=r(4709),n=r(8370),l=r(6875),o=r(3203),h=r(7633),d=r(588),u=r(5746);class c extends d.A{constructor(){super(...arguments),this.chars=Object.create(null),this.lineHeight=0,this.fontFamily="",this.fontMetrics={fontSize:0,ascent:0,descent:0},this.baseLineOffset=0,this.distanceField={type:"none",range:0},this.pages=[],this.baseMeasurementFontSize=100,this.baseRenderedFontSize=100}get font(){return(0,u.t)("8.0.0","BitmapFont.font is deprecated, please use BitmapFont.fontFamily instead."),this.fontFamily}get pageTextures(){return(0,u.t)("8.0.0","BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead."),this.pages}get size(){return(0,u.t)("8.0.0","BitmapFont.size is deprecated, please use BitmapFont.fontMetrics.fontSize instead."),this.fontMetrics.fontSize}get distanceFieldRange(){return(0,u.t)("8.0.0","BitmapFont.distanceFieldRange is deprecated, please use BitmapFont.distanceField.range instead."),this.distanceField.range}get distanceFieldType(){return(0,u.t)("8.0.0","BitmapFont.distanceFieldType is deprecated, please use BitmapFont.distanceField.type instead."),this.distanceField.type}destroy(e=!1){for(let e in this.emit("destroy",this),this.removeAllListeners(),this.chars)this.chars[e].texture.destroy();this.chars=null,e&&(this.pages.forEach(e=>e.texture.destroy(!0)),this.pages=null)}}var p=r(8623),g=r(4951),f=r(1170),m=r(2271),x=r(2617),_=r(3748),b=r(4401),y=r(9904);function T(e){if(""===e)return[];"string"==typeof e&&(e=[e]);let t=[];for(let r=0,i=e.length;r<i;r++){let i=e[r];if(Array.isArray(i)){if(2!==i.length)throw Error(`[BitmapFont]: Invalid character range length, expecting 2 got ${i.length}.`);if(0===i[0].length||0===i[1].length)throw Error("[BitmapFont]: Invalid character delimiter.");let e=i[0].charCodeAt(0),r=i[1].charCodeAt(0);if(r<e)throw Error("[BitmapFont]: Invalid character range.");for(let i=e;i<=r;i++)t.push(String.fromCharCode(i))}else t.push(...Array.from(i))}if(0===t.length)throw Error("[BitmapFont]: Empty set when resolving characters.");return t}class v extends c{constructor(e){super(),this.resolution=1,this.pages=[],this._padding=4,this._measureCache=Object.create(null),this._currentChars=[],this._currentX=0,this._currentY=0,this._currentPageIndex=-1,this._skipKerning=!1;const t=e.style.clone();e.overrideFill&&(t._fill.color=0xffffff,t._fill.alpha=1,t._fill.texture=h.g.WHITE,t._fill.fill=null);const r=t.fontSize;t.fontSize=this.baseMeasurementFontSize;const i=(0,b.Z)(t);e.overrideSize?t._stroke&&(t._stroke.width*=this.baseRenderedFontSize/r):t.fontSize=this.baseRenderedFontSize=r,this._style=t,this._skipKerning=e.skipKerning??!1,this.resolution=e.resolution??1,this._padding=e.padding??4,this.fontMetrics=_.P.measureFont(i),this.lineHeight=t.lineHeight||this.fontMetrics.fontSize||t.fontSize}ensureCharacters(e){let t,r=T(e).filter(e=>!this._currentChars.includes(e)).filter((e,t,r)=>r.indexOf(e)===t);if(!r.length)return;this._currentChars=[...this._currentChars,...r];let{canvas:i,context:s}=(t=-1===this._currentPageIndex?this._nextPage():this.pages[this._currentPageIndex]).canvasAndContext,a=t.texture.source,n=this._style,l=this._currentX,d=this._currentY,u=this.baseRenderedFontSize/this.baseMeasurementFontSize,c=this._padding*u,p="italic"===n.fontStyle?2:1,g=0,f=!1;for(let e=0;e<r.length;e++){let t=r[e],m=_.P.measureText(t,n,i,!1);m.lineHeight=m.height;let x=p*m.width*u,b=m.height*u,y=x+2*c,T=b+2*c;if(f=!1,"\n"!==t&&"\r"!==t&&" "!==t&&" "!==t&&(f=!0,g=Math.ceil(Math.max(T,g))),l+y>512&&(l=0,(d+=g)+(g=T)>512)){a.update();let e=this._nextPage();i=e.canvasAndContext.canvas,s=e.canvasAndContext.context,a=e.texture.source,d=0}let v=x/u-(n.dropShadow?.distance??0)-(n._stroke?.width??0);if(this.chars[t]={id:t.codePointAt(0),xOffset:-this._padding,yOffset:-this._padding,xAdvance:v,kerning:{}},f){this._drawGlyph(s,m,l+c,d+c,u,n);let e=a.width*u,r=a.height*u,i=new o.M(l/e*a.width,d/r*a.height,y/e*a.width,T/r*a.height);this.chars[t].texture=new h.g({source:a,frame:i}),l+=Math.ceil(y)}}a.update(),this._currentX=l,this._currentY=d,this._skipKerning&&this._applyKerning(r,s)}get pageTextures(){return(0,u.t)("8.0.0","BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead."),this.pages}_applyKerning(e,t){let r=this._measureCache;for(let i=0;i<e.length;i++){let s=e[i];for(let e=0;e<this._currentChars.length;e++){let i=this._currentChars[e],a=r[s];a||(a=r[s]=t.measureText(s).width);let n=r[i];n||(n=r[i]=t.measureText(i).width);let l=t.measureText(s+i).width,o=l-(a+n);o&&(this.chars[s].kerning[i]=o),(o=(l=t.measureText(s+i).width)-(a+n))&&(this.chars[i].kerning[s]=o)}}}_nextPage(){this._currentPageIndex++;let e=this.resolution,t=m.N.getOptimalCanvasAndContext(512,512,e);this._setupContext(t.context,this._style,e);let r=e*(this.baseRenderedFontSize/this.baseMeasurementFontSize),i=new h.g({source:new x.b({resource:t.canvas,resolution:r,alphaMode:"premultiply-alpha-on-upload"})}),s={canvasAndContext:t,texture:i};return this.pages[this._currentPageIndex]=s,s}_setupContext(e,t,r){t.fontSize=this.baseRenderedFontSize,e.scale(r,r),e.font=(0,b.Z)(t),t.fontSize=this.baseMeasurementFontSize,e.textBaseline=t.textBaseline;let i=t._stroke,s=i?.width??0;if(i&&(e.lineWidth=s,e.lineJoin=i.join,e.miterLimit=i.miterLimit,e.strokeStyle=(0,y.r)(i,e)),t._fill&&(e.fillStyle=(0,y.r)(t._fill,e)),t.dropShadow){let i=t.dropShadow,s=f.Q.shared.setValue(i.color).toArray(),a=i.blur*r,n=i.distance*r;e.shadowColor=`rgba(${255*s[0]},${255*s[1]},${255*s[2]},${i.alpha})`,e.shadowBlur=a,e.shadowOffsetX=Math.cos(i.angle)*n,e.shadowOffsetY=Math.sin(i.angle)*n}else e.shadowColor="black",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0}_drawGlyph(e,t,r,i,s,a){let n=t.text,l=t.fontProperties,o=a._stroke,h=(o?.width??0)*s,d=r+h/2,u=i-h/2,c=l.descent*s,p=t.lineHeight*s;a.stroke&&h&&e.strokeText(n,d,u+p-c),a._fill&&e.fillText(n,d,u+p-c)}destroy(){super.destroy();for(let e=0;e<this.pages.length;e++){let{canvasAndContext:t,texture:r}=this.pages[e];m.N.returnCanvasAndContext(t),r.destroy(!0)}this.pages=null}}function w(e,t,r){let i={width:0,height:0,offsetY:0,scale:t.fontSize/r.baseMeasurementFontSize,lines:[{width:0,charPositions:[],spaceWidth:0,spacesIndex:[],chars:[]}]};i.offsetY=r.baseLineOffset;let s=i.lines[0],a=null,n=!0,l={spaceWord:!1,width:0,start:0,index:0,positions:[],chars:[]},o=e=>{let t=s.width;for(let r=0;r<l.index;r++){let i=e.positions[r];s.chars.push(e.chars[r]),s.charPositions.push(i+t)}s.width+=e.width,n=!1,l.width=0,l.index=0,l.chars.length=0},h=()=>{let e=s.chars.length-1,t=s.chars[e];for(;" "===t;)s.width-=r.chars[t].xAdvance,t=s.chars[--e];i.width=Math.max(i.width,s.width),s={width:0,charPositions:[],chars:[],spaceWidth:0,spacesIndex:[]},n=!0,i.lines.push(s),i.height+=r.lineHeight},d=r.baseMeasurementFontSize/t.fontSize,u=t.letterSpacing*d,c=t.wordWrapWidth*d;for(let i=0;i<e.length+1;i++){let d,p=i===e.length;p||(d=e[i]);let g=r.chars[d]||r.chars[" "];if(/(?:\s)/.test(d)||"\r"===d||"\n"===d||p){if(!n&&t.wordWrap&&s.width+l.width-u>c?h():l.start=s.width,o(l),p||s.charPositions.push(0),"\r"===d||"\n"===d)0!==s.width&&h();else if(!p){let e=g.xAdvance+(g.kerning[a]||0)+u;s.width+=e,s.spaceWidth=e,s.spacesIndex.push(s.charPositions.length),s.chars.push(d)}}else{let e=g.kerning[a]||0,t=g.xAdvance+e+u;l.positions[l.index++]=l.width+e,l.chars.push(d),l.width+=t}a=d}return h(),"center"===t.align?function(e){for(let t=0;t<e.lines.length;t++){let r=e.lines[t],i=e.width/2-r.width/2;for(let e=0;e<r.charPositions.length;e++)r.charPositions[e]+=i}}(i):"right"===t.align?function(e){for(let t=0;t<e.lines.length;t++){let r=e.lines[t],i=e.width-r.width;for(let e=0;e<r.charPositions.length;e++)r.charPositions[e]+=i}}(i):"justify"===t.align&&function(e){let t=e.width;for(let r=0;r<e.lines.length;r++){let i=e.lines[r],s=0,a=i.spacesIndex[s++],n=0,l=i.spacesIndex.length,o=(t-i.width)/l;for(let e=0;e<i.charPositions.length;e++)e===a&&(a=i.spacesIndex[s++],n+=o),i.charPositions[e]+=n}}(i),i}let S=new class{constructor(){this.ALPHA=[["a","z"],["A","Z"]," "],this.NUMERIC=[["0","9"]],this.ALPHANUMERIC=[["a","z"],["A","Z"],["0","9"]," "],this.ASCII=[[" ","~"]],this.defaultOptions={chars:this.ALPHANUMERIC,resolution:1,padding:4,skipKerning:!1}}getFont(e,t){let r=`${t.fontFamily}-bitmap`,i=!0;if(t._fill.fill&&(r+=t._fill.fill.uid,i=!1),!p.l.has(r)){let e=new v({style:t,overrideFill:i,overrideSize:!0,...this.defaultOptions});e.once("destroy",()=>p.l.remove(r)),p.l.set(r,e)}let s=p.l.get(r);return s.ensureCharacters?.(e),s}getLayout(e,t){let r=this.getFont(e,t);return w(e.split(""),t,r)}measureText(e,t){return this.getLayout(e,t)}install(...e){let t=e[0];"string"==typeof t&&(t={name:t,style:e[1],chars:e[2]?.chars,resolution:e[2]?.resolution,padding:e[2]?.padding,skipKerning:e[2]?.skipKerning},(0,u.t)("8.0.0","BitmapFontManager.install(name, style, options) is deprecated, use BitmapFontManager.install({name, style, ...options})"));let r=t?.name;if(!r)throw Error("[BitmapFontManager] Property `name` is required.");let i=(t={...this.defaultOptions,...t}).style,s=i instanceof g.x?i:new g.x(i),a=null!==s._fill.fill&&void 0!==s._fill.fill,n=new v({style:s,overrideFill:a,skipKerning:t.skipKerning,padding:t.padding,resolution:t.resolution,overrideSize:!1}),l=T(t.chars);return n.ensureCharacters(l.join("")),p.l.set(`${r}-bitmap`,n),n.once("destroy",()=>p.l.remove(`${r}-bitmap`)),n}uninstall(e){let t=`${e}-bitmap`,r=p.l.get(t);r&&(p.l.remove(t),r.destroy())}};class C extends c{constructor(e,t){super();const{textures:r,data:i}=e;Object.keys(i.pages).forEach(e=>{let t=r[i.pages[parseInt(e,10)].id];this.pages.push({texture:t})}),Object.keys(i.chars).forEach(e=>{let t=i.chars[e],{frame:s,source:a}=r[t.page],n=new o.M(t.x+s.x,t.y+s.y,t.width,t.height),l=new h.g({source:a,frame:n});this.chars[e]={id:e.codePointAt(0),xOffset:t.xOffset,yOffset:t.yOffset,xAdvance:t.xAdvance,kerning:t.kerning??{},texture:l}}),this.baseRenderedFontSize=i.fontSize,this.baseMeasurementFontSize=i.fontSize,this.fontMetrics={ascent:0,descent:0,fontSize:i.fontSize},this.baseLineOffset=i.baseLineOffset,this.lineHeight=i.lineHeight,this.fontFamily=i.fontFamily,this.distanceField=i.distanceField??{type:"none",range:0},this.url=t}destroy(){super.destroy();for(let e=0;e<this.pages.length;e++){let{texture:t}=this.pages[e];t.destroy(!0)}this.pages=null}static install(e){S.install(e)}static uninstall(e){S.uninstall(e)}}let A={test:e=>"string"==typeof e&&e.startsWith("info face="),parse(e){let t=e.match(/^[a-z]+\s+.+$/gm),r={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(let e in t){let i=t[e].match(/^[a-z]+/gm)[0],s=t[e].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),a={};for(let e in s){let t=s[e].split("="),r=t[0],i=t[1].replace(/"/gm,""),n=parseFloat(i),l=isNaN(n)?i:n;a[r]=l}r[i].push(a)}let i={chars:{},pages:[],lineHeight:0,fontSize:0,fontFamily:"",distanceField:null,baseLineOffset:0},[s]=r.info,[a]=r.common,[n]=r.distanceField??[];n&&(i.distanceField={range:parseInt(n.distanceRange,10),type:n.fieldType}),i.fontSize=parseInt(s.size,10),i.fontFamily=s.face,i.lineHeight=parseInt(a.lineHeight,10);let l=r.page;for(let e=0;e<l.length;e++)i.pages.push({id:parseInt(l[e].id,10)||0,file:l[e].file});let o={};i.baseLineOffset=i.lineHeight-parseInt(a.base,10);let h=r.char;for(let e=0;e<h.length;e++){let t=h[e],r=parseInt(t.id,10),s=t.letter??t.char??String.fromCharCode(r);"space"===s&&(s=" "),o[r]=s,i.chars[s]={id:r,page:parseInt(t.page,10)||0,x:parseInt(t.x,10),y:parseInt(t.y,10),width:parseInt(t.width,10),height:parseInt(t.height,10),xOffset:parseInt(t.xoffset,10),yOffset:parseInt(t.yoffset,10),xAdvance:parseInt(t.xadvance,10),kerning:{}}}let d=r.kerning||[];for(let e=0;e<d.length;e++){let t=parseInt(d[e].first,10),r=parseInt(d[e].second,10),s=parseInt(d[e].amount,10);i.chars[o[r]].kerning[o[t]]=s}return i}},P={test:e=>"string"!=typeof e&&"getElementsByTagName"in e&&e.getElementsByTagName("page").length&&null!==e.getElementsByTagName("info")[0].getAttribute("face"),parse(e){let t={chars:{},pages:[],lineHeight:0,fontSize:0,fontFamily:"",distanceField:null,baseLineOffset:0},r=e.getElementsByTagName("info")[0],i=e.getElementsByTagName("common")[0],s=e.getElementsByTagName("distanceField")[0];s&&(t.distanceField={type:s.getAttribute("fieldType"),range:parseInt(s.getAttribute("distanceRange"),10)});let a=e.getElementsByTagName("page"),n=e.getElementsByTagName("char"),l=e.getElementsByTagName("kerning");t.fontSize=parseInt(r.getAttribute("size"),10),t.fontFamily=r.getAttribute("face"),t.lineHeight=parseInt(i.getAttribute("lineHeight"),10);for(let e=0;e<a.length;e++)t.pages.push({id:parseInt(a[e].getAttribute("id"),10)||0,file:a[e].getAttribute("file")});let o={};t.baseLineOffset=t.lineHeight-parseInt(i.getAttribute("base"),10);for(let e=0;e<n.length;e++){let r=n[e],i=parseInt(r.getAttribute("id"),10),s=r.getAttribute("letter")??r.getAttribute("char")??String.fromCharCode(i);"space"===s&&(s=" "),o[i]=s,t.chars[s]={id:i,page:parseInt(r.getAttribute("page"),10)||0,x:parseInt(r.getAttribute("x"),10),y:parseInt(r.getAttribute("y"),10),width:parseInt(r.getAttribute("width"),10),height:parseInt(r.getAttribute("height"),10),xOffset:parseInt(r.getAttribute("xoffset"),10),yOffset:parseInt(r.getAttribute("yoffset"),10),xAdvance:parseInt(r.getAttribute("xadvance"),10),kerning:{}}}for(let e=0;e<l.length;e++){let r=parseInt(l[e].getAttribute("first"),10),i=parseInt(l[e].getAttribute("second"),10),s=parseInt(l[e].getAttribute("amount"),10);t.chars[o[i]].kerning[o[r]]=s}return t}},M=e=>!!("string"==typeof e&&e.includes("<font>"))&&P.test(n.e.get().parseXML(e)),F=e=>P.parse(n.e.get().parseXML(e)),B=[".xml",".fnt"],R={extension:i.Ag.CacheParser,test:e=>e instanceof C,getCacheableAssets(e,t){let r={};return e.forEach(e=>{r[e]=t}),r[`${t.fontFamily}-bitmap`]=t,r}},k={extension:{type:i.Ag.LoadParser,priority:s.T.Normal},test:e=>B.includes(l.A.extname(e).toLowerCase()),testParse:async e=>A.test(e)||M(e),async parse(e,t,r){let i=A.test(e)?A.parse(e):F(e),{src:s}=t,{pages:n}=i,o=[];for(let e=0;e<n.length;++e){let t=n[e].file,r=l.A.join(l.A.dirname(s),t);r=(0,a.Y)(r,s),o.push(r)}let h=await r.load(o);return new C({data:i,textures:o.map(e=>h[e])},s)},async load(e,t){let r=await n.e.get().fetch(e);return await r.text()},async unload(e,t,r){await Promise.all(e.pages.map(e=>r.unload(e.texture.source._sourceOrigin))),e.destroy()}};var U=r(2078),z=r(8788),O=r(6253),I=r(6653),H=r(9911),W=r(2844),G=r(7261),E=r(7728),L=r(8023),D=r(8625);let $={name:"local-uniform-msdf-bit",vertex:{header:`
|
|
67
|
+
struct LocalUniforms {
|
|
68
|
+
uColor:vec4<f32>,
|
|
69
|
+
uTransformMatrix:mat3x3<f32>,
|
|
70
|
+
uDistance: f32,
|
|
71
|
+
uRound:f32,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@group(2) @binding(0) var<uniform> localUniforms : LocalUniforms;
|
|
75
|
+
`,main:`
|
|
76
|
+
vColor *= localUniforms.uColor;
|
|
77
|
+
modelMatrix *= localUniforms.uTransformMatrix;
|
|
78
|
+
`,end:`
|
|
79
|
+
if(localUniforms.uRound == 1)
|
|
80
|
+
{
|
|
81
|
+
vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
|
|
82
|
+
}
|
|
83
|
+
`},fragment:{header:`
|
|
84
|
+
struct LocalUniforms {
|
|
85
|
+
uColor:vec4<f32>,
|
|
86
|
+
uTransformMatrix:mat3x3<f32>,
|
|
87
|
+
uDistance: f32
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@group(2) @binding(0) var<uniform> localUniforms : LocalUniforms;
|
|
91
|
+
`,main:`
|
|
92
|
+
outColor = vColor * calculateMSDFAlpha(outColor, localUniforms.uDistance);
|
|
93
|
+
`}},X={name:"local-uniform-msdf-bit",vertex:{header:`
|
|
94
|
+
uniform mat3 uTransformMatrix;
|
|
95
|
+
uniform vec4 uColor;
|
|
96
|
+
uniform float uRound;
|
|
97
|
+
`,main:`
|
|
98
|
+
vColor *= uColor;
|
|
99
|
+
modelMatrix *= uTransformMatrix;
|
|
100
|
+
`,end:`
|
|
101
|
+
if(uRound == 1.)
|
|
102
|
+
{
|
|
103
|
+
gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
|
|
104
|
+
}
|
|
105
|
+
`},fragment:{header:`
|
|
106
|
+
uniform float uDistance;
|
|
107
|
+
`,main:`
|
|
108
|
+
outColor = vColor * calculateMSDFAlpha(outColor, uDistance);
|
|
109
|
+
`}},V={name:"msdf-bit",fragment:{header:`
|
|
110
|
+
fn calculateMSDFAlpha(msdfColor:vec4<f32>, distance:f32) -> f32 {
|
|
111
|
+
|
|
112
|
+
// MSDF
|
|
113
|
+
var median = msdfColor.r + msdfColor.g + msdfColor.b -
|
|
114
|
+
min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -
|
|
115
|
+
max(msdfColor.r, max(msdfColor.g, msdfColor.b));
|
|
116
|
+
|
|
117
|
+
// SDF
|
|
118
|
+
median = min(median, msdfColor.a);
|
|
119
|
+
|
|
120
|
+
var screenPxDistance = distance * (median - 0.5);
|
|
121
|
+
var alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
|
122
|
+
if (median < 0.01) {
|
|
123
|
+
alpha = 0.0;
|
|
124
|
+
} else if (median > 0.99) {
|
|
125
|
+
alpha = 1.0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return alpha;
|
|
129
|
+
}
|
|
130
|
+
`}},Y={name:"msdf-bit",fragment:{header:`
|
|
131
|
+
float calculateMSDFAlpha(vec4 msdfColor, float distance) {
|
|
132
|
+
|
|
133
|
+
// MSDF
|
|
134
|
+
float median = msdfColor.r + msdfColor.g + msdfColor.b -
|
|
135
|
+
min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -
|
|
136
|
+
max(msdfColor.r, max(msdfColor.g, msdfColor.b));
|
|
137
|
+
|
|
138
|
+
// SDF
|
|
139
|
+
median = min(median, msdfColor.a);
|
|
140
|
+
|
|
141
|
+
float screenPxDistance = distance * (median - 0.5);
|
|
142
|
+
float alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
|
143
|
+
|
|
144
|
+
if (median < 0.01) {
|
|
145
|
+
alpha = 0.0;
|
|
146
|
+
} else if (median > 0.99) {
|
|
147
|
+
alpha = 1.0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return alpha;
|
|
151
|
+
}
|
|
152
|
+
`}};class K extends L.M{constructor(){const e=new D.k({uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uTransformMatrix:{value:new O.u,type:"mat3x3<f32>"},uDistance:{value:4,type:"f32"},uRound:{value:0,type:"f32"}});super({glProgram:(0,I.I)({name:"sdf-shader",bits:[H.a,(0,W.P)(16),X,Y,G.m]}),gpuProgram:(0,I.v)({name:"sdf-shader",bits:[H.F,(0,W._)(16),$,V,G.b]}),resources:{localUniforms:e,batchSamplers:E.v}})}}class N{constructor(e){this._gpuBitmapText={},this._renderer=e}validateRenderable(e){let t=this._getGpuBitmapText(e);return e._didTextUpdate&&(e._didTextUpdate=!1,this._updateContext(e,t)),this._renderer.renderPipes.graphics.validateRenderable(t)}addRenderable(e,t){let r=this._getGpuBitmapText(e);j(e,r),e._didTextUpdate&&(e._didTextUpdate=!1,this._updateContext(e,r)),this._renderer.renderPipes.graphics.addRenderable(r,t),r.context.customShader&&this._updateDistanceField(e)}destroyRenderable(e){this._destroyRenderableByUid(e.uid)}_destroyRenderableByUid(e){U.Z.return(this._gpuBitmapText[e]),this._gpuBitmapText[e]=null}updateRenderable(e){let t=this._getGpuBitmapText(e);j(e,t),this._renderer.renderPipes.graphics.updateRenderable(t),t.context.customShader&&this._updateDistanceField(e)}_updateContext(e,t){let{context:r}=t,i=S.getFont(e.text,e._style);r.clear(),"none"===i.distanceField.type||r.customShader||(this._sdfShader||(this._sdfShader=new K),r.customShader=this._sdfShader);let s=Array.from(e.text),a=e._style,n=(a._stroke?.width||0)/2;n+=i.baseLineOffset;let l=w(s,a,i),o=0,h=a.padding,d=l.scale;r.translate(-e._anchor._x*l.width-h,-e._anchor._y*(l.height+l.offsetY)-h).scale(d,d);let u=a._fill.color;for(let e=0;e<l.lines.length;e++){let t=l.lines[e];for(let e=0;e<t.charPositions.length;e++){let a=s[o++],l=i.chars[a];l?.texture&&r.texture(l.texture,u||"black",Math.round(t.charPositions[e]+l.xOffset),Math.round(n+l.yOffset))}n+=i.lineHeight}}_getGpuBitmapText(e){return this._gpuBitmapText[e.uid]||this.initGpuText(e)}initGpuText(e){let t=U.Z.get(z.A);return this._gpuBitmapText[e.uid]=t,this._updateContext(e,t),e.on("destroyed",()=>{this.destroyRenderable(e)}),this._gpuBitmapText[e.uid]}_updateDistanceField(e){let t=this._getGpuBitmapText(e).context,r=e._style.fontFamily,i=p.l.get(`${r}-bitmap`),{a:s,b:a,c:n,d:l}=e.groupTransform,o=(Math.abs(Math.sqrt(s*s+a*a))+Math.abs(Math.sqrt(n*n+l*l)))/2,h=i.baseRenderedFontSize/e._style.fontSize,d=e.resolution??this._renderer.resolution,u=o*i.distanceField.range*(1/h)*d;t.customShader.resources.localUniforms.uniforms.uDistance=u}destroy(){for(let e in this._gpuBitmapText)this._destroyRenderableByUid(e);this._gpuBitmapText=null,this._sdfShader?.destroy(!0),this._sdfShader=null,this._renderer=null}}function j(e,t){t.groupTransform=e.groupTransform,t.groupColorAlpha=e.groupColorAlpha,t.groupColor=e.groupColor,t.groupBlendMode=e.groupBlendMode,t.globalDisplayStatus=e.globalDisplayStatus,t.groupTransform=e.groupTransform,t.localDisplayStatus=e.localDisplayStatus,t.groupAlpha=e.groupAlpha,t._roundPixels=e._roundPixels}N.extension={type:[i.Ag.WebGLPipes,i.Ag.WebGPUPipes,i.Ag.CanvasPipes],name:"bitmapText"},i.XO.add(N,k,R)},7887(e,t,r){let i;var s=r(3071),a=r(7633),n=r(6260),l=r(2078),o=r(9786);class h{constructor(e){this._gpuText=Object.create(null),this._renderer=e}validateRenderable(e){let t=this._getGpuText(e),r=e._getKey();return t.textureNeedsUploading?(t.textureNeedsUploading=!1,!0):t.currentKey!==r}addRenderable(e){let t=this._getGpuText(e).batchableSprite;e._didTextUpdate&&this._updateText(e),this._renderer.renderPipes.batch.addToBatch(t)}updateRenderable(e){let t=this._getGpuText(e).batchableSprite;e._didTextUpdate&&this._updateText(e),t.batcher.updateElement(t)}destroyRenderable(e){this._destroyRenderableById(e.uid)}_destroyRenderableById(e){let t=this._gpuText[e];this._renderer.htmlText.decreaseReferenceCount(t.currentKey),l.Z.return(t.batchableSprite),this._gpuText[e]=null}_updateText(e){let t=e._getKey(),r=this._getGpuText(e),i=r.batchableSprite;r.currentKey!==t&&this._updateGpuText(e).catch(e=>{console.error(e)}),e._didTextUpdate=!1;let s=e._style.padding;(0,n.y)(i.bounds,e._anchor,i.texture,s)}async _updateGpuText(e){e._didTextUpdate=!1;let t=this._getGpuText(e);if(t.generatingTexture)return;let r=e._getKey();this._renderer.htmlText.decreaseReferenceCount(t.currentKey),t.generatingTexture=!0,t.currentKey=r;let i=e.resolution??this._renderer.resolution,s=await this._renderer.htmlText.getManagedTexture(e.text,i,e._style,e._getKey()),a=t.batchableSprite;a.texture=t.texture=s,t.generatingTexture=!1,t.textureNeedsUploading=!0,e.onViewUpdate();let l=e._style.padding;(0,n.y)(a.bounds,e._anchor,a.texture,l)}_getGpuText(e){return this._gpuText[e.uid]||this.initGpuText(e)}initGpuText(e){let t={texture:a.g.EMPTY,currentKey:"--",batchableSprite:l.Z.get(o.K),textureNeedsUploading:!1,generatingTexture:!1},r=t.batchableSprite;return r.renderable=e,r.texture=a.g.EMPTY,r.bounds={minX:0,maxX:1,minY:0,maxY:0},r.roundPixels=this._renderer._roundPixels|e._roundPixels,this._gpuText[e.uid]=t,e.on("destroyed",()=>{this.destroyRenderable(e)}),t}destroy(){for(let e in this._gpuText)this._destroyRenderableById(e);this._gpuText=null,this._renderer=null}}h.extension={type:[s.Ag.WebGLPipes,s.Ag.WebGPUPipes,s.Ag.CanvasPipes],name:"htmlText"};var d=r(3097),u=r(2031),c=r(8370),p=r(6840),g=r(3002);let f="http://www.w3.org/2000/svg",m="http://www.w3.org/1999/xhtml";class x{constructor(){this.svgRoot=document.createElementNS(f,"svg"),this.foreignObject=document.createElementNS(f,"foreignObject"),this.domElement=document.createElementNS(m,"div"),this.styleElement=document.createElementNS(m,"style"),this.image=new Image;const{foreignObject:e,svgRoot:t,styleElement:r,domElement:i}=this;e.setAttribute("width","10000"),e.setAttribute("height","10000"),e.style.overflow="hidden",t.appendChild(e),e.appendChild(r),e.appendChild(i)}}var _=r(4951),b=r(5631),y=r(1170);function T(e){let t=y.Q.shared.setValue(e.color).setAlpha(e.alpha).toHexa(),r=Math.round(Math.cos(e.angle)*e.distance),i=Math.round(Math.sin(e.angle)*e.distance),s=`${r}px ${i}px`;return e.blur>0?`text-shadow: ${s} ${e.blur}px ${t}`:`text-shadow: ${s} ${t}`}function v(e){return`-webkit-text-stroke-width: ${e.width}px;-webkit-text-stroke-color: ${y.Q.shared.setValue(e.color).toHex()};text-stroke-width: ${e.width}px;text-stroke-color: ${y.Q.shared.setValue(e.color).toHex()};paint-order: stroke`}let w={fontSize:"font-size: {{VALUE}}px",fontFamily:"font-family: {{VALUE}}",fontWeight:"font-weight: {{VALUE}}",fontStyle:"font-style: {{VALUE}}",fontVariant:"font-variant: {{VALUE}}",letterSpacing:"letter-spacing: {{VALUE}}px",align:"text-align: {{VALUE}}",padding:"padding: {{VALUE}}px",whiteSpace:"white-space: {{VALUE}}",lineHeight:"line-height: {{VALUE}}px",wordWrapWidth:"max-width: {{VALUE}}px"},S={fill:e=>`color: ${y.Q.shared.setValue(e).toHex()}`,breakWords:e=>`word-wrap: ${e?"break-all":"break-word"}`,stroke:v,dropShadow:T};class C extends _.x{constructor(e={}){super(e),this._cssOverrides=[],this.cssOverrides??(this.cssOverrides=e.cssOverrides),this.tagStyles=e.tagStyles??{}}set cssOverrides(e){this._cssOverrides=e instanceof Array?e:[e],this.update()}get cssOverrides(){return this._cssOverrides}_generateKey(){return this._styleKey=(0,b.V)(this)+this._cssOverrides.join("-"),this._styleKey}update(){this._cssStyle=null,super.update()}clone(){return new C({align:this.align,breakWords:this.breakWords,dropShadow:this.dropShadow,fill:this._fill,fontFamily:this.fontFamily,fontSize:this.fontSize,fontStyle:this.fontStyle,fontVariant:this.fontVariant,fontWeight:this.fontWeight,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,padding:this.padding,stroke:this._stroke,whiteSpace:this.whiteSpace,wordWrap:this.wordWrap,wordWrapWidth:this.wordWrapWidth,cssOverrides:this.cssOverrides})}get cssStyle(){let e,t,r,i;return this._cssStyle||(this._cssStyle=(e=this._stroke,t=this._fill,r=[`color: ${y.Q.shared.setValue(t.color).toHex()}`,`font-size: ${this.fontSize}px`,`font-family: ${this.fontFamily}`,`font-weight: ${this.fontWeight}`,`font-style: ${this.fontStyle}`,`font-variant: ${this.fontVariant}`,`letter-spacing: ${this.letterSpacing}px`,`text-align: ${this.align}`,`padding: ${this.padding}px`,`white-space: ${"pre"===this.whiteSpace&&this.wordWrap?"pre-wrap":this.whiteSpace}`,...this.lineHeight?[`line-height: ${this.lineHeight}px`]:[],...this.wordWrap?[`word-wrap: ${this.breakWords?"break-all":"break-word"}`,`max-width: ${this.wordWrapWidth}px`]:[],...e?[v(e)]:[],...this.dropShadow?[T(this.dropShadow)]:[],...this.cssOverrides].join(";"),i=[`div { ${r} }`],function(e,t){for(let r in e){let i=e[r],s=[];for(let e in i)S[e]?s.push(S[e](i[e])):w[e]&&s.push(w[e].replace("{{VALUE}}",i[e]));t.push(`${r} { ${s.join(";")} }`)}}(this.tagStyles,i),i.join(" "))),this._cssStyle}addOverride(...e){let t=e.filter(e=>!this.cssOverrides.includes(e));t.length>0&&(this.cssOverrides.push(...t),this.update())}removeOverride(...e){let t=e.filter(e=>this.cssOverrides.includes(e));t.length>0&&(this.cssOverrides=this.cssOverrides.filter(e=>!t.includes(e)),this.update())}set fill(e){"string"!=typeof e&&"number"!=typeof e&&(0,p.R)("[HTMLTextStyle] only color fill is not supported by HTMLText"),super.fill=e}set stroke(e){e&&"string"!=typeof e&&"number"!=typeof e&&(0,p.R)("[HTMLTextStyle] only color stroke is not supported by HTMLText"),super.stroke=e}}var A=r(8623);async function P(e){let t=await c.e.get().fetch(e),r=await t.blob(),i=new FileReader;return await new Promise((e,t)=>{i.onloadend=()=>e(i.result),i.onerror=t,i.readAsDataURL(r)})}async function M(e,t){let r=await P(t);return`@font-face {
|
|
153
|
+
font-family: "${e.fontFamily}";
|
|
154
|
+
src: url('${r}');
|
|
155
|
+
font-weight: ${e.fontWeight};
|
|
156
|
+
font-style: ${e.fontStyle};
|
|
157
|
+
}`}let F=new Map;async function B(e,t,r){let i=e.filter(e=>A.l.has(`${e}-and-url`)).map((e,i)=>{if(!F.has(e)){let{url:s}=A.l.get(`${e}-and-url`);0===i?F.set(e,M(t,s)):F.set(e,M({fontWeight:r.fontWeight,fontStyle:r.fontStyle,fontFamily:e},s))}return F.get(e)});return(await Promise.all(i)).join("\n")}var R=r(2271),k=r(3748);class U{constructor(e){this._activeTextures={},this._renderer=e,this._createCanvas=e.type===u.W.WEBGPU}getTexture(e){return this._buildTexturePromise(e.text,e.resolution,e.style)}getManagedTexture(e,t,r,i){if(this._activeTextures[i])return this._increaseReferenceCount(i),this._activeTextures[i].promise;let s=this._buildTexturePromise(e,t,r).then(e=>(this._activeTextures[i].texture=e,e));return this._activeTextures[i]={texture:null,promise:s,usageCount:1},s}async _buildTexturePromise(e,t,r){var s;let a=l.Z.get(x),n=function(e,t){let r=t.fontFamily,i=[],s={},a=e.match(/font-family:([^;"\s]+)/g);function n(e){s[e]||(i.push(e),s[e]=!0)}if(Array.isArray(r))for(let e=0;e<r.length;e++)n(r[e]);else n(r);for(let e in a&&a.forEach(e=>{n(e.split(":")[1].trim())}),t.tagStyles)n(t.tagStyles[e].fontFamily);return i}(e,r),o=await B(n,r,C.defaultTextStyle),h=function(e,t,r,s){let{domElement:a,styleElement:n,svgRoot:l}=s=s||i||(i=new x);a.innerHTML=`<style>${t.cssStyle}</style><div>${e}</div>`,a.setAttribute("style","transform-origin: top left; display: inline-block"),r&&(n.textContent=r),document.body.appendChild(l);let o=a.getBoundingClientRect();l.remove();let h=k.P.measureFont(t.fontStyle).descent;return{width:o.width,height:o.height+h}}(e,r,o,a),d=Math.ceil(Math.ceil(Math.max(1,h.width)+2*r.padding)*t),u=Math.ceil(Math.ceil(Math.max(1,h.height)+2*r.padding)*t),p=a.image;p.width=0|d,p.height=0|u;let f=function(e,t,r,i,s){let{domElement:a,styleElement:n,svgRoot:l}=s;a.innerHTML=`<style>${t.cssStyle}</style><div>${e}</div>`,a.setAttribute("style",`transform: scale(${r});transform-origin: top left; display: inline-block`),n.textContent=i;let{width:o,height:h}=s.image;return l.setAttribute("width",o.toString()),l.setAttribute("height",h.toString()),new XMLSerializer().serializeToString(l)}(e,r,t,o,a);await (s=function(){let{userAgent:e}=c.e.get().getNavigator();return/^((?!chrome|android).)*safari/i.test(e)}()&&n.length>0,new Promise(async e=>{s&&await new Promise(e=>setTimeout(e,100)),p.onload=()=>{e()},p.src=`data:image/svg+xml;charset=utf8,${encodeURIComponent(f)}`,p.crossOrigin="anonymous"}));let m=p;this._createCanvas&&(m=function(e,t){let r=R.N.getOptimalCanvasAndContext(e.width,e.height,t),{context:i}=r;return i.clearRect(0,0,e.width,e.height),i.drawImage(e,0,0),R.N.returnCanvasAndContext(r),r.canvas}(p,t));let _=(0,g.M)(m,p.width,p.height,t);return this._createCanvas&&this._renderer.texture.initSource(_.source),l.Z.return(a),_}_increaseReferenceCount(e){this._activeTextures[e].usageCount++}decreaseReferenceCount(e){let t=this._activeTextures[e];t&&(t.usageCount--,0===t.usageCount&&(t.texture?this._cleanUp(t):t.promise.then(e=>{t.texture=e,this._cleanUp(t)}).catch(()=>{(0,p.R)("HTMLTextSystem: Failed to clean texture")}),this._activeTextures[e]=null))}_cleanUp(e){d.W.returnTexture(e.texture),e.texture.source.resource=null,e.texture.source.uploadMethodId="unknown"}getReferenceCount(e){return this._activeTextures[e].usageCount}destroy(){this._activeTextures=null}}U.extension={type:[s.Ag.WebGLSystem,s.Ag.WebGPUSystem,s.Ag.CanvasSystem],name:"htmlText"},U.defaultFontOptions={fontFamily:"Arial",fontStyle:"normal",fontWeight:"normal"},s.XO.add(U),s.XO.add(h)},9904(e,t,r){r.d(t,{r:()=>h});var i=r(1170),s=r(6253),a=r(7633),n=r(6840),l=r(448),o=r(6362);function h(e,t){if(e.texture===a.g.WHITE&&!e.fill)return i.Q.shared.setValue(e.color).toHex();if(e.fill){if(e.fill instanceof o.m){let r=e.fill,i=t.createPattern(r.texture.source.resource,"repeat"),a=r.transform.copyTo(s.u.shared);return a.scale(r.texture.frame.width,r.texture.frame.height),i.setTransform(a),i}else if(e.fill instanceof l._){let r=e.fill;if("linear"===r.type){let e=t.createLinearGradient(r.x0,r.y0,r.x1,r.y1);return r.gradientStops.forEach(t=>{e.addColorStop(t.offset,i.Q.shared.setValue(t.color).toHex())}),e}}}else{let r=t.createPattern(e.texture.source.resource,"repeat"),i=e.matrix.copyTo(s.u.shared);return i.scale(e.texture.frame.width,e.texture.frame.height),r.setTransform(i),r}return(0,n.R)("FillStyle not recognised",e),"red"}},5163(e,t,r){var i=r(3071),s=r(6260),a=r(2078),n=r(9786);class l{constructor(e){this._gpuText=Object.create(null),this._renderer=e}validateRenderable(e){let t=this._getGpuText(e),r=e._getKey();if(t.currentKey!==r){let r=e.resolution??this._renderer.resolution,{width:i,height:s}=this._renderer.canvasText.getTextureSize(e.text,r,e._style);return 1!==this._renderer.canvasText.getReferenceCount(t.currentKey)||i!==t.texture._source.width||s!==t.texture._source.height}return!1}addRenderable(e,t){let r=this._getGpuText(e).batchableSprite;e._didTextUpdate&&this._updateText(e),this._renderer.renderPipes.batch.addToBatch(r)}updateRenderable(e){let t=this._getGpuText(e).batchableSprite;e._didTextUpdate&&this._updateText(e),t.batcher.updateElement(t)}destroyRenderable(e){this._destroyRenderableById(e.uid)}_destroyRenderableById(e){let t=this._gpuText[e];this._renderer.canvasText.decreaseReferenceCount(t.currentKey),a.Z.return(t.batchableSprite),this._gpuText[e]=null}_updateText(e){let t=e._getKey(),r=this._getGpuText(e),i=r.batchableSprite;r.currentKey!==t&&this._updateGpuText(e),e._didTextUpdate=!1;let a=e._style.padding;(0,s.y)(i.bounds,e._anchor,i.texture,a)}_updateGpuText(e){let t=this._getGpuText(e),r=t.batchableSprite;t.texture&&this._renderer.canvasText.decreaseReferenceCount(t.currentKey),t.texture=r.texture=this._renderer.canvasText.getManagedTexture(e),t.currentKey=e._getKey(),r.texture=t.texture}_getGpuText(e){return this._gpuText[e.uid]||this.initGpuText(e)}initGpuText(e){let t={texture:null,currentKey:"--",batchableSprite:a.Z.get(n.K)};return t.batchableSprite.renderable=e,t.batchableSprite.bounds={minX:0,maxX:1,minY:0,maxY:0},t.batchableSprite.roundPixels=this._renderer._roundPixels|e._roundPixels,this._gpuText[e.uid]=t,this._updateText(e),e.on("destroyed",()=>{this.destroyRenderable(e)}),t}destroy(){for(let e in this._gpuText)this._destroyRenderableById(e);this._gpuText=null,this._renderer=null}}l.extension={type:[i.Ag.WebGLPipes,i.Ag.WebGPUPipes,i.Ag.CanvasPipes],name:"text"};var o=r(1170),h=r(551),d=r(2271),u=r(3097),c=r(3203);function p(e,t,r){for(let i=0,s=4*r*t;i<t;++i,s+=4)if(0!==e[s+3])return!1;return!0}function g(e,t,r,i,s){let a=4*t;for(let t=i,n=i*a+4*r;t<=s;++t,n+=a)if(0!==e[n+3])return!1;return!0}var f=r(5746),m=r(4951),x=r(3002),_=r(3748),b=r(4401),y=r(9904);class T{constructor(e){this._activeTextures={},this._renderer=e}getTextureSize(e,t,r){let i=_.P.measureText(e||" ",r),s=Math.ceil(Math.ceil(Math.max(1,i.width)+2*r.padding)*t),a=Math.ceil(Math.ceil(Math.max(1,i.height)+2*r.padding)*t);return s=Math.ceil(s-1e-6),a=Math.ceil(a-1e-6),{width:s=(0,h.U5)(s),height:a=(0,h.U5)(a)}}getTexture(e,t,r,i){"string"==typeof e&&((0,f.t)("8.0.0","CanvasTextSystem.getTexture: Use object TextOptions instead of separate arguments"),e={text:e,style:r,resolution:t}),e.style instanceof m.x||(e.style=new m.x(e.style));let{texture:s,canvasAndContext:a}=this.createTextureAndCanvas(e);return this._renderer.texture.initSource(s._source),d.N.returnCanvasAndContext(a),s}createTextureAndCanvas(e){let{text:t,style:r}=e,i=e.resolution??this._renderer.resolution,s=_.P.measureText(t||" ",r),a=Math.ceil(Math.ceil(Math.max(1,s.width)+2*r.padding)*i),n=Math.ceil(Math.ceil(Math.max(1,s.height)+2*r.padding)*i),l=d.N.getOptimalCanvasAndContext(a,n),{canvas:o}=l;this.renderTextToCanvas(t,r,i,l);let h=(0,x.M)(o,a,n,i);if(r.trim){let e=function(e,t=1){let{width:r,height:i}=e,s=e.getContext("2d",{willReadFrequently:!0});if(null===s)throw TypeError("Failed to get canvas 2D context");let a=s.getImageData(0,0,r,i).data,n=0,l=0,o=r-1,h=i-1;for(;l<i&&p(a,r,l);)++l;if(l===i)return c.M.EMPTY;for(;p(a,r,h);)--h;for(;g(a,r,n,l,h);)++n;for(;g(a,r,o,l,h);)--o;return++o,++h,new c.M(n/t,l/t,(o-n)/t,(h-l)/t)}(o,i);h.frame.copyFrom(e),h.updateUvs()}return{texture:h,canvasAndContext:l}}getManagedTexture(e){let t=e._getKey();if(this._activeTextures[t])return this._increaseReferenceCount(t),this._activeTextures[t].texture;let{texture:r,canvasAndContext:i}=this.createTextureAndCanvas(e);return this._activeTextures[t]={canvasAndContext:i,texture:r,usageCount:1},r}_increaseReferenceCount(e){this._activeTextures[e].usageCount++}decreaseReferenceCount(e){let t=this._activeTextures[e];if(t.usageCount--,0===t.usageCount){d.N.returnCanvasAndContext(t.canvasAndContext),u.W.returnTexture(t.texture);let r=t.texture.source;r.resource=null,r.uploadMethodId="unknown",r.alphaMode="no-premultiply-alpha",this._activeTextures[e]=null}}getReferenceCount(e){return this._activeTextures[e].usageCount}renderTextToCanvas(e,t,r,i){let s,a,{canvas:n,context:l}=i,h=(0,b.Z)(t),d=_.P.measureText(e||" ",t),u=d.lines,c=d.lineHeight,p=d.lineWidths,g=d.maxLineWidth,f=d.fontProperties,m=n.height;l.resetTransform(),l.scale(r,r);let x=2*t.padding;if(l.clearRect(0,0,d.width+4+x,d.height+4+x),t._stroke?.width){let e=t._stroke;l.lineWidth=e.width,l.miterLimit=e.miterLimit,l.lineJoin=e.join,l.lineCap=e.cap}l.font=h;let T=t.dropShadow?2:1;for(let e=0;e<T;++e){let n=t.dropShadow&&0===e,h=n?Math.ceil(Math.max(1,m)+2*t.padding):0,d=h*r;if(n){l.fillStyle="black",l.strokeStyle="black";let e=t.dropShadow,i=e.color,s=e.alpha;l.shadowColor=o.Q.shared.setValue(i).setAlpha(s).toRgbaString();let a=e.blur*r,n=e.distance*r;l.shadowBlur=a,l.shadowOffsetX=Math.cos(e.angle)*n,l.shadowOffsetY=Math.sin(e.angle)*n+d}else l.globalAlpha=t._fill?.alpha??1,l.fillStyle=t._fill?(0,y.r)(t._fill,l):null,t._stroke?.width&&(l.strokeStyle=(0,y.r)(t._stroke,l)),l.shadowColor="black";let x=(c-f.fontSize)/2;c-f.fontSize<0&&(x=0);let _=t._stroke?.width??0;for(let e=0;e<u.length;e++)s=_/2,a=_/2+e*c+f.ascent+x,"right"===t.align?s+=g-p[e]:"center"===t.align&&(s+=(g-p[e])/2),t._stroke?.width&&this._drawLetterSpacing(u[e],t,i,s+t.padding,a+t.padding-h,!0),void 0!==t._fill&&this._drawLetterSpacing(u[e],t,i,s+t.padding,a+t.padding-h)}}_drawLetterSpacing(e,t,r,i,s,a=!1){let{context:n}=r,l=t.letterSpacing,o=!1;if(_.P.experimentalLetterSpacingSupported&&(_.P.experimentalLetterSpacing?(n.letterSpacing=`${l}px`,n.textLetterSpacing=`${l}px`,o=!0):(n.letterSpacing="0px",n.textLetterSpacing="0px")),0===l||o)return void(a?n.strokeText(e,i,s):n.fillText(e,i,s));let h=i,d=_.P.graphemeSegmenter(e),u=n.measureText(e).width,c=0;for(let e=0;e<d.length;++e){let t=d[e];a?n.strokeText(t,h,s):n.fillText(t,h,s);let r="";for(let t=e+1;t<d.length;++t)r+=d[t];h+=u-(c=n.measureText(r).width)+l,u=c}}destroy(){this._activeTextures=null}}T.extension={type:[i.Ag.WebGLSystem,i.Ag.WebGPUSystem,i.Ag.CanvasSystem],name:"canvasText"},i.XO.add(T),i.XO.add(l)},3002(e,t,r){r.d(t,{M:()=>a});var i=r(3097);let s=new(r(6904)).c;function a(e,t,r,a){s.minX=0,s.minY=0,s.maxX=e.width/a|0,s.maxY=e.height/a|0;let n=i.W.getOptimalTexture(s.width,s.height,a,!1);return n.source.uploadMethodId="image",n.source.resource=e,n.source.alphaMode="premultiply-alpha-on-upload",n.frame.width=t/a,n.frame.height=r/a,n.source.emit("update",n.source),n.updateUvs(),n}}}]);
|
|
158
|
+
//# sourceMappingURL=856.be9fd814.js.map
|