Files

3 lines
10 KiB
JavaScript

var gdjs;(function(d){const l=new d.Logger("PIXI Image manager"),c=(u,e)=>{l.error("Unable to load file "+u+" with error:",e||"(unknown error)")},g=(u,e)=>{!u||e.smoothed||(u.baseTexture.scaleMode=PIXI.SCALE_MODES.NEAREST)},h=(u,e)=>{e&&!e.smoothed&&(u.magFilter=THREE.NearestFilter,u.minFilter=THREE.NearestFilter)},A=["image","video"];class E{constructor(e){this._loadedTextures=new d.ResourceCache;this._loadedThreeMaterials=new f;this._loadedThreeCubeTextures=new Map;this._loadedThreeCubeTextureKeysByResourceName=new x;this._diskTextures=new Map;this._rectangleTextures=new Map;this._scaledTextures=new Map;this._getImageResource=e=>{const r=this._resourceLoader.getResource(e);return r&&this.getResourceKinds().includes(r.kind)?r:null};this._resourceLoader=e,this._invalidTexture=PIXI.Texture.from("data:image/png;base64,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",{width:192,height:192}),this._loadedThreeTextures=new Hashtable}getResourceKinds(){return A}getPIXITexture(e){const r=this._getImageResource(e);if(!r)return l.warn('Unable to find texture for resource "'+e+'".'),this._invalidTexture;const t=this._loadedTextures.get(r);return t?t.destroyed?(l.error("Texture for "+e+" is not valid anymore."),this._invalidTexture):t.valid?t:(l.error("Texture for "+e+" is not valid anymore (or never was)."),this._invalidTexture):this._invalidTexture}getOrLoadPIXITexture(e){const r=this._getImageResource(e);if(!r)return l.warn('Unable to find texture for resource "'+e+'".'),this._invalidTexture;const t=this._loadedTextures.get(r);if(t)return t.valid?t:(l.error("Texture for "+e+" is not valid anymore (or never was)."),this._invalidTexture);l.log('Loading texture for resource "'+e+'"...');const s=r.file,a=this._resourceLoader.getFullUrl(s),i=PIXI.Texture.from(a,{resourceOptions:{crossorigin:this._resourceLoader.checkIfCredentialsRequired(s)?"use-credentials":"anonymous"}}).on("error",o=>{c(s,o)});if(!i)throw new Error("Texture loading by PIXI returned nothing for file "+s+" behind url "+a);return g(i,r),this._loadedTextures.set(r,i),i}getThreeTexture(e){const r=this._loadedThreeTextures.get(e);if(r)return r;const t=this._getImageSource(e),s=new THREE.Texture(t);s.magFilter=THREE.LinearFilter,s.minFilter=THREE.LinearFilter,s.wrapS=THREE.RepeatWrapping,s.wrapT=THREE.RepeatWrapping,s.colorSpace=THREE.SRGBColorSpace,s.needsUpdate=!0;const a=this._getImageResource(e);return h(s,a),this._loadedThreeTextures.put(e,s),s}_getImageSource(e){const r=this.getPIXITexture(e);if(!this._resourceLoader._runtimeGame.getRenderer().getPIXIRenderer())throw new Error("No PIXI renderer was found.");const s=r.baseTexture.resource.source;if(!(s instanceof HTMLImageElement))throw new Error(`Can't load texture for resource "${e}" as it's not an image.`);return s}getThreeCubeTexture(e,r,t,s,a,i){const o=e+"|"+r+"|"+t+"|"+s+"|"+a+"|"+i,T=this._loadedThreeCubeTextures.get(o);if(T)return T;const n=new THREE.CubeTexture;n.images[0]=this._getImageSource(r),n.images[1]=this._getImageSource(e),n.images[2]=this._getImageSource(t),n.images[3]=this._getImageSource(s),n.images[4]=this._getImageSource(a),n.images[5]=this._getImageSource(i),n.magFilter=THREE.LinearFilter,n.minFilter=THREE.LinearFilter,n.colorSpace=THREE.SRGBColorSpace,n.needsUpdate=!0;const I=this._getImageResource(e);return h(n,I),this._loadedThreeCubeTextures.set(o,n),this._loadedThreeCubeTextureKeysByResourceName.add(e,o),this._loadedThreeCubeTextureKeysByResourceName.add(r,o),this._loadedThreeCubeTextureKeysByResourceName.add(t,o),this._loadedThreeCubeTextureKeysByResourceName.add(s,o),this._loadedThreeCubeTextureKeysByResourceName.add(a,o),this._loadedThreeCubeTextureKeysByResourceName.add(i,o),n}getThreeMaterial(e,r){const t=this._loadedThreeMaterials.get(e,r);if(t)return t;const s=r.forceBasicMaterial?new THREE.MeshBasicMaterial({map:this.getThreeTexture(e),side:r.useTransparentTexture?THREE.DoubleSide:THREE.FrontSide,transparent:r.useTransparentTexture,vertexColors:r.vertexColors}):new THREE.MeshStandardMaterial({map:this.getThreeTexture(e),side:r.useTransparentTexture?THREE.DoubleSide:THREE.FrontSide,transparent:r.useTransparentTexture,metalness:0,vertexColors:r.vertexColors});return this._loadedThreeMaterials.set(e,r,s),s}getPIXIVideoTexture(e){if(e==="")return this._invalidTexture;const r=this._getImageResource(e);if(!r)return l.warn('Unable to find video texture for resource "'+e+'".'),this._invalidTexture;const t=this._loadedTextures.get(r);return t||this._invalidTexture}getInvalidPIXITexture(){return this._invalidTexture}async loadResource(e){const r=this._resourceLoader.getResource(e);if(!r){l.warn('Unable to find texture for resource "'+e+'".');return}await this._loadTexture(r)}async processResource(e){}async _loadTexture(e){if(this._loadedTextures.get(e))return;const r=this._resourceLoader.getFullUrl(e.file);try{if(e.kind==="video")await new Promise((t,s)=>{const a=PIXI.Texture.from(r,{resourceOptions:{crossorigin:this._resourceLoader.checkIfCredentialsRequired(e.file)?"use-credentials":"anonymous",autoPlay:!1}}).on("error",o=>{s(o)});a.baseTexture.on("loaded",()=>{this._loadedTextures.set(e,a),g(a,e),t()}).on("error",o=>{s(o)})});else{const t=PIXI.Texture.from(r,{resourceOptions:{autoLoad:!1,crossorigin:this._resourceLoader.checkIfCredentialsRequired(e.file)?"use-credentials":"anonymous"}});await t.baseTexture.resource.load(),this._loadedTextures.set(e,t),g(t,e)}}catch(t){throw c(e.file,t),PIXI.Texture.removeFromCache(r),PIXI.BaseTexture.removeFromCache(r),t}}getOrCreateDiskTexture(e,r){let t=this._diskTextures.get(e);if(!t){const s=new PIXI.Graphics;s.lineStyle(0,0,0),s.beginFill(d.rgbToHexNumber(255,255,255),1),s.drawCircle(0,0,e),s.endFill(),t=r.generateTexture(s),s.destroy(),this._diskTextures.set(e,t)}return t}getOrCreateRectangleTexture(e,r,t){const s=`${e}_${r}`;let a=this._rectangleTextures.get(s);if(!a){const i=new PIXI.Graphics;i.lineStyle(0,0,0),i.beginFill(d.rgbToHexNumber(255,255,255),1),i.drawRect(0,0,e,r),i.endFill(),a=t.generateTexture(i),i.destroy(),this._rectangleTextures.set(s,a)}return a}getOrCreateScaledTexture(e,r,t,s){const a=`${e}_${r}_${t}`;let i=this._scaledTextures.get(a);if(!i){const o=new PIXI.Graphics,T=new PIXI.Sprite(this.getPIXITexture(e));T.width=r,T.height=t,o.addChild(T),i=s.generateTexture(o),o.destroy(),this._scaledTextures.set(a,i)}return i}dispose(){this._loadedTextures.clear();const e=[];this._loadedThreeTextures.values(e),this._loadedThreeTextures.clear();for(const r of e)r.dispose();for(const r of this._loadedThreeCubeTextures.values())r.dispose();this._loadedThreeCubeTextures.clear(),this._loadedThreeCubeTextureKeysByResourceName.clear(),this._loadedThreeMaterials.disposeAll();for(const r of this._diskTextures.values())r.destroyed||r.destroy();this._diskTextures.clear();for(const r of this._rectangleTextures.values())r.destroyed||r.destroy();this._rectangleTextures.clear();for(const r of this._scaledTextures.values())r.destroyed||r.destroy();this._scaledTextures.clear()}unloadResource(e){const r=e.name,t=this._loadedTextures.getFromName(r);t&&(t.destroy(!0),this._loadedTextures.delete(e));const s=this._loadedThreeTextures.get(r);s&&(s.dispose(),this._loadedThreeTextures.remove(r)),this._loadedThreeMaterials.dispose(r);const a=this._loadedThreeCubeTextureKeysByResourceName.getValuesFor(r);if(a)for(const i of a){const o=this._loadedThreeCubeTextures.get(i);o&&(o.dispose(),this._loadedThreeCubeTextures.delete(i))}}}d.PixiImageManager=E;class x{constructor(){this.map=new Map}getValuesFor(e){return this.map.get(e)}add(e,r){let t=this.map.get(e);t||(t=[],this.map.set(e,t)),t.push(r)}deleteValuesFor(e){this.map.delete(e)}clear(){this.map.clear()}}class f{constructor(){this._flaggedMaterials=new Map;this._materialFlaggedKeys=new x}get(e,{useTransparentTexture:r,forceBasicMaterial:t,vertexColors:s}){const a=`${e}|${r?1:0}|${t?1:0}|${s?1:0}`;return this._flaggedMaterials.get(a)||null}set(e,{useTransparentTexture:r,forceBasicMaterial:t,vertexColors:s},a){const i=`${e}|${r?1:0}|${t?1:0}|${s?1:0}`;this._flaggedMaterials.set(i,a),this._materialFlaggedKeys.add(e,i)}dispose(e){const r=this._materialFlaggedKeys.getValuesFor(e);if(r)for(const t of r){const s=this._flaggedMaterials.get(t);s&&s.dispose(),this._flaggedMaterials.delete(t)}this._materialFlaggedKeys.deleteValuesFor(e)}disposeAll(){for(const e of this._flaggedMaterials.values())e.dispose();this._flaggedMaterials.clear(),this._materialFlaggedKeys.clear()}}d.ImageManager=d.PixiImageManager})(gdjs||(gdjs={}));
//# sourceMappingURL=pixi-image-manager.js.map