Files
moon-gaming/yes/pixi-renderers/pixi-image-manager.js
T
2023-11-23 21:26:01 +00:00

3 lines
3.9 KiB
JavaScript

var gdjs;(function(d){const n=new d.Logger("PIXI Image manager"),T=(o,e)=>{n.error("Unable to load file "+o+" with error:",e||"(unknown error)")},u=(o,e)=>{!o||e.smoothed||(o.baseTexture.scaleMode=PIXI.SCALE_MODES.NEAREST)},g=(o,e)=>{e&&!e.smoothed&&(o.magFilter=THREE.NearestFilter,o.minFilter=THREE.NearestFilter)},h=(o,e,r)=>{const t=o.get(e);return t&&t.kind===r?t:null};class x{constructor(e,r){this._resources=new Map,this.setResources(e),this._resourcesLoader=r,this._invalidTexture=PIXI.Texture.from("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVQoU2P8z/D/PwMewDgyFAAApMMX8Zi0uXAAAAAASUVORK5CYIIA"),this._loadedTextures=new Hashtable,this._loadedThreeTextures=new Hashtable,this._loadedThreeMaterials=new Hashtable}setResources(e){this._resources.clear();for(const r of e)(r.kind==="image"||r.kind==="video")&&this._resources.set(r.name,r)}getPIXITexture(e){if(this._loadedTextures.containsKey(e)){const r=this._loadedTextures.get(e);if(r.valid)return r;n.error("Texture for "+e+" is not valid anymore (or never was).")}return this._invalidTexture}getOrLoadPIXITexture(e){if(this._loadedTextures.containsKey(e)){const i=this._loadedTextures.get(e);return i.valid?i:(n.error("Texture for "+e+" is not valid anymore (or never was)."),this._invalidTexture)}const r=h(this._resources,e,"image");if(!r)return n.warn('Unable to find texture for resource "'+e+'".'),this._invalidTexture;n.log('Loading texture for resource "'+e+'"...');const t=r.file,s=this._resourcesLoader.getFullUrl(t),a=PIXI.Texture.from(s,{resourceOptions:{crossorigin:this._resourcesLoader.checkIfCredentialsRequired(t)?"use-credentials":"anonymous"}}).on("error",i=>{T(t,i)});if(!a)throw new Error("Texture loading by PIXI returned nothing for file "+t+" behind url "+s);return u(a,r),this._loadedTextures.put(e,a),a}getThreeTexture(e){const r=this._loadedThreeTextures.get(e);if(r)return r;const t=this.getPIXITexture(e);if(!this._resourcesLoader._runtimeGame.getRenderer().getPIXIRenderer())throw new Error("No PIXI renderer was found.");const a=t.baseTexture.resource.source;if(!(a instanceof HTMLImageElement))throw new Error(`Can't load texture for resource "${e}" as it's not an image.`);const i=new THREE.Texture(a);i.magFilter=THREE.LinearFilter,i.minFilter=THREE.LinearFilter,i.wrapS=THREE.RepeatWrapping,i.wrapT=THREE.RepeatWrapping,i.colorSpace=THREE.SRGBColorSpace,i.needsUpdate=!0;const c=h(this._resources,e,"image");return g(i,c),this._loadedThreeTextures.put(e,i),i}getThreeMaterial(e,{useTransparentTexture:r,forceBasicMaterial:t}){const s=`${e}|${r?1:0}|${t?1:0}`,a=this._loadedThreeMaterials.get(s);if(a)return a;const i=t?new THREE.MeshBasicMaterial({map:this.getThreeTexture(e),side:r?THREE.DoubleSide:THREE.FrontSide,transparent:r}):new THREE.MeshStandardMaterial({map:this.getThreeTexture(e),side:r?THREE.DoubleSide:THREE.FrontSide,transparent:r,metalness:0});return this._loadedThreeMaterials.put(s,i),i}getPIXIVideoTexture(e){return this._loadedTextures.containsKey(e)?this._loadedTextures.get(e):this._invalidTexture}getInvalidPIXITexture(){return this._invalidTexture}async loadTextures(e){let r=0;return await Promise.all([...this._resources.values()].map(async t=>{try{if(t.kind==="video")await new Promise((s,a)=>{const i=PIXI.Texture.from(this._resourcesLoader.getFullUrl(t.file),{resourceOptions:{crossorigin:this._resourcesLoader.checkIfCredentialsRequired(t.file)?"use-credentials":"anonymous",autoPlay:!1}}).on("error",l=>{a(l)});i.baseTexture.on("loaded",()=>{this._loadedTextures.put(t.name,i),u(i,t),s()}).on("error",l=>{a(l)})});else{const s=PIXI.Texture.from(this._resourcesLoader.getFullUrl(t.file),{resourceOptions:{autoLoad:!1,crossorigin:this._resourcesLoader.checkIfCredentialsRequired(t.file)?"use-credentials":"anonymous"}});await s.baseTexture.resource.load(),this._loadedTextures.put(t.name,s),u(s,t)}}catch(s){T(t.file,s)}r++,e(r,this._resources.size)})),r}}d.PixiImageManager=x,d.ImageManager=d.PixiImageManager})(gdjs||(gdjs={}));
//# sourceMappingURL=pixi-image-manager.js.map