babylonjs-loaders 9.26.0 → 9.26.2
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/babylon.glTF2FileLoader.js +1 -1
- package/babylon.glTF2FileLoader.js.map +1 -1
- package/babylon.glTF2FileLoader.min.js +1 -1
- package/babylon.glTF2FileLoader.min.js.map +1 -1
- package/babylon.glTFFileLoader.js +1 -1
- package/babylon.glTFFileLoader.js.map +1 -1
- package/babylon.glTFFileLoader.min.js +1 -1
- package/babylon.glTFFileLoader.min.js.map +1 -1
- package/babylonjs.loaders.d.ts +1505 -92
- package/babylonjs.loaders.es5.js +13257 -8699
- package/babylonjs.loaders.js +1 -1
- package/babylonjs.loaders.js.map +1 -1
- package/babylonjs.loaders.min.js +1 -1
- package/babylonjs.loaders.min.js.map +1 -1
- package/babylonjs.loaders.module.d.ts +3068 -202
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("babylonjs")):"function"==typeof define&&define.amd?define(["exports","babylonjs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).BABYLON=e.BABYLON||{},e.BABYLON)}(this,function(e,t){"use strict";function r(e,t,r,n){const a={externalResourceFunction:n};return r&&(a.uri="file:"===t?r:t+r),ArrayBuffer.isView(e)?GLTFValidator.validateBytes(e,a):GLTFValidator.validateString(e,a)}function n(){const e=[];onmessage=t=>{const n=t.data;switch(n.id){case"init":importScripts(n.url);break;case"validate":r(n.data,n.rootUrl,n.fileName,t=>new Promise((r,n)=>{const a=e.length;e.push({resolve:r,reject:n}),postMessage({id:"getExternalResource",index:a,uri:t})})).then(e=>{postMessage({id:"validate.resolve",value:e})},e=>{postMessage({id:"validate.reject",reason:e})});break;case"getExternalResource.resolve":e[n.index].resolve(n.value);break;case"getExternalResource.reject":e[n.index].reject(n.reason)}}}class a{static ValidateAsync(e,s,o,i){return"function"==typeof Worker?new Promise((l,u)=>{const c=`${r}(${n})()`,h=URL.createObjectURL(new Blob([c],{type:"application/javascript"})),d=new Worker(h),m=e=>{d.removeEventListener("error",m),d.removeEventListener("message",_),u(e)},_=e=>{const t=e.data;switch(t.id){case"getExternalResource":i(t.uri).then(e=>{d.postMessage({id:"getExternalResource.resolve",index:t.index,value:e},[e.buffer])},e=>{d.postMessage({id:"getExternalResource.reject",index:t.index,reason:e})});break;case"validate.resolve":d.removeEventListener("error",m),d.removeEventListener("message",_),a._LastResults=t.value,l(t.value),d.terminate();break;case"validate.reject":d.removeEventListener("error",m),d.removeEventListener("message",_),u(t.reason),d.terminate()}};if(d.addEventListener("error",m),d.addEventListener("message",_),d.postMessage({id:"init",url:t.Tools.GetBabylonScriptURL(this.Configuration.url)}),ArrayBuffer.isView(e)){const t=e.slice();d.postMessage({id:"validate",data:t,rootUrl:s,fileName:o},[t.buffer])}else d.postMessage({id:"validate",data:e,rootUrl:s,fileName:o})}):(this._LoadScriptPromise||(this._LoadScriptPromise=t.Tools.LoadBabylonScriptAsync(this.Configuration.url)),this._LoadScriptPromise.then(()=>r(e,s,o,i)))}}a.Configuration={url:`${t.Tools._DefaultCdnUrl}/gltf_validator.js`},a._LastResults=null;var s={__proto__:null,GLTFValidation:a};const o="Z2xURg",i="gltf",l={".gltf":{isBinary:!1,mimeType:"model/gltf+json"},".glb":{isBinary:!0,mimeType:"model/gltf-binary"}},u=e=>-1!==e.indexOf("asset")&&-1!==e.indexOf("version")||e.startsWith("data:base64,"+o)||e.startsWith("data:;base64,"+o)||e.startsWith("data:application/octet-stream;base64,"+o)||e.startsWith("data:model/gltf-binary;base64,"+o);function c(e,t,r){try{return Promise.resolve(new Uint8Array(e,t,r))}catch(e){return Promise.reject(e)}}var h,d,m;e.GLTFLoaderCoordinateSystemMode=void 0,(h=e.GLTFLoaderCoordinateSystemMode||(e.GLTFLoaderCoordinateSystemMode={}))[h.AUTO=0]="AUTO",h[h.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED",e.GLTFLoaderAnimationStartMode=void 0,(d=e.GLTFLoaderAnimationStartMode||(e.GLTFLoaderAnimationStartMode={}))[d.NONE=0]="NONE",d[d.FIRST=1]="FIRST",d[d.ALL=2]="ALL",e.GLTFLoaderState=void 0,(m=e.GLTFLoaderState||(e.GLTFLoaderState={}))[m.LOADING=0]="LOADING",m[m.READY=1]="READY",m[m.COMPLETE=2]="COMPLETE";const _=e=>Promise.resolve(e);class p{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=e.GLTFLoaderAnimationStartMode.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=e.GLTFLoaderCoordinateSystemMode.AUTO,this.createInstances=!0,this.loadAllMaterials=!1,this.loadMorphTargets=!0,this.useMaxMorphTargetInfluencers=!0,this.loadNodeAnimations=!0,this.loadOnlyMaterials=!1,this.loadSkins=!0,this.skipMaterials=!1,this.targetFps=60,this.transparencyAsCoverage=!1,this.useClipPlane=!1,this.useGltfTextureNames=!1,this.useRangeRequests=!1,this.useSRGBBuffers=!0,this.validate=!1,this.useOpenPBR=!1,this.dontUseTransmissionHelper=!1}}const g=new p;class f extends p{constructor(){super(...arguments),this.extensionOptions={},this.preprocessUrlAsync=_}copyFrom(e){var t,r,n,a,s,o,i,l,u,c,h,d,m,_,p,g,f,b,y,v,T,x,A,C,R,w,M;e&&(this.alwaysComputeBoundingBox=null!==(t=e.alwaysComputeBoundingBox)&&void 0!==t?t:this.alwaysComputeBoundingBox,this.alwaysComputeSkeletonRootNode=null!==(r=e.alwaysComputeSkeletonRootNode)&&void 0!==r?r:this.alwaysComputeSkeletonRootNode,this.animationStartMode=null!==(n=e.animationStartMode)&&void 0!==n?n:this.animationStartMode,this.capturePerformanceCounters=null!==(a=e.capturePerformanceCounters)&&void 0!==a?a:this.capturePerformanceCounters,this.compileMaterials=null!==(s=e.compileMaterials)&&void 0!==s?s:this.compileMaterials,this.compileShadowGenerators=null!==(o=e.compileShadowGenerators)&&void 0!==o?o:this.compileShadowGenerators,this.coordinateSystemMode=null!==(i=e.coordinateSystemMode)&&void 0!==i?i:this.coordinateSystemMode,this.createInstances=null!==(l=e.createInstances)&&void 0!==l?l:this.createInstances,this.customRootNode=e.customRootNode,this.extensionOptions=null!==(u=e.extensionOptions)&&void 0!==u?u:this.extensionOptions,this.loadAllMaterials=null!==(c=e.loadAllMaterials)&&void 0!==c?c:this.loadAllMaterials,this.loadMorphTargets=null!==(h=e.loadMorphTargets)&&void 0!==h?h:this.loadMorphTargets,this.loadNodeAnimations=null!==(d=e.loadNodeAnimations)&&void 0!==d?d:this.loadNodeAnimations,this.loadOnlyMaterials=null!==(m=e.loadOnlyMaterials)&&void 0!==m?m:this.loadOnlyMaterials,this.loadSkins=null!==(_=e.loadSkins)&&void 0!==_?_:this.loadSkins,this.loggingEnabled=null!==(p=e.loggingEnabled)&&void 0!==p?p:this.loggingEnabled,this.onCameraLoaded=e.onCameraLoaded,this.onMaterialLoaded=e.onMaterialLoaded,this.onMeshLoaded=e.onMeshLoaded,this.onParsed=e.onParsed,this.onSkinLoaded=e.onSkinLoaded,this.onTextureLoaded=e.onTextureLoaded,this.onValidated=e.onValidated,this.preprocessUrlAsync=null!==(g=e.preprocessUrlAsync)&&void 0!==g?g:this.preprocessUrlAsync,this.skipMaterials=null!==(f=e.skipMaterials)&&void 0!==f?f:this.skipMaterials,this.targetFps=null!==(b=e.targetFps)&&void 0!==b?b:this.targetFps,this.transparencyAsCoverage=null!==(y=e.transparencyAsCoverage)&&void 0!==y?y:this.transparencyAsCoverage,this.useClipPlane=null!==(v=e.useClipPlane)&&void 0!==v?v:this.useClipPlane,this.useGltfTextureNames=null!==(T=e.useGltfTextureNames)&&void 0!==T?T:this.useGltfTextureNames,this.useMaxMorphTargetInfluencers=null!==(x=e.useMaxMorphTargetInfluencers)&&void 0!==x?x:this.useMaxMorphTargetInfluencers,this.useOpenPBR=null!==(A=e.useOpenPBR)&&void 0!==A?A:this.useOpenPBR,this.useRangeRequests=null!==(C=e.useRangeRequests)&&void 0!==C?C:this.useRangeRequests,this.useSRGBBuffers=null!==(R=e.useSRGBBuffers)&&void 0!==R?R:this.useSRGBBuffers,this.validate=null!==(w=e.validate)&&void 0!==w?w:this.validate,this.dontUseTransmissionHelper=null!==(M=e.dontUseTransmissionHelper)&&void 0!==M?M:this.dontUseTransmissionHelper)}}class b extends f{constructor(e){super(),this.onParsedObservable=new t.Observable,this.onMeshLoadedObservable=new t.Observable,this.onSkinLoadedObservable=new t.Observable,this.onTextureLoadedObservable=new t.Observable,this.onMaterialLoadedObservable=new t.Observable,this.onCameraLoadedObservable=new t.Observable,this.onCompleteObservable=new t.Observable,this.onErrorObservable=new t.Observable,this.onDisposeObservable=new t.Observable,this.onExtensionLoadedObservable=new t.Observable,this.onValidatedObservable=new t.Observable,this._loader=null,this._state=null,this._requests=new Array,this.name=i,this.extensions=l,this.onLoaderStateChangedObservable=new t.Observable,this._logIndentLevel=0,this._loggingEnabled=!1,this._log=this._logDisabled,this._capturePerformanceCounters=!1,this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled,this.copyFrom(Object.assign(Object.assign({},g),e))}get _isPreprocessUrlAsyncSet(){return this.preprocessUrlAsync!==_}set onParsed(e){this._onParsedObserver&&this.onParsedObservable.remove(this._onParsedObserver),e&&(this._onParsedObserver=this.onParsedObservable.add(e))}set onMeshLoaded(e){this._onMeshLoadedObserver&&this.onMeshLoadedObservable.remove(this._onMeshLoadedObserver),e&&(this._onMeshLoadedObserver=this.onMeshLoadedObservable.add(e))}set onSkinLoaded(e){this._onSkinLoadedObserver&&this.onSkinLoadedObservable.remove(this._onSkinLoadedObserver),e&&(this._onSkinLoadedObserver=this.onSkinLoadedObservable.add(t=>e(t.node,t.skinnedNode)))}set onTextureLoaded(e){this._onTextureLoadedObserver&&this.onTextureLoadedObservable.remove(this._onTextureLoadedObserver),e&&(this._onTextureLoadedObserver=this.onTextureLoadedObservable.add(e))}set onMaterialLoaded(e){this._onMaterialLoadedObserver&&this.onMaterialLoadedObservable.remove(this._onMaterialLoadedObserver),e&&(this._onMaterialLoadedObserver=this.onMaterialLoadedObservable.add(e))}set onCameraLoaded(e){this._onCameraLoadedObserver&&this.onCameraLoadedObservable.remove(this._onCameraLoadedObserver),e&&(this._onCameraLoadedObserver=this.onCameraLoadedObservable.add(e))}set onComplete(e){this._onCompleteObserver&&this.onCompleteObservable.remove(this._onCompleteObserver),this._onCompleteObserver=this.onCompleteObservable.add(e)}set onError(e){this._onErrorObserver&&this.onErrorObservable.remove(this._onErrorObserver),this._onErrorObserver=this.onErrorObservable.add(e)}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}set onExtensionLoaded(e){this._onExtensionLoadedObserver&&this.onExtensionLoadedObservable.remove(this._onExtensionLoadedObserver),this._onExtensionLoadedObserver=this.onExtensionLoadedObservable.add(e)}get loggingEnabled(){return this._loggingEnabled}set loggingEnabled(e){this._loggingEnabled!==e&&(this._loggingEnabled=e,this._loggingEnabled?this._log=this._logEnabled:this._log=this._logDisabled)}get capturePerformanceCounters(){return this._capturePerformanceCounters}set capturePerformanceCounters(e){this._capturePerformanceCounters!==e&&(this._capturePerformanceCounters=e,this._capturePerformanceCounters?(this._startPerformanceCounter=this._startPerformanceCounterEnabled,this._endPerformanceCounter=this._endPerformanceCounterEnabled):(this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled))}set onValidated(e){this._onValidatedObserver&&this.onValidatedObservable.remove(this._onValidatedObserver),this._onValidatedObserver=this.onValidatedObservable.add(e)}dispose(){this._loader&&(this._loader.dispose(),this._loader=null);for(const e of this._requests)e.abort();this._requests.length=0,delete this._progressCallback,this.preprocessUrlAsync=_,this.onMeshLoadedObservable.clear(),this.onSkinLoadedObservable.clear(),this.onTextureLoadedObservable.clear(),this.onMaterialLoadedObservable.clear(),this.onCameraLoadedObservable.clear(),this.onCompleteObservable.clear(),this.onExtensionLoadedObservable.clear(),this.onDisposeObservable.notifyObservers(void 0),this.onDisposeObservable.clear()}loadFile(e,r,n,a,s,o,i,l){if(ArrayBuffer.isView(r))return this._loadBinary(e,r,n,a,i,l),null;this._progressCallback=s;const u=r.name||t.Tools.GetFilename(r);if(o){if(this.useRangeRequests){this.validate&&t.Logger.Warn("glTF validation is not supported when range requests are enabled");const n={abort:()=>{},onCompleteObservable:new t.Observable},s={readAsync:(t,n)=>new Promise((a,s)=>{this._loadFile(e,r,e=>{a(new Uint8Array(e))},!0,e=>{s(e)},e=>{e.setRequestHeader("Range",`bytes=${t}-${t+n-1}`)})}),byteLength:0};return this._unpackBinaryAsync(new t.DataReader(s)).then(e=>{n.onCompleteObservable.notifyObservers(n),a(e)},i?e=>i(void 0,e):void 0),n}return this._loadFile(e,r,r=>{this._validate(e,new Uint8Array(r,0,r.byteLength),n,u),this._unpackBinaryAsync(new t.DataReader({readAsync:(e,t)=>c(r,e,t),byteLength:r.byteLength})).then(e=>{a(e)},i?e=>i(void 0,e):void 0)},!0,i)}return this._loadFile(e,r,t=>{try{this._validate(e,t,n,u),a({json:this._parseJson(t)})}catch(e){i&&i()}},!1,i)}_loadBinary(e,r,n,a,s,o){this._validate(e,new Uint8Array(r.buffer,r.byteOffset,r.byteLength),n,o),this._unpackBinaryAsync(new t.DataReader({readAsync:(e,t)=>function(e,t,r){try{if(t<0||t>=e.byteLength)throw new RangeError("Offset is out of range.");if(t+r>e.byteLength)throw new RangeError("Length is out of range.");return Promise.resolve(new Uint8Array(e.buffer,e.byteOffset+t,r))}catch(e){return Promise.reject(e)}}(r,e,t),byteLength:r.byteLength})).then(e=>{a(e)},s?e=>s(void 0,e):void 0)}importMeshAsync(e,t,r,n,a,s){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(r),this.onParsedObservable.clear(),this._log(`Loading ${s||""}`),this._loader=this._getLoader(r),this._loader.importMeshAsync(e,t,null,r,n,a,s)))}loadAsync(e,t,r,n,a){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(t),this.onParsedObservable.clear(),this._log(`Loading ${a||""}`),this._loader=this._getLoader(t),this._loader.loadAsync(e,t,r,n,a)))}loadAssetContainerAsync(e,r,n,a,s){return Promise.resolve().then(()=>{this.onParsedObservable.notifyObservers(r),this.onParsedObservable.clear(),this._log(`Loading ${s||""}`),this._loader=this._getLoader(r);const o=new t.AssetContainer(e),i=[];this.onMaterialLoadedObservable.add(e=>{i.push(e)});const l=[];this.onTextureLoadedObservable.add(e=>{l.push(e)});const u=[];this.onCameraLoadedObservable.add(e=>{u.push(e)});const c=[];return this.onMeshLoadedObservable.add(e=>{e.morphTargetManager&&c.push(e.morphTargetManager)}),this._loader.importMeshAsync(null,e,o,r,n,a,s).then(e=>(Array.prototype.push.apply(o.geometries,e.geometries),Array.prototype.push.apply(o.meshes,e.meshes),Array.prototype.push.apply(o.particleSystems,e.particleSystems),Array.prototype.push.apply(o.skeletons,e.skeletons),Array.prototype.push.apply(o.animationGroups,e.animationGroups),Array.prototype.push.apply(o.materials,i),Array.prototype.push.apply(o.textures,l),Array.prototype.push.apply(o.lights,e.lights),Array.prototype.push.apply(o.transformNodes,e.transformNodes),Array.prototype.push.apply(o.cameras,u),Array.prototype.push.apply(o.morphTargetManagers,c),o))})}canDirectLoad(e){return u(e)}directLoad(e,r){if(r.startsWith("base64,"+o)||r.startsWith(";base64,"+o)||r.startsWith("application/octet-stream;base64,"+o)||r.startsWith("model/gltf-binary;base64,"+o)){const n=t.DecodeBase64UrlToBinary(r);return this._validate(e,new Uint8Array(n,0,n.byteLength)),this._unpackBinaryAsync(new t.DataReader({readAsync:(e,t)=>c(n,e,t),byteLength:n.byteLength}))}return this._validate(e,r),Promise.resolve({json:this._parseJson(r)})}createPlugin(e){return new b(e[i])}get loaderState(){return this._state}whenCompleteAsync(){return new Promise((e,t)=>{this.onCompleteObservable.addOnce(()=>{e()}),this.onErrorObservable.addOnce(e=>{t(e)})})}_setState(t){this._state!==t&&(this._state=t,this.onLoaderStateChangedObservable.notifyObservers(this._state),this._log(e.GLTFLoaderState[this._state]))}_loadFile(e,t,r,n,a,s){const o=e._loadFile(t,r,e=>{this._onProgress(e,o)},!0,n,a,s);return o.onCompleteObservable.add(()=>{o._lengthComputable=!0,o._total=o._loaded}),this._requests.push(o),o}_onProgress(e,t){if(!this._progressCallback)return;t._lengthComputable=e.lengthComputable,t._loaded=e.loaded,t._total=e.total;let r=!0,n=0,a=0;for(const e of this._requests){if(void 0===e._lengthComputable||void 0===e._loaded||void 0===e._total)return;r=r&&e._lengthComputable,n+=e._loaded,a+=e._total}this._progressCallback({lengthComputable:r,loaded:n,total:r?a:0})}_validate(e,r,n="",s=""){this.validate&&(this._startPerformanceCounter("Validate JSON"),a.ValidateAsync(r,n,s,t=>this.preprocessUrlAsync(n+t,n).then(t=>e._loadFileAsync(t,void 0,!0,!0).then(e=>new Uint8Array(e,0,e.byteLength)))).then(e=>{this._endPerformanceCounter("Validate JSON"),this.onValidatedObservable.notifyObservers(e),this.onValidatedObservable.clear()},e=>{this._endPerformanceCounter("Validate JSON"),t.Tools.Warn(`Failed to validate: ${e.message}`),this.onValidatedObservable.clear()}))}_getLoader(e){const t=e.json.asset||{};this._log(`Asset version: ${t.version}`),t.minVersion&&this._log(`Asset minimum version: ${t.minVersion}`),t.generator&&this._log(`Asset generator: ${t.generator}`);const r=b._parseVersion(t.version);if(!r)throw new Error("Invalid version: "+t.version);if(void 0!==t.minVersion){const e=b._parseVersion(t.minVersion);if(!e)throw new Error("Invalid minimum version: "+t.minVersion);if(b._compareVersion(e,{major:2,minor:0})>0)throw new Error("Incompatible minimum version: "+t.minVersion)}const n={1:b._CreateGLTF1Loader,2:b._CreateGLTF2Loader}[r.major];if(!n)throw new Error("Unsupported version: "+t.version);return n(this)}_parseJson(e){this._startPerformanceCounter("Parse JSON"),this._log(`JSON length: ${e.length}`);const t=JSON.parse(e);return this._endPerformanceCounter("Parse JSON"),t}_unpackBinaryAsync(e){return this._startPerformanceCounter("Unpack Binary"),e.loadAsync(20).then(()=>{const r=e.readUint32();if(1179937895!==r)throw new t.RuntimeError("Unexpected magic: "+r,t.ErrorCodes.GLTFLoaderUnexpectedMagicError);const n=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${n}`);const a=e.readUint32();let s;switch(this.useRangeRequests||a===e.buffer.byteLength||t.Logger.Warn(`Length in header does not match actual data length: ${a} != ${e.buffer.byteLength}`),n){case 1:s=this._unpackBinaryV1Async(e,a);break;case 2:s=this._unpackBinaryV2Async(e,a);break;default:throw new Error("Unsupported version: "+n)}return this._endPerformanceCounter("Unpack Binary"),s})}_unpackBinaryV1Async(e,t){const r=e.readUint32(),n=e.readUint32();if(0!==n)throw new Error(`Unexpected content format: ${n}`);const a=t-e.byteOffset,s={json:this._parseJson(e.readString(r)),bin:null};if(0!==a){const t=e.byteOffset;s.bin={readAsync:(r,n)=>e.buffer.readAsync(t+r,n),byteLength:a}}return Promise.resolve(s)}_unpackBinaryV2Async(e,t){const r=1313821514,n=e.readUint32();if(e.readUint32()!==r)throw new Error("First chunk format is not JSON");return e.byteOffset+n===t?e.loadAsync(n).then(()=>({json:this._parseJson(e.readString(n)),bin:null})):e.loadAsync(n+8).then(()=>{const a={json:this._parseJson(e.readString(n)),bin:null},s=()=>{const n=e.readUint32();switch(e.readUint32()){case r:throw new Error("Unexpected JSON chunk");case 5130562:{const t=e.byteOffset;a.bin={readAsync:(r,n)=>e.buffer.readAsync(t+r,n),byteLength:n},e.skipBytes(n);break}default:e.skipBytes(n)}return e.byteOffset!==t?e.loadAsync(8).then(s):Promise.resolve(a)};return s()})}static _parseVersion(e){if("1.0"===e||"1.0.1"===e)return{major:1,minor:0};const t=(e+"").match(/^(\d+)\.(\d+)/);return t?{major:parseInt(t[1]),minor:parseInt(t[2])}:null}static _compareVersion(e,t){return e.major>t.major?1:e.major<t.major?-1:e.minor>t.minor?1:e.minor<t.minor?-1:0}_logOpen(e){this._log(e),this._logIndentLevel++}_logClose(){--this._logIndentLevel}_logEnabled(e){const r=b._logSpaces.substring(0,2*this._logIndentLevel);t.Logger.Log(`${r}${e}`)}_logDisabled(e){}_startPerformanceCounterEnabled(e){t.Tools.StartPerformanceCounter(e)}_startPerformanceCounterDisabled(e){}_endPerformanceCounterEnabled(e){t.Tools.EndPerformanceCounter(e)}_endPerformanceCounterDisabled(e){}}b.IncrementalLoading=!0,b.HomogeneousCoordinates=!1,b._logSpaces=" ";let y=!1;function v(){y||(y=!0,t.RegisterSceneLoaderPlugin(new b))}v();var T={__proto__:null,GLTFFileLoader:b,get GLTFLoaderAnimationStartMode(){return e.GLTFLoaderAnimationStartMode},get GLTFLoaderCoordinateSystemMode(){return e.GLTFLoaderCoordinateSystemMode},GLTFLoaderDefaultOptions:g,get GLTFLoaderState(){return e.GLTFLoaderState},RegisterGLTFFileLoader:v};const x="undefined"!=typeof global?global:"undefined"!=typeof window?window:void 0;if(void 0!==x){x.BABYLON=x.BABYLON||{};for(const e in T)x.BABYLON[e]=T[e];for(const e in s)x.BABYLON[e]=s[e]}const A=[{regex:new RegExp("^/nodes/\\d+/extensions/")},{regex:new RegExp("^/animations/\\d+/extensions/")},{regex:new RegExp("^/nodes/\\d+/weights")},{regex:new RegExp("^/meshes/\\d+/weights")},{regex:new RegExp("/extensions/KHR_texture_transform/")}];class C{constructor(e,t){this._gltf=e,this._infoTree=t}convert(e){let t,r=this._gltf,n=this._infoTree;if(!e.startsWith("/"))throw new Error("Path must start with a /");const a=e.split("/");if(a.shift(),a[a.length-1].includes(".length")){const e=a[a.length-1].split(".");a.pop(),a.push(...e)}let s=!1;for(const o of a)if("length"===o){if(!n.length)throw n.__array__?new Error(`Path ${e} is invalid - no length accessor`):new Error(`Path ${e} is invalid`);n=n.length,void 0!==r&&(t=r)}else{if(n.__ignoreObjectTree__&&(s=!0),n.__array__)n=n.__array__;else if(n=n[o],!n)throw new Error(`Path ${e} is invalid`);if(n.__passThroughTarget__)s=!0;else if(s){const e=/^\d+$/.test(o)?parseInt(o,10):NaN;if(!isNaN(e)&&"function"==typeof n.get){const t=n;n=Object.assign({},t),n.get=(r,n,...a)=>t.get(r,e,...a),"function"==typeof t.set&&(n.set=(r,n,a,...s)=>t.set(r,n,e,...s)),"function"==typeof t.getTarget&&(n.getTarget=(r,n,...a)=>t.getTarget(r,e,...a))}}else if(void 0===r){if(!A.find(t=>t.regex.test(e)))throw new Error(`Path ${e} is invalid`)}else r=null==r?void 0:r[o];n.__target__&&void 0!==r&&(t=r)}return{object:t,info:n}}}function R(e,r){return{type:"FlowGraphInteger",get:r=>{const n=e(r);return void 0===n?void 0:t.FlowGraphInteger.FromValue(n)},getTarget:r,getPropertyName:[()=>"length"]}}const w={length:R(e=>e.length,e=>e.map(e=>e._babylonTransformNode)),__array__:{__target__:!0,translation:{type:"Vector3",get:e=>{var t;return null===(t=e._babylonTransformNode)||void 0===t?void 0:t.position},set:(e,t)=>{var r;return null===(r=t._babylonTransformNode)||void 0===r?void 0:r.position.copyFrom(e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"position"]},rotation:{type:"Quaternion",get:e=>{var t;return null===(t=e._babylonTransformNode)||void 0===t?void 0:t.rotationQuaternion},set:(e,t)=>{var r,n;return null===(n=null===(r=t._babylonTransformNode)||void 0===r?void 0:r.rotationQuaternion)||void 0===n?void 0:n.copyFrom(e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"rotationQuaternion"]},scale:{type:"Vector3",get:e=>{var t;return null===(t=e._babylonTransformNode)||void 0===t?void 0:t.scaling},set:(e,t)=>{var r;return null===(r=t._babylonTransformNode)||void 0===r?void 0:r.scaling.copyFrom(e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"scaling"]},weights:{__passThroughTarget__:!0,length:R(e=>{const t=E(e);return t?t.mtm.numTargets:void 0!==(null==e?void 0:e.mesh)?0:void 0},e=>null==e?void 0:e._babylonTransformNode),__array__:{__target__:!0,type:"number",get:(e,t)=>{const r=E(e);if(r&&void 0!==t&&t>=0&&t<r.mtm.numTargets)return S(r.mtm.getTarget(t).influence)},set:(e,t,r)=>{var n;const a="number"==typeof e?e:"number"==typeof(null==e?void 0:e.value)?e.value:e,s=E(t);if(!(!s||void 0===r||r<0||r>=s.mtm.numTargets))for(const e of s.meshes){const t=null===(n=e.morphTargetManager)||void 0===n?void 0:n.getTarget(r);t&&(t.influence=a)}},getTarget:(e,t)=>{const r=E(e);return r&&void 0!==t&&t>=0&&t<r.mtm.numTargets?r.mtm.getTarget(t):null==e?void 0:e._babylonTransformNode},getPropertyName:[()=>"influence"]},type:"number[]",get:e=>{const t=E(e);if(!t)return[];const r=[];for(let e=0;e<t.mtm.numTargets;e++)r.push(S(t.mtm.getTarget(e).influence));return r},getTarget:e=>null==e?void 0:e._babylonTransformNode,getPropertyName:[()=>"influence"]},matrix:{type:"Matrix",get:e=>{var r,n,a;return t.Matrix.Compose(null===(r=e._babylonTransformNode)||void 0===r?void 0:r.scaling,null===(n=e._babylonTransformNode)||void 0===n?void 0:n.rotationQuaternion,null===(a=e._babylonTransformNode)||void 0===a?void 0:a.position)},getTarget:e=>e._babylonTransformNode,isReadOnly:!0},globalMatrix:{type:"Matrix",get:e=>{var r,n,a,s,o,i,l;const u=t.Matrix.Identity();let c=e.parent;for(;c&&c.parent;)c=c.parent;const h=(null===(r=e._babylonTransformNode)||void 0===r?void 0:r.position._isDirty)||(null===(a=null===(n=e._babylonTransformNode)||void 0===n?void 0:n.rotationQuaternion)||void 0===a?void 0:a._isDirty)||(null===(s=e._babylonTransformNode)||void 0===s?void 0:s.scaling._isDirty);if(c){const t=null===(o=c._babylonTransformNode)||void 0===o?void 0:o.computeWorldMatrix(!0).invert();t&&(null===(l=null===(i=e._babylonTransformNode)||void 0===i?void 0:i.computeWorldMatrix(h))||void 0===l||l.multiplyToRef(t,u))}else e._babylonTransformNode&&u.copyFrom(e._babylonTransformNode.computeWorldMatrix(h));return u},getTarget:e=>e._babylonTransformNode,isReadOnly:!0},camera:{type:"string",get:e=>void 0!==e.camera?`/cameras/${e.camera}`:"",getTarget:e=>e,isReadOnly:!0},mesh:{type:"string",get:e=>void 0!==e.mesh?`/meshes/${e.mesh}`:"",getTarget:e=>e,isReadOnly:!0},skin:{type:"string",get:e=>void 0!==e.skin?`/skins/${e.skin}`:"",getTarget:e=>e,isReadOnly:!0},parent:{type:"string",get:e=>e.parent&&void 0!==e.parent.index?`/nodes/${e.parent.index}`:"",getTarget:e=>e,isReadOnly:!0},children:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"string",get:e=>"number"==typeof e?`/nodes/${e}`:"",getTarget:()=>({__nodeIndex:!0}),isReadOnly:!0}},extensions:{EXT_lights_ies:{multiplier:{type:"number",get:e=>{var r,n;return null===(n=null===(r=e._babylonTransformNode)||void 0===r?void 0:r.getChildren(e=>e instanceof t.SpotLight,!0)[0])||void 0===n?void 0:n.intensity},getTarget:e=>{var r;return null===(r=e._babylonTransformNode)||void 0===r?void 0:r.getChildren(e=>e instanceof t.SpotLight,!0)[0]},set:(e,r)=>{if(r._babylonTransformNode){const n=r._babylonTransformNode.getChildren(e=>e instanceof t.SpotLight,!0)[0];n&&(n.intensity=e)}}},color:{type:"Color3",get:e=>{var r,n;return null===(n=null===(r=e._babylonTransformNode)||void 0===r?void 0:r.getChildren(e=>e instanceof t.SpotLight,!0)[0])||void 0===n?void 0:n.diffuse},getTarget:e=>{var r;return null===(r=e._babylonTransformNode)||void 0===r?void 0:r.getChildren(e=>e instanceof t.SpotLight,!0)[0]},set:(e,r)=>{if(r._babylonTransformNode){const n=r._babylonTransformNode.getChildren(e=>e instanceof t.SpotLight,!0)[0];n&&(n.diffuse=e)}}}},KHR_node_visibility:{visible:{type:"boolean",get:e=>!!e._primitiveBabylonMeshes&&e._primitiveBabylonMeshes[0].isVisible,getTarget:()=>{},set:(e,t)=>{t._primitiveBabylonMeshes&&t._primitiveBabylonMeshes.forEach(t=>t.isVisible=e)}}}}}},M={length:R(e=>e.length,e=>e.map(e=>e._babylonAnimationGroup)),__array__:{__target__:!0,type:"string",get:e=>e&&"number"==typeof e.index?`/animations/${e.index}`:"",getTarget:e=>e._babylonAnimationGroup,isReadOnly:!0}},O={length:R(e=>e.length,e=>e.map(e=>{var t;return null===(t=e.primitives[0]._instanceData)||void 0===t?void 0:t.babylonSourceMesh})),__array__:{__target__:!0,primitives:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,material:{type:"string",get:e=>void 0!==e.material?`/materials/${e.material}`:"",getTarget:e=>e,isReadOnly:!0}}},weights:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"number",get:e=>e,getTarget:()=>({__weightValue:!0}),isReadOnly:!0}}}};function F(e,t,r,n){const a=L(e);return n?a[r][n]:a[r]}function L(e,r,n){var a,s,o;return null===(o=null===(a=e._data)||void 0===a?void 0:a[null!==(s=null==n?void 0:n.fillMode)&&void 0!==s?s:t.Constants.MATERIAL_TriangleFillMode])||void 0===o?void 0:o.babylonMaterial}function E(e){var t,r,n,a;const s=null==e?void 0:e._babylonTransformNode;if(!s)return;const o=function(e){var t;const r=null==e?void 0:e._babylonTransformNode;if(!r)return;if(r.morphTargetManager)return r.morphTargetManager;const n=e._primitiveBabylonMeshes;if(n)for(const e of n){if(null==e?void 0:e.morphTargetManager)return e.morphTargetManager;if(null===(t=null==e?void 0:e.sourceMesh)||void 0===t?void 0:t.morphTargetManager)return e.sourceMesh.morphTargetManager}}(e);if(o&&e._primitiveBabylonMeshes&&e._primitiveBabylonMeshes.length>0)return{mtm:o,meshes:e._primitiveBabylonMeshes};const i=s.getDescendants(!1);for(const e of i){const s=e,o=null!==(t=s.morphTargetManager)&&void 0!==t?t:null===(r=s.sourceMesh)||void 0===r?void 0:r.morphTargetManager;if(!o)continue;const i=[],l=s.parent;if(l)for(const e of l.getChildMeshes(!0))(null!==(n=e.morphTargetManager)&&void 0!==n?n:null===(a=e.sourceMesh)||void 0===a?void 0:a.morphTargetManager)===o&&i.push(e);return 0===i.length&&i.push(s),{mtm:o,meshes:i}}}function S(e){return Number.isFinite(e)?parseFloat(e.toPrecision(7)):e}function k(e,t,r){if(!e)return;let n=e.extensions;if(!n){if(!r)return;n={},e.extensions=n}let a=n[t.extensionKey];if(!a){if(!r)return;a={},n[t.extensionKey]=a}for(const e of t.texturePath){let t=a[e];if(!t){if(!r)return;t={},a[e]=t}a=t}if(!a.extensions){if(!r)return;a.extensions={}}let s=a.extensions.KHR_texture_transform;if(!s){if(!r)return;s={},a.extensions.KHR_texture_transform=s}return s}function I(e,r,n){return{offset:{componentsCount:2,type:"Vector2",get:(a,s,o)=>{var i,l;const u=F(a,0,e,r);if(u)return new t.Vector2(u.uOffset,u.vOffset);if(n){const e=k(a,n,!1),r=null==e?void 0:e.offset;return new t.Vector2(null!==(i=null==r?void 0:r[0])&&void 0!==i?i:0,null!==(l=null==r?void 0:r[1])&&void 0!==l?l:0)}return new t.Vector2(0,0)},getTarget:L,set:(t,a,s,o)=>{const i=F(a,0,e,r);if(i&&(i.uOffset=t.x,i.vOffset=t.y),n){const e=k(a,n,!0);e&&(e.offset=[t.x,t.y])}},getPropertyName:[()=>`${e}${r?"."+r:""}.uOffset`,()=>`${e}${r?"."+r:""}.vOffset`]},rotation:{type:"number",get:(t,a,s)=>{var o;const i=F(t,0,e,r);if(i)return i.wAng;if(n){const e=k(t,n,!1);return null!==(o=null==e?void 0:e.rotation)&&void 0!==o?o:0}return 0},getTarget:L,set:(t,a,s,o)=>{const i=F(a,0,e,r);if(i&&(i.wAng=t),n){const e=k(a,n,!0);e&&(e.rotation=t)}},getPropertyName:[()=>`${e}${r?"."+r:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(a,s,o)=>{var i,l;const u=F(a,0,e,r);if(u)return new t.Vector2(u.uScale,u.vScale);if(n){const e=k(a,n,!1),r=null==e?void 0:e.scale;return new t.Vector2(null!==(i=null==r?void 0:r[0])&&void 0!==i?i:1,null!==(l=null==r?void 0:r[1])&&void 0!==l?l:1)}return new t.Vector2(1,1)},getTarget:L,set:(t,a,s,o)=>{const i=F(a,0,e,r);if(i&&(i.uScale=t.x,i.vScale=t.y),n){const e=k(a,n,!0);e&&(e.scale=[t.x,t.y])}},getPropertyName:[()=>`${e}${r?"."+r:""}.uScale`,()=>`${e}${r?"."+r:""}.vScale`]}}}const P={scene:{__target__:!0,type:"number",get:e=>null!=e?e:0,getTarget:()=>({__gltfRoot:!0}),isReadOnly:!0,getPropertyName:[()=>"scene"]},cameras:{length:R(e=>e.length,e=>e.map(e=>e._babylonCamera)),__array__:{__target__:!0,orthographic:{xmag:{componentsCount:2,type:"Vector2",get:e=>{var r,n,a,s;return new t.Vector2(null!==(n=null===(r=e._babylonCamera)||void 0===r?void 0:r.orthoLeft)&&void 0!==n?n:0,null!==(s=null===(a=e._babylonCamera)||void 0===a?void 0:a.orthoRight)&&void 0!==s?s:0)},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.orthoLeft=e.x,t._babylonCamera.orthoRight=e.y)},getTarget:e=>e,getPropertyName:[()=>"orthoLeft",()=>"orthoRight"]},ymag:{componentsCount:2,type:"Vector2",get:e=>{var r,n,a,s;return new t.Vector2(null!==(n=null===(r=e._babylonCamera)||void 0===r?void 0:r.orthoBottom)&&void 0!==n?n:0,null!==(s=null===(a=e._babylonCamera)||void 0===a?void 0:a.orthoTop)&&void 0!==s?s:0)},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.orthoBottom=e.x,t._babylonCamera.orthoTop=e.y)},getTarget:e=>e,getPropertyName:[()=>"orthoBottom",()=>"orthoTop"]},zfar:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.maxZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.maxZ=e)},getTarget:e=>e,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.minZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.minZ=e)},getTarget:e=>e,getPropertyName:[()=>"minZ"]}},perspective:{aspectRatio:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.getEngine().getAspectRatio(e._babylonCamera)},getTarget:e=>e,getPropertyName:[()=>"aspectRatio"],isReadOnly:!0},yfov:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.fov},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.fov=e)},getTarget:e=>e,getPropertyName:[()=>"fov"]},zfar:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.maxZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.maxZ=e)},getTarget:e=>e,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.minZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.minZ=e)},getTarget:e=>e,getPropertyName:[()=>"minZ"]}}}},nodes:w,materials:{length:R(e=>e.length,e=>e.map(e=>{var r,n;return null===(n=null===(r=e._data)||void 0===r?void 0:r[t.Constants.MATERIAL_TriangleFillMode])||void 0===n?void 0:n.babylonMaterial})),__array__:{__target__:!0,doubleSided:{type:"boolean",get:(e,t,r)=>{var n;return!(null===(n=L(e,0,r))||void 0===n?void 0:n.backFaceCulling)},set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.backFaceCulling=!e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"backFaceCulling"]},alphaCutoff:{type:"number",get:(e,t,r)=>{var n;return null===(n=L(e,0,r))||void 0===n?void 0:n.alphaCutOff},set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.alphaCutOff=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"alphaCutOff"]},emissiveFactor:{type:"Color3",get:(e,t,r)=>L(e,0,r).emissiveColor,set:(e,t,r,n)=>L(t,0,n).emissiveColor.copyFrom(e),getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"emissiveColor"]},emissiveTexture:{extensions:{KHR_texture_transform:I("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(e,t,r)=>{var n;return null===(n=F(e,0,"bumpTexture"))||void 0===n?void 0:n.level},set:(e,t,r,n)=>{const a=F(t,0,"bumpTexture");a&&(a.level=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:I("bumpTexture")}},occlusionTexture:{strength:{type:"number",get:(e,t,r)=>L(e,0,r).ambientTextureStrength,set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.ambientTextureStrength=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"ambientTextureStrength"]},extensions:{KHR_texture_transform:I("ambientTexture")}},pbrMetallicRoughness:{baseColorFactor:{type:"Color4",get:(e,r,n)=>{const a=L(e,0,n);return t.Color4.FromColor3(a.albedoColor,a.alpha)},set:(e,t,r,n)=>{const a=L(t,0,n);a.albedoColor.set(e.r,e.g,e.b),a.alpha=e.a},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"albedoColor",()=>"alpha"]},baseColorTexture:{extensions:{KHR_texture_transform:I("albedoTexture")}},metallicFactor:{type:"number",get:(e,t,r)=>L(e,0,r).metallic,set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.metallic=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"metallic"]},roughnessFactor:{type:"number",get:(e,t,r)=>L(e,0,r).roughness,set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.roughness=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"roughness"]},metallicRoughnessTexture:{extensions:{KHR_texture_transform:I("metallicTexture")}}},extensions:{KHR_materials_anisotropy:{anisotropyStrength:{type:"number",get:(e,t,r)=>{var n,a;return null===(a=null===(n=L(e,0,r))||void 0===n?void 0:n.anisotropy)||void 0===a?void 0:a.intensity},set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.anisotropy.intensity=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"anisotropy.intensity"]},anisotropyRotation:{type:"number",get:(e,t,r)=>{var n,a;return null===(a=null===(n=L(e,0,r))||void 0===n?void 0:n.anisotropy)||void 0===a?void 0:a.angle},set:(e,t,r,n)=>{const a=L(t,0,n);a&&(a.anisotropy.angle=e)},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"anisotropy.angle"]},anisotropyTexture:{extensions:{KHR_texture_transform:I("anisotropy","texture")}}},KHR_materials_clearcoat:{clearcoatFactor:{type:"number",get:(e,t,r)=>L(e,0,r).clearCoat.intensity,set:(e,t,r,n)=>{L(t,0,n).clearCoat.intensity=e},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"clearCoat.intensity"]},clearcoatRoughnessFactor:{type:"number",get:(e,t,r)=>L(e,0,r).clearCoat.roughness,set:(e,t,r,n)=>{L(t,0,n).clearCoat.roughness=e},getTarget:(e,t,r)=>L(e,0,r),getPropertyName:[()=>"clearCoat.roughness"]},clearcoatTexture:{extensions:{KHR_texture_transform:I("clearCoat","texture")}},clearcoatNormalTexture:{scale:{type:"number",get:(e,t,r)=>{var n;return null===(n=L(e,0,r).clearCoat.bumpTexture)||void 0===n?void 0:n.level},getTarget:L,set:(e,t,r,n)=>L(t,0,n).clearCoat.bumpTexture.level=e},extensions:{KHR_texture_transform:I("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:I("clearCoat","textureRoughness")}}},KHR_materials_dispersion:{dispersion:{type:"number",get:(e,t,r)=>L(e,0,r).subSurface.dispersion,getTarget:L,set:(e,t,r,n)=>L(t,0,n).subSurface.dispersion=e}},KHR_materials_emissive_strength:{emissiveStrength:{type:"number",get:(e,t,r)=>L(e,0,r).emissiveIntensity,getTarget:L,set:(e,t,r,n)=>L(t,0,n).emissiveIntensity=e}},KHR_materials_ior:{ior:{type:"number",get:(e,t,r)=>L(e,0,r).indexOfRefraction,getTarget:L,set:(e,t,r,n)=>L(t,0,n).indexOfRefraction=e}},KHR_materials_iridescence:{iridescenceFactor:{type:"number",get:(e,t,r)=>L(e,0,r).iridescence.intensity,getTarget:L,set:(e,t,r,n)=>L(t,0,n).iridescence.intensity=e},iridescenceIor:{type:"number",get:(e,t,r)=>L(e,0,r).iridescence.indexOfRefraction,getTarget:L,set:(e,t,r,n)=>L(t,0,n).iridescence.indexOfRefraction=e},iridescenceTexture:{extensions:{KHR_texture_transform:I("iridescence","texture")}},iridescenceThicknessMaximum:{type:"number",get:(e,t,r)=>L(e,0,r).iridescence.maximumThickness,getTarget:L,set:(e,t,r,n)=>L(t,0,n).iridescence.maximumThickness=e},iridescenceThicknessMinimum:{type:"number",get:(e,t,r)=>L(e,0,r).iridescence.minimumThickness,getTarget:L,set:(e,t,r,n)=>L(t,0,n).iridescence.minimumThickness=e},iridescenceThicknessTexture:{extensions:{KHR_texture_transform:I("iridescence","thicknessTexture")}}},KHR_materials_sheen:{sheenColorFactor:{type:"Color3",get:(e,t,r)=>L(e,0,r).sheen.color,getTarget:L,set:(e,t,r,n)=>L(t,0,n).sheen.color.copyFrom(e)},sheenColorTexture:{extensions:{KHR_texture_transform:I("sheen","texture")}},sheenRoughnessFactor:{type:"number",get:(e,t,r)=>L(e,0,r).sheen.intensity,getTarget:L,set:(e,t,r,n)=>L(t,0,n).sheen.intensity=e},sheenRoughnessTexture:{extensions:{KHR_texture_transform:I("sheen","textureRoughness")}}},KHR_materials_specular:{specularFactor:{type:"number",get:(e,t,r)=>L(e,0,r).metallicF0Factor,getTarget:L,set:(e,t,r,n)=>L(t,0,n).metallicF0Factor=e,getPropertyName:[()=>"metallicF0Factor"]},specularColorFactor:{type:"Color3",get:(e,t,r)=>L(e,0,r).metallicReflectanceColor,getTarget:L,set:(e,t,r,n)=>L(t,0,n).metallicReflectanceColor.copyFrom(e),getPropertyName:[()=>"metallicReflectanceColor"]},specularTexture:{extensions:{KHR_texture_transform:I("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:I("reflectanceTexture")}}},KHR_materials_transmission:{transmissionFactor:{type:"number",get:(e,t,r)=>L(e,0,r).subSurface.refractionIntensity,getTarget:L,set:(e,t,r,n)=>L(t,0,n).subSurface.refractionIntensity=e,getPropertyName:[()=>"subSurface.refractionIntensity"]},transmissionTexture:{extensions:{KHR_texture_transform:I("subSurface","refractionIntensityTexture",{extensionKey:"KHR_materials_transmission",texturePath:["transmissionTexture"]})}}},KHR_materials_diffuse_transmission:{diffuseTransmissionFactor:{type:"number",get:(e,t,r)=>L(e,0,r).subSurface.translucencyIntensity,getTarget:L,set:(e,t,r,n)=>L(t,0,n).subSurface.translucencyIntensity=e},diffuseTransmissionTexture:{extensions:{KHR_texture_transform:I("subSurface","translucencyIntensityTexture",{extensionKey:"KHR_materials_diffuse_transmission",texturePath:["diffuseTransmissionTexture"]})}},diffuseTransmissionColorFactor:{type:"Color3",get:(e,t,r)=>L(e,0,r).subSurface.translucencyColor,getTarget:L,set:(e,t,r,n)=>{var a;return e&&(null===(a=L(t,0,n).subSurface.translucencyColor)||void 0===a?void 0:a.copyFrom(e))}},diffuseTransmissionColorTexture:{extensions:{KHR_texture_transform:I("subSurface","translucencyColorTexture",{extensionKey:"KHR_materials_diffuse_transmission",texturePath:["diffuseTransmissionColorTexture"]})}}},KHR_materials_volume:{attenuationColor:{type:"Color3",get:(e,t,r)=>L(e,0,r).subSurface.tintColor,getTarget:L,set:(e,t,r,n)=>L(t,0,n).subSurface.tintColor.copyFrom(e)},attenuationDistance:{type:"number",get:(e,t,r)=>L(e,0,r).subSurface.tintColorAtDistance,getTarget:L,set:(e,t,r,n)=>L(t,0,n).subSurface.tintColorAtDistance=e},thicknessFactor:{type:"number",get:(e,t,r)=>L(e,0,r).subSurface.maximumThickness,getTarget:L,set:(e,t,r,n)=>L(t,0,n).subSurface.maximumThickness=e},thicknessTexture:{extensions:{KHR_texture_transform:I("subSurface","thicknessTexture",{extensionKey:"KHR_materials_volume",texturePath:["thicknessTexture"]})}}}}}},extensions:{KHR_lights_punctual:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonLight)),__array__:{__target__:!0,color:{type:"Color3",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.diffuse},set:(e,t)=>{var r;return null===(r=t._babylonLight)||void 0===r?void 0:r.diffuse.copyFrom(e)},getTarget:e=>e._babylonLight,getPropertyName:[e=>"diffuse"]},intensity:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.intensity},set:(e,t)=>t._babylonLight?t._babylonLight.intensity=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"intensity"]},range:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.range},set:(e,t)=>t._babylonLight?t._babylonLight.range=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"range"]},spot:{innerConeAngle:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.innerAngle},set:(e,t)=>t._babylonLight?t._babylonLight.innerAngle=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"innerConeAngle"]},outerConeAngle:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.angle},set:(e,t)=>t._babylonLight?t._babylonLight.angle=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"outerConeAngle"]}}}}},EXT_lights_area:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonLight)),__array__:{__target__:!0,color:{type:"Color3",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.diffuse},set:(e,t)=>{var r;return null===(r=t._babylonLight)||void 0===r?void 0:r.diffuse.copyFrom(e)},getTarget:e=>e._babylonLight,getPropertyName:[e=>"diffuse"]},intensity:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.intensity},set:(e,t)=>t._babylonLight?t._babylonLight.intensity=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"intensity"]},size:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.height},set:(e,t)=>t._babylonLight?t._babylonLight.height=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"size"]},rect:{aspect:{type:"number",get:e=>{var t,r;return(null===(t=e._babylonLight)||void 0===t?void 0:t.width)/(null===(r=e._babylonLight)||void 0===r?void 0:r.height)},set:(e,t)=>t._babylonLight?t._babylonLight.width=e*t._babylonLight.height:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"aspect"]}}}}},EXT_lights_ies:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonLight))}},EXT_lights_image_based:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonTexture)),__array__:{__target__:!0,intensity:{type:"number",get:e=>{var t;return null===(t=e._babylonTexture)||void 0===t?void 0:t.level},set:(e,t)=>{t._babylonTexture&&(t._babylonTexture.level=e)},getTarget:e=>e._babylonTexture},rotation:{type:"Quaternion",get:e=>{var r;return e._babylonTexture&&t.Quaternion.FromRotationMatrix(null===(r=e._babylonTexture)||void 0===r?void 0:r.getReflectionTextureMatrix())},set:(e,r)=>{var n;r._babylonTexture&&((null===(n=r._babylonTexture.getScene())||void 0===n?void 0:n.useRightHandedSystem)||(e=t.Quaternion.Inverse(e)),t.Matrix.FromQuaternionToRef(e,r._babylonTexture.getReflectionTextureMatrix()))},getTarget:e=>e._babylonTexture}}}}},animations:M,meshes:O,scenes:{length:R(e=>e.length,e=>e),__array__:{__target__:!0,nodes:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"string",get:e=>"number"==typeof e?`/nodes/${e}`:"",getTarget:()=>({__nodeIndex:!0}),isReadOnly:!0}}}},skins:{length:R(e=>e.length,e=>e.map(e=>{var t;return null===(t=e._data)||void 0===t?void 0:t.babylonSkeleton})),__array__:{__target__:!0,joints:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"string",get:e=>"number"==typeof e?`/nodes/${e}`:"",getTarget:()=>({__nodeIndex:!0}),isReadOnly:!0}},skeleton:{type:"string",get:e=>{const t=e.skeleton;return"number"==typeof t?`/nodes/${t}`:""},getTarget:e=>e,isReadOnly:!0}}}};function B(e){return new C(e,P)}function N(e){const t=e.split("/").map(e=>e.replace(/{}/g,"__array__"));let r=P;for(const e of t)e&&(r=r[e]);if(r&&r.type&&r.get)return r}function G(e,t){const r=e.split("/").map(e=>e.replace(/{}/g,"__array__"));let n=P;for(const e of r)e&&(n=n[e]);n&&n.type&&n.get&&(n.interpolation=t)}function $(e,t){const r=e.split("/").map(e=>e.replace(/{}/g,"__array__"));let n=P;for(const e of r)if(e){if(!n[e]){if("?"===e){n.__ignoreObjectTree__=!0;continue}n[e]={},"__array__"===e&&(n[e].__target__=!0)}n=n[e]}Object.assign(n,t)}function D(e,t,r,n){return new(r||(r=Promise))(function(a,s){function o(e){try{l(n.next(e))}catch(e){s(e)}}function i(e){try{l(n.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(o,i)}l((n=n.apply(e,t||[])).next())})}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;const V=new Map,H=V;function K(e,r,n){W(e)&&t.Logger.Warn(`Extension with the name '${e}' already exists`),V.set(e,{isGLTFExtension:r,factory:n})}function W(e){return V.delete(e)}const U=new t.Lazy(()=>Promise.resolve(BABYLON)),z=new t.Lazy(()=>Promise.resolve().then(function(){return Pr}));class q{static Get(e,t,r){if(!t||null==r||!t[r])throw new Error(`${e}: Failed to find index (${r})`);return t[r]}static TryGet(e,t){return e&&null!=t&&e[t]?e[t]:null}static Assign(e){if(e)for(let t=0;t<e.length;t++)e[t].index=t}}function j(e){if(e.min&&e.max){const r=e.min,n=e.max,a=t.TmpVectors.Vector3[0].copyFromFloats(r[0],r[1],r[2]),s=t.TmpVectors.Vector3[1].copyFromFloats(n[0],n[1],n[2]);if(e.normalized&&5126!==e.componentType){let t=1;switch(e.componentType){case 5120:t=127;break;case 5121:t=255;break;case 5122:t=32767;break;case 5123:t=65535}const r=1/t;a.scaleInPlace(r),s.scaleInPlace(r)}return new t.BoundingInfo(a,s)}return null}class Y{isMatchingMaterialType(e){if(!e)return!1;const t=Array.from(this._pbrMaterialImpls.values());for(const r of t)if(e instanceof r.materialClass)return!0;return!1}static RegisterExtension(e,t){K(e,!1,t)}static UnregisterExtension(e){return W(e)}get gltf(){if(!this._gltf)throw new Error("glTF JSON is not available");return this._gltf}get bin(){return this._bin}get parent(){return this._parent}get babylonScene(){if(!this._babylonScene)throw new Error("Scene is not available");return this._babylonScene}get rootBabylonMesh(){return this._rootBabylonMesh}get rootUrl(){return this._rootUrl}constructor(e){this._completePromises=new Array,this._assetContainer=null,this._babylonLights=[],this._disableInstancedMesh=0,this._allMaterialsDirtyRequired=!1,this._skipStartAnimationStep=!1,this._extensions=new Array,this._disposed=!1,this._rootUrl=null,this._fileName=null,this._uniqueRootUrl=null,this._bin=null,this._rootBabylonMesh=null,this._defaultBabylonMaterialData={},this._postSceneLoadActions=new Array,this._materialAdapterCache=new WeakMap,this._materialAdapters=new Set,this._pbrMaterialImpls=new Map,this._parent=e}_getOrCreateMaterialAdapter(e){let t=this._materialAdapterCache.get(e);if(!t){const r=Array.from(this._pbrMaterialImpls.values());for(const n of r)if(e instanceof n.materialClass){t=new n.adapterClass(e);break}if(!t)throw new Error("Appropriate material adapter class not found");const n=t;this._materialAdapterCache.set(e,n),this._materialAdapters.add(n)}return t}dispose(){this._disposed||(this._disposed=!0,this._completePromises.length=0,this._extensions.forEach(e=>e.dispose&&e.dispose()),this._extensions.length=0,this._materialAdapters.clear(),this._gltf=null,this._bin=null,this._babylonScene=null,this._rootBabylonMesh=null,this._defaultBabylonMaterialData={},this._postSceneLoadActions.length=0,this._parent.dispose())}importMeshAsync(e,t,r,n,a,s){return D(this,arguments,void 0,function*(e,t,r,n,a,s,o=""){return yield Promise.resolve().then(()=>D(this,void 0,void 0,function*(){this._babylonScene=t,this._assetContainer=r,this._loadData(n);let s=null;if(e){const t={};if(this._gltf.nodes)for(const e of this._gltf.nodes)e.name&&(t[e.name]=e.index);s=(e instanceof Array?e:[e]).map(e=>{const r=t[e];if(void 0===r)throw new Error(`Failed to find node '${e}'`);return r})}return yield this._loadAsync(a,o,s,()=>({meshes:this._getMeshes(),particleSystems:[],skeletons:this._getSkeletons(),animationGroups:this._getAnimationGroups(),lights:this._babylonLights,transformNodes:this._getTransformNodes(),geometries:this._getGeometries(),spriteManagers:[]}))}))})}loadAsync(e,t,r,n){return D(this,arguments,void 0,function*(e,t,r,n,a=""){return this._babylonScene=e,this._loadData(t),yield this._loadAsync(r,a,null,()=>{})})}_loadAsync(r,n,a,s){return D(this,void 0,void 0,function*(){return yield Promise.resolve().then(()=>D(this,void 0,void 0,function*(){var o;if(this._rootUrl=r,this._uniqueRootUrl=!r.startsWith("file:")&&n?r:`${r}${t.RandomGUID()}/`,this._fileName=n,this._allMaterialsDirtyRequired=!1,yield this._loadExtensionsAsync(),!this.parent.skipMaterials){const e=this.parent.useOpenPBR||this.isExtensionUsed("KHR_materials_openpbr");let t=!1;this.parent.useOpenPBR?(null===(o=this._gltf.materials)||void 0===o?void 0:o.length)&&this._gltf.materials.some(e=>{var t;return!(null===(t=e.extensions)||void 0===t?void 0:t.KHR_materials_openpbr)})&&(t=!0):t=!0;const r=[];e&&!this._pbrMaterialImpls.has("openpbr")&&r.push(Promise.all([Promise.resolve(BABYLON),Promise.resolve().then(function(){return fa})]).then(([{OpenPBRMaterial:e,RegisterOpenpbrMaterial:t},{OpenPBRMaterialLoadingAdapter:r}])=>{t(),this._pbrMaterialImpls.set("openpbr",{materialClass:e,adapterClass:r})})),t&&!this._pbrMaterialImpls.has("pbr")&&r.push(Promise.all([Promise.resolve(BABYLON),Promise.resolve().then(function(){return ya})]).then(([{PBRMaterial:e,RegisterPbrMaterial:t},{PBRMaterialLoadingAdapter:r}])=>{t(),this._pbrMaterialImpls.set("pbr",{materialClass:e,adapterClass:r})})),yield Promise.all(r)}const i=`${e.GLTFLoaderState[e.GLTFLoaderState.LOADING]} => ${e.GLTFLoaderState[e.GLTFLoaderState.READY]}`,l=`${e.GLTFLoaderState[e.GLTFLoaderState.LOADING]} => ${e.GLTFLoaderState[e.GLTFLoaderState.COMPLETE]}`;this._parent._startPerformanceCounter(i),this._parent._startPerformanceCounter(l),this._parent._setState(e.GLTFLoaderState.LOADING),this._extensionsOnLoading();const u=new Array,c=this._babylonScene.blockMaterialDirtyMechanism;if(this._babylonScene.blockMaterialDirtyMechanism=!0,!this.parent.loadOnlyMaterials)if(a)u.push(this.loadSceneAsync("/nodes",{nodes:a,index:-1}));else if(null!=this._gltf.scene||this._gltf.scenes&&this._gltf.scenes[0]){const e=q.Get("/scene",this._gltf.scenes,this._gltf.scene||0);u.push(this.loadSceneAsync(`/scenes/${e.index}`,e))}if(!this.parent.skipMaterials&&this.parent.loadAllMaterials&&this._gltf.materials)for(let e=0;e<this._gltf.materials.length;++e){const r=this._gltf.materials[e],n="/materials/"+e,a=t.Material.TriangleFillMode;u.push(this._loadMaterialAsync(n,r,null,a,()=>{}))}this._allMaterialsDirtyRequired?this._babylonScene.blockMaterialDirtyMechanism=c:this._babylonScene._forceBlockMaterialDirtyMechanism(c),this._parent.compileMaterials&&u.push(this._compileMaterialsAsync()),this._parent.compileShadowGenerators&&u.push(this._compileShadowGeneratorsAsync());const h=Promise.all(u).then(()=>{this._rootBabylonMesh&&this._rootBabylonMesh!==this._parent.customRootNode&&this._rootBabylonMesh.setEnabled(!0);for(const e of this._babylonScene.materials){const t=e;void 0!==t.maxSimultaneousLights&&(t.maxSimultaneousLights=Math.max(t.maxSimultaneousLights,this._babylonScene.lights.length))}for(const e of Array.from(this._materialAdapters))this._completePromises.push(e.finalizeAsync(this));return this._extensionsOnReady(),this._parent._setState(e.GLTFLoaderState.READY),this._skipStartAnimationStep||this._startAnimations(),s()});return yield h.then(r=>(this._parent._endPerformanceCounter(i),t.Tools.SetImmediate(()=>{this._disposed||Promise.all(this._completePromises).then(()=>{this._parent._endPerformanceCounter(l),this._parent._setState(e.GLTFLoaderState.COMPLETE),this._parent.onCompleteObservable.notifyObservers(void 0),this._parent.onCompleteObservable.clear(),this.dispose()},e=>{this._parent.onErrorObservable.notifyObservers(e),this._parent.onErrorObservable.clear(),this.dispose()})}),r))})).catch(e=>{throw this._disposed||(this._parent.onErrorObservable.notifyObservers(e),this._parent.onErrorObservable.clear(),this.dispose()),e})})}_loadData(e){if(this._gltf=e.json,this._setupData(),e.bin){const r=this._gltf.buffers;if(r&&r[0]&&!r[0].uri){const n=r[0];(n.byteLength<e.bin.byteLength-3||n.byteLength>e.bin.byteLength)&&t.Logger.Warn(`Binary buffer length (${n.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else t.Logger.Warn("Unexpected BIN chunk")}}_setupData(){if(q.Assign(this._gltf.accessors),q.Assign(this._gltf.animations),q.Assign(this._gltf.buffers),q.Assign(this._gltf.bufferViews),q.Assign(this._gltf.cameras),q.Assign(this._gltf.images),q.Assign(this._gltf.materials),q.Assign(this._gltf.meshes),q.Assign(this._gltf.nodes),q.Assign(this._gltf.samplers),q.Assign(this._gltf.scenes),q.Assign(this._gltf.skins),q.Assign(this._gltf.textures),this._gltf.nodes){const e={};for(const t of this._gltf.nodes)if(t.children)for(const r of t.children)e[r]=t.index;const t=this._createRootNode();for(const r of this._gltf.nodes){const n=e[r.index];r.parent=void 0===n?t:this._gltf.nodes[n]}}}_loadExtensionsAsync(){return D(this,void 0,void 0,function*(){var e;const r=[];if(H.forEach((e,n)=>{var a;!1===(null===(a=this.parent.extensionOptions[n])||void 0===a?void 0:a.enabled)?e.isGLTFExtension&&this.isExtensionUsed(n)&&t.Logger.Warn(`Extension ${n} is used but has been explicitly disabled.`):e.isGLTFExtension&&!this.isExtensionUsed(n)||r.push((()=>D(this,void 0,void 0,function*(){const r=yield e.factory(this);return r.name!==n&&t.Logger.Warn(`The name of the glTF loader extension instance does not match the registered name: ${r.name} !== ${n}`),this._parent.onExtensionLoadedObservable.notifyObservers(r),r}))())}),this._extensions.push(...yield Promise.all(r)),this._extensions.sort((e,t)=>(e.order||Number.MAX_VALUE)-(t.order||Number.MAX_VALUE)),this._parent.onExtensionLoadedObservable.clear(),this._gltf.extensionsRequired)for(const t of this._gltf.extensionsRequired)if(!this._extensions.some(e=>e.name===t&&e.enabled)){if(!1===(null===(e=this.parent.extensionOptions[t])||void 0===e?void 0:e.enabled))throw new Error(`Required extension ${t} is disabled`);throw new Error(`Required extension ${t} is not available`)}})}_createRootNode(){if(void 0!==this._parent.customRootNode)return this._rootBabylonMesh=this._parent.customRootNode,{_babylonTransformNode:null===this._rootBabylonMesh?void 0:this._rootBabylonMesh,index:-1};this._babylonScene._blockEntityCollection=!!this._assetContainer;const r=new t.Mesh("__root__",this._babylonScene);this._rootBabylonMesh=r,this._rootBabylonMesh._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._rootBabylonMesh.setEnabled(!1);const n={_babylonTransformNode:this._rootBabylonMesh,index:-1};switch(this._parent.coordinateSystemMode){case e.GLTFLoaderCoordinateSystemMode.AUTO:this._babylonScene.useRightHandedSystem||(n.rotation=[0,1,0,0],n.scale=[1,1,-1],Y._LoadTransform(n,this._rootBabylonMesh));break;case e.GLTFLoaderCoordinateSystemMode.FORCE_RIGHT_HANDED:this._babylonScene.useRightHandedSystem=!0;break;default:throw new Error(`Invalid coordinate system mode (${this._parent.coordinateSystemMode})`)}return this._parent.onMeshLoadedObservable.notifyObservers(r),n}loadSceneAsync(e,t){const r=this._extensionsLoadSceneAsync(e,t);if(r)return r;const n=new Array;if(this.logOpen(`${e} ${t.name||""}`),t.nodes)for(const r of t.nodes){const t=q.Get(`${e}/nodes/${r}`,this._gltf.nodes,r);n.push(this.loadNodeAsync(`/nodes/${t.index}`,t,e=>{e.parent=this._rootBabylonMesh}))}for(const e of this._postSceneLoadActions)e();return n.push(this._loadAnimationsAsync()),this.logClose(),Promise.all(n).then(()=>{})}_forEachPrimitive(e,t){if(e._primitiveBabylonMeshes)for(const r of e._primitiveBabylonMeshes)t(r)}_getGeometries(){const e=[],t=this._gltf.nodes;if(t)for(const r of t)this._forEachPrimitive(r,t=>{const r=t.geometry;r&&-1===e.indexOf(r)&&e.push(r)});return e}_getMeshes(){const e=[];this._rootBabylonMesh instanceof t.AbstractMesh&&e.push(this._rootBabylonMesh);const r=this._gltf.nodes;if(r)for(const t of r)this._forEachPrimitive(t,t=>{e.push(t)});return e}_getTransformNodes(){const e=[],t=this._gltf.nodes;if(t)for(const r of t)r._babylonTransformNode&&"TransformNode"===r._babylonTransformNode.getClassName()&&e.push(r._babylonTransformNode),r._babylonTransformNodeForSkin&&e.push(r._babylonTransformNodeForSkin);return e}_getSkeletons(){const e=[],t=this._gltf.skins;if(t)for(const r of t)r._data&&e.push(r._data.babylonSkeleton);return e}_getAnimationGroups(){const e=[],t=this._gltf.animations;if(t)for(const r of t)r._babylonAnimationGroup&&e.push(r._babylonAnimationGroup);return e}_startAnimations(){switch(this._parent.animationStartMode){case e.GLTFLoaderAnimationStartMode.NONE:break;case e.GLTFLoaderAnimationStartMode.FIRST:{const e=this._getAnimationGroups();0!==e.length&&e[0].start(!0);break}case e.GLTFLoaderAnimationStartMode.ALL:{const e=this._getAnimationGroups();for(const t of e)t.start(!0);break}default:return void t.Logger.Error(`Invalid animation start mode (${this._parent.animationStartMode})`)}}loadNodeAsync(e,r,n=()=>{}){const a=this._extensionsLoadNodeAsync(e,r,n);if(a)return a;if(r._babylonTransformNode)throw new Error(`${e}: Invalid recursive node hierarchy`);const s=new Array;this.logOpen(`${e} ${r.name||""}`);const o=t=>{if(Y.AddPointerMetadata(t,e),Y._LoadTransform(r,t),null!=r.camera){const n=q.Get(`${e}/camera`,this._gltf.cameras,r.camera);s.push(this.loadCameraAsync(`/cameras/${n.index}`,n,e=>{e.parent=t,this._babylonScene.useRightHandedSystem||(t.scaling.x=-1)}))}if(r.children)for(const n of r.children){const r=q.Get(`${e}/children/${n}`,this._gltf.nodes,n);s.push(this.loadNodeAsync(`/nodes/${r.index}`,r,e=>{e.parent=t}))}n(t)},i=null!=r.mesh,l=this._parent.loadSkins&&null!=r.skin;if(!i||l){const e=r.name||`node${r.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;const n=new t.TransformNode(e,this._babylonScene);n._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,null==r.mesh?r._babylonTransformNode=n:r._babylonTransformNodeForSkin=n,o(n)}if(i)if(l){const n=q.Get(`${e}/mesh`,this._gltf.meshes,r.mesh);s.push(this._loadMeshAsync(`/meshes/${n.index}`,r,n,n=>{const a=r._babylonTransformNodeForSkin;n.metadata=t.deepMerge(a.metadata,n.metadata||{});const o=q.Get(`${e}/skin`,this._gltf.skins,r.skin);s.push(this._loadSkinAsync(`/skins/${o.index}`,r,o,e=>{this._forEachPrimitive(r,t=>{t.skeleton=e}),this._postSceneLoadActions.push(()=>{if(null!=o.skeleton){const e=q.Get(`/skins/${o.index}/skeleton`,this._gltf.nodes,o.skeleton).parent;r.index===e.index?n.parent=a.parent:n.parent=e._babylonTransformNode}else n.parent=this._rootBabylonMesh;this._parent.onSkinLoadedObservable.notifyObservers({node:a,skinnedNode:n})})}))}))}else{const t=q.Get(`${e}/mesh`,this._gltf.meshes,r.mesh);s.push(this._loadMeshAsync(`/meshes/${t.index}`,r,t,o))}return this.logClose(),Promise.all(s).then(()=>(this._forEachPrimitive(r,e=>{const t=e;!t.isAnInstance&&t.geometry&&t.geometry.useBoundingInfoFromGeometry?e._updateBoundingInfo():e.refreshBoundingInfo(!0,!0)}),r._babylonTransformNode))}_loadMeshAsync(e,r,n,a){const s=n.primitives;if(!s||!s.length)throw new Error(`${e}: Primitives are missing`);null==s[0].index&&q.Assign(s);const o=new Array;this.logOpen(`${e} ${n.name||""}`);const i=r.name||`node${r.index}`;if(1===s.length){const t=n.primitives[0];o.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${t.index}`,i,r,n,t,e=>{r._babylonTransformNode=e,r._primitiveBabylonMeshes=[e]}))}else{this._babylonScene._blockEntityCollection=!!this._assetContainer,r._babylonTransformNode=new t.TransformNode(i,this._babylonScene),r._babylonTransformNode._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,r._primitiveBabylonMeshes=[];for(const t of s)o.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${t.index}`,`${i}_primitive${t.index}`,r,n,t,e=>{e.parent=r._babylonTransformNode,r._primitiveBabylonMeshes.push(e)}))}return a(r._babylonTransformNode),this.logClose(),Promise.all(o).then(()=>r._babylonTransformNode)}_loadMeshPrimitiveAsync(e,r,n,a,s,o){const i=this._extensionsLoadMeshPrimitiveAsync(e,r,n,a,s,o);if(i)return i;this.logOpen(`${e}`);const l=0===this._disableInstancedMesh&&this._parent.createInstances&&null==n.skin&&!a.primitives[0].targets;let u,c;if(l&&s._instanceData)this._babylonScene._blockEntityCollection=!!this._assetContainer,u=s._instanceData.babylonSourceMesh.createInstance(r),u._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,c=s._instanceData.promise;else{const o=new Array;this._babylonScene._blockEntityCollection=!!this._assetContainer;const i=new t.Mesh(r,this._babylonScene);if(i._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,i.sideOrientation=this._babylonScene.useRightHandedSystem?t.Material.CounterClockWiseSideOrientation:t.Material.ClockWiseSideOrientation,this._createMorphTargets(e,n,a,s,i),o.push(this._loadVertexDataAsync(e,s,i).then(t=>D(this,void 0,void 0,function*(){return yield this._loadMorphTargetsAsync(e,s,i,t).then(()=>{this._disposed||(this._babylonScene._blockEntityCollection=!!this._assetContainer,t.applyToMesh(i),t._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1)})}))),!this.parent.skipMaterials){const t=Y._GetDrawMode(e,s.mode);if(null==s.material){let e=this._defaultBabylonMaterialData[t];e||(e=this._createDefaultMaterial("__GLTFLoader._default",t,this._getDefaultImpl()),this._parent.onMaterialLoadedObservable.notifyObservers(e),this._defaultBabylonMaterialData[t]=e),i.material=e}else{const r=q.Get(`${e}/material`,this._gltf.materials,s.material);o.push(this._loadMaterialAsync(`/materials/${r.index}`,r,i,t,e=>{i.material=e}))}}c=Promise.all(o),l&&(s._instanceData={babylonSourceMesh:i,promise:c}),u=i}return Y.AddPointerMetadata(u,e),this._parent.onMeshLoadedObservable.notifyObservers(u),o(u),this.logClose(),c.then(()=>u)}_loadVertexDataAsync(e,r,n){const a=this._extensionsLoadVertexDataAsync(e,r,n);if(a)return a;const s=r.attributes;if(!s)throw new Error(`${e}: Attributes are missing`);const o=new Array,i=new t.Geometry(n.name,this._babylonScene);if(null==r.indices)n.isUnIndexed=!0;else{const t=q.Get(`${e}/indices`,this._gltf.accessors,r.indices);o.push(this._loadIndicesAccessorAsync(`/accessors/${t.index}`,t).then(e=>{i.setIndices(e)}))}const l=(r,a,l)=>{if(null==s[r])return;n._delayInfo=n._delayInfo||[],-1===n._delayInfo.indexOf(a)&&n._delayInfo.push(a);const u=q.Get(`${e}/attributes/${r}`,this._gltf.accessors,s[r]);o.push(this._loadVertexAccessorAsync(`/accessors/${u.index}`,u,a).then(e=>{if(e.getKind()===t.VertexBuffer.PositionKind&&!this.parent.alwaysComputeBoundingBox&&!n.skeleton){const e=j(u);e&&(i._boundingInfo=e,i.useBoundingInfoFromGeometry=!0)}i.setVerticesBuffer(e,u.count)})),a==t.VertexBuffer.MatricesIndicesExtraKind&&(n.numBoneInfluencers=8),l&&l(u)};return l("POSITION",t.VertexBuffer.PositionKind),l("NORMAL",t.VertexBuffer.NormalKind),l("TANGENT",t.VertexBuffer.TangentKind),l("TEXCOORD_0",t.VertexBuffer.UVKind),l("TEXCOORD_1",t.VertexBuffer.UV2Kind),l("TEXCOORD_2",t.VertexBuffer.UV3Kind),l("TEXCOORD_3",t.VertexBuffer.UV4Kind),l("TEXCOORD_4",t.VertexBuffer.UV5Kind),l("TEXCOORD_5",t.VertexBuffer.UV6Kind),l("JOINTS_0",t.VertexBuffer.MatricesIndicesKind),l("WEIGHTS_0",t.VertexBuffer.MatricesWeightsKind),l("JOINTS_1",t.VertexBuffer.MatricesIndicesExtraKind),l("WEIGHTS_1",t.VertexBuffer.MatricesWeightsExtraKind),l("COLOR_0",t.VertexBuffer.ColorKind,e=>{"VEC4"===e.type&&(n.hasVertexAlpha=!0)}),Promise.all(o).then(()=>i)}_createMorphTargets(e,r,n,a,s){if(!a.targets||!this._parent.loadMorphTargets)return;if(null==r._numMorphTargets)r._numMorphTargets=a.targets.length;else if(a.targets.length!==r._numMorphTargets)throw new Error(`${e}: Primitives do not have the same number of targets`);const o=n.extras?n.extras.targetNames:null;this._babylonScene._blockEntityCollection=!!this._assetContainer,s.morphTargetManager=new t.MorphTargetManager(this._babylonScene),s.morphTargetManager._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,s.morphTargetManager.areUpdatesFrozen=!0;for(let e=0;e<a.targets.length;e++){const a=r.weights?r.weights[e]:n.weights?n.weights[e]:0,i=o?o[e]:`morphTarget${e}`;s.morphTargetManager.addTarget(new t.MorphTarget(i,a,s.getScene()))}}_loadMorphTargetsAsync(e,r,n,a){if(!r.targets||!this._parent.loadMorphTargets)return Promise.resolve();const s=new Array,o=n.morphTargetManager;for(let t=0;t<o.numTargets;t++){const n=o.getTarget(t);s.push(this._loadMorphTargetVertexDataAsync(`${e}/targets/${t}`,a,r.targets[t],n))}return Promise.all(s).then(()=>{o.areUpdatesFrozen=!1,this._parent.useMaxMorphTargetInfluencers&&(o.isUsingTextureForTargets||o.numTargets<=t.MorphTargetManager.MaxActiveMorphTargetsInVertexAttributeMode)&&(o.optimizeInfluencers=!1,o.numMaxInfluencers=o.numTargets)})}_loadMorphTargetVertexDataAsync(e,r,n,a){return D(this,void 0,void 0,function*(){const s=new Array,o=(t,a,o)=>{if(null==n[t])return;const i=r.getVertexBuffer(a);if(!i)return;const l=q.Get(`${e}/${t}`,this._gltf.accessors,n[t]);s.push(this._loadFloatAccessorAsync(`/accessors/${l.index}`,l).then(e=>{o(i,e)}))};return o("POSITION",t.VertexBuffer.PositionKind,(e,t)=>{const r=new Float32Array(t.length);e.forEach(t.length,(e,n)=>{r[n]=t[n]+e}),a.setPositions(r)}),o("NORMAL",t.VertexBuffer.NormalKind,(e,t)=>{const r=new Float32Array(t.length);e.forEach(r.length,(e,n)=>{r[n]=t[n]+e}),a.setNormals(r)}),o("TANGENT",t.VertexBuffer.TangentKind,(e,t)=>{const r=new Float32Array(t.length/3*4);let n=0;e.forEach(t.length/3*4,(e,a)=>{(a+1)%4!=0&&(r[n]=t[n]+e,n++)}),a.setTangents(r)}),o("TEXCOORD_0",t.VertexBuffer.UVKind,(e,t)=>{const r=new Float32Array(t.length);e.forEach(t.length,(e,n)=>{r[n]=t[n]+e}),a.setUVs(r)}),o("TEXCOORD_1",t.VertexBuffer.UV2Kind,(e,t)=>{const r=new Float32Array(t.length);e.forEach(t.length,(e,n)=>{r[n]=t[n]+e}),a.setUV2s(r)}),o("COLOR_0",t.VertexBuffer.ColorKind,(t,r)=>{let n=null;const s=t.getSize();if(3===s){n=new Float32Array(r.length/3*4),t.forEach(r.length,(e,t)=>{const a=Math.floor(t/3),s=t%3;n[4*a+s]=r[3*a+s]+e});for(let e=0;e<r.length/3;++e)n[4*e+3]=1}else{if(4!==s)throw new Error(`${e}: Invalid number of components (${s}) for COLOR_0 attribute`);n=new Float32Array(r.length),t.forEach(r.length,(e,t)=>{n[t]=r[t]+e})}a.setColors(n)}),yield Promise.all(s).then(()=>{})})}static _LoadTransform(e,r){if(null!=e.skin)return;let n=t.Vector3.Zero(),a=t.Quaternion.Identity(),s=t.Vector3.One();e.matrix?t.Matrix.FromArray(e.matrix).decompose(s,a,n):(e.translation&&(n=t.Vector3.FromArray(e.translation)),e.rotation&&(a=t.Quaternion.FromArray(e.rotation)),e.scale&&(s=t.Vector3.FromArray(e.scale))),r.position=n,r.rotationQuaternion=a,r.scaling=s}_loadSkinAsync(e,r,n,a){if(!this._parent.loadSkins)return Promise.resolve();const s=this._extensionsLoadSkinAsync(e,r,n);if(s)return s;if(n._data)return a(n._data.babylonSkeleton),n._data.promise;const o=`skeleton${n.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;const i=new t.Skeleton(n.name||o,o,this._babylonScene);i._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._loadBones(e,n,i);const l=this._loadSkinInverseBindMatricesDataAsync(e,n).then(e=>{this._updateBoneMatrices(i,e)});return n._data={babylonSkeleton:i,promise:l},a(i),l}_loadBones(e,r,n){if(null==r.skeleton||this._parent.alwaysComputeSkeletonRootNode){const n=this._findSkeletonRootNode(`${e}/joints`,r.joints);if(n)if(void 0===r.skeleton)r.skeleton=n.index;else{const a=(e,t)=>{for(;t.parent;t=t.parent)if(t.parent===e)return!0;return!1},s=q.Get(`${e}/skeleton`,this._gltf.nodes,r.skeleton);s===n||a(s,n)||(t.Logger.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),r.skeleton=n.index)}else t.Logger.Warn(`${e}: Failed to find common root`)}const a={};for(const t of r.joints){const s=q.Get(`${e}/joints/${t}`,this._gltf.nodes,t);this._loadBone(s,r,n,a)}}_findSkeletonRootNode(e,t){if(0===t.length)return null;const r={};for(const n of t){const t=[];let a=q.Get(`${e}/${n}`,this._gltf.nodes,n);for(;-1!==a.index;)t.unshift(a),a=a.parent;r[n]=t}let n=null;for(let e=0;;++e){let a=r[t[0]];if(e>=a.length)return n;const s=a[e];for(let o=1;o<t.length;++o)if(a=r[t[o]],e>=a.length||s!==a[e])return n;n=s}}_loadBone(e,r,n,a){e._isJoint=!0;let s=a[e.index];if(s)return s;let o=null;e.index!==r.skeleton&&(e.parent&&-1!==e.parent.index?o=this._loadBone(e.parent,r,n,a):void 0!==r.skeleton&&t.Logger.Warn(`/skins/${r.index}/skeleton: Skeleton node is not a common root`));const i=r.joints.indexOf(e.index);return s=new t.Bone(e.name||`joint${e.index}`,n,o,this._getNodeMatrix(e),null,null,i),a[e.index]=s,this._postSceneLoadActions.push(()=>{s.linkTransformNode(e._babylonTransformNode)}),s}_loadSkinInverseBindMatricesDataAsync(e,t){if(null==t.inverseBindMatrices)return Promise.resolve(null);const r=q.Get(`${e}/inverseBindMatrices`,this._gltf.accessors,t.inverseBindMatrices);return this._loadFloatAccessorAsync(`/accessors/${r.index}`,r)}_updateBoneMatrices(e,r){for(const n of e.bones){const e=t.Matrix.Identity(),a=n._index;r&&-1!==a&&(t.Matrix.FromArrayToRef(r,16*a,e),e.invertToRef(e));const s=n.getParent();s&&e.multiplyToRef(s.getAbsoluteInverseBindMatrix(),e),n.updateMatrix(e,!1,!1),n._updateAbsoluteBindMatrices(void 0,!1)}}_getNodeMatrix(e){return e.matrix?t.Matrix.FromArray(e.matrix):t.Matrix.Compose(e.scale?t.Vector3.FromArray(e.scale):t.Vector3.One(),e.rotation?t.Quaternion.FromArray(e.rotation):t.Quaternion.Identity(),e.translation?t.Vector3.FromArray(e.translation):t.Vector3.Zero())}loadCameraAsync(e,r,n=()=>{}){const a=this._extensionsLoadCameraAsync(e,r,n);if(a)return a;const s=new Array;this.logOpen(`${e} ${r.name||""}`),this._babylonScene._blockEntityCollection=!!this._assetContainer;const o=new t.FreeCamera(r.name||`camera${r.index}`,t.Vector3.Zero(),this._babylonScene,!1);switch(o._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,r._babylonCamera=o,o.setTarget(new t.Vector3(0,0,-1)),r.type){case"perspective":{const t=r.perspective;if(!t)throw new Error(`${e}: Camera perspective properties are missing`);o.fov=t.yfov,o.minZ=t.znear,o.maxZ=t.zfar||0;break}case"orthographic":if(!r.orthographic)throw new Error(`${e}: Camera orthographic properties are missing`);o.mode=t.Camera.ORTHOGRAPHIC_CAMERA,o.orthoLeft=-r.orthographic.xmag,o.orthoRight=r.orthographic.xmag,o.orthoBottom=-r.orthographic.ymag,o.orthoTop=r.orthographic.ymag,o.minZ=r.orthographic.znear,o.maxZ=r.orthographic.zfar;break;default:throw new Error(`${e}: Invalid camera type (${r.type})`)}return Y.AddPointerMetadata(o,e),this._parent.onCameraLoadedObservable.notifyObservers(o),n(o),this.logClose(),Promise.all(s).then(()=>o)}_loadAnimationsAsync(){this._parent._startPerformanceCounter("Load animations");const e=this._gltf.animations;if(!e)return Promise.resolve();const t=new Array;for(let r=0;r<e.length;r++){const n=e[r];t.push(this.loadAnimationAsync(`/animations/${n.index}`,n).then(e=>{0===e.targetedAnimations.length&&e.dispose()}))}return Promise.all(t).then(()=>{this._parent._endPerformanceCounter("Load animations")})}loadAnimationAsync(e,t){this._parent._startPerformanceCounter("Load animation");return this._extensionsLoadAnimationAsync(e,t)||U.value.then(({AnimationGroup:r})=>{this._babylonScene._blockEntityCollection=!!this._assetContainer;const n=new r(t.name||`animation${t.index}`,this._babylonScene);n._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._babylonAnimationGroup=n;const a=new Array;q.Assign(t.channels),q.Assign(t.samplers);for(const r of t.channels)a.push(this._loadAnimationChannelAsync(`${e}/channels/${r.index}`,e,t,r,(e,t)=>{e.animations=e.animations||[],e.animations.push(t),n.addTargetedAnimation(t,e)}));return this._parent._endPerformanceCounter("Load animation"),Promise.all(a).then(()=>(n.normalize(0),n))})}_loadAnimationChannelAsync(e,t,r,n,a){const s=this._extensionsLoadAnimationChannelAsync(e,t,r,n,a);if(s)return s;if(null==n.target.node)return Promise.resolve();const o=q.Get(`${e}/target/node`,this._gltf.nodes,n.target.node),i=n.target.path,l="weights"===i;return l&&!o._numMorphTargets||!l&&!o._babylonTransformNode?Promise.resolve():this._parent.loadNodeAnimations||l||o._isJoint?z.value.then(({RegisterGLTFLoaderAnimation:s})=>{var l,u,c,h;let d;switch(s(),i){case"translation":d=null===(l=N("/nodes/{}/translation"))||void 0===l?void 0:l.interpolation;break;case"rotation":d=null===(u=N("/nodes/{}/rotation"))||void 0===u?void 0:u.interpolation;break;case"scale":d=null===(c=N("/nodes/{}/scale"))||void 0===c?void 0:c.interpolation;break;case"weights":d=null===(h=N("/nodes/{}/weights"))||void 0===h?void 0:h.interpolation;break;default:throw new Error(`${e}/target/path: Invalid value (${n.target.path})`)}if(!d)throw new Error(`${e}/target/path: Could not find interpolation properties for target path (${n.target.path})`);const m={object:o,info:d};return this._loadAnimationChannelFromTargetInfoAsync(e,t,r,n,m,a)}):Promise.resolve()}_loadAnimationChannelFromTargetInfoAsync(e,t,r,n,a,s){const o=this.parent.targetFps,i=1/o,l=q.Get(`${e}/sampler`,r.samplers,n.sampler);return this._loadAnimationSamplerAsync(`${t}/samplers/${n.sampler}`,l).then(e=>{let t=0;const l=a.object,u=a.info;for(const a of u){const u=a.getStride(l),c=e.input,h=e.output,d=new Array(c.length);let m=0;switch(e.interpolation){case"STEP":for(let e=0;e<c.length;e++){const t=a.getValue(l,h,m,1);m+=u,d[e]={frame:c[e]*o,value:t,interpolation:1}}break;case"CUBICSPLINE":for(let e=0;e<c.length;e++){const t=a.getValue(l,h,m,i);m+=u;const r=a.getValue(l,h,m,1);m+=u;const n=a.getValue(l,h,m,i);m+=u,d[e]={frame:c[e]*o,inTangent:t,value:r,outTangent:n}}break;case"LINEAR":for(let e=0;e<c.length;e++){const t=a.getValue(l,h,m,1);m+=u,d[e]={frame:c[e]*o,value:t}}}if(m>0){const e=`${r.name||`animation${r.index}`}_channel${n.index}_${t}`,i=a.buildAnimations(l,e,o,d);for(const e of i)t++,s(e.babylonAnimatable,e.babylonAnimation)}}})}_loadAnimationSamplerAsync(e,t){if(t._data)return t._data;const r=t.interpolation||"LINEAR";switch(r){case"STEP":case"LINEAR":case"CUBICSPLINE":break;default:throw new Error(`${e}/interpolation: Invalid value (${t.interpolation})`)}const n=q.Get(`${e}/input`,this._gltf.accessors,t.input),a=q.Get(`${e}/output`,this._gltf.accessors,t.output);return t._data=Promise.all([this._loadFloatAccessorAsync(`/accessors/${n.index}`,n),this._loadFloatAccessorAsync(`/accessors/${a.index}`,a)]).then(([e,t])=>({input:e,interpolation:r,output:t})),t._data}loadBufferAsync(e,t,r,n){const a=this._extensionsLoadBufferAsync(e,t,r,n);if(a)return a;if(!t._data)if(t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{if(!this._bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);t._data=this._bin.readAsync(0,t.byteLength)}return t._data.then(t=>{try{return new Uint8Array(t.buffer,t.byteOffset+r,n)}catch(t){throw new Error(`${e}: ${t.message}`,{cause:t})}})}loadBufferViewAsync(e,t){const r=this._extensionsLoadBufferViewAsync(e,t);if(r)return r;if(t._data)return t._data;const n=q.Get(`${e}/buffer`,this._gltf.buffers,t.buffer);return t._data=this.loadBufferAsync(`/buffers/${n.index}`,n,t.byteOffset||0,t.byteLength),t._data}_loadAccessorAsync(e,r,n){if(r._data)return r._data;const a=Y._GetNumComponents(e,r.type),s=a*t.VertexBufferGetTypeByteLength(r.componentType),o=a*r.count;if(null==r.bufferView)r._data=Promise.resolve(new n(o));else{const i=q.Get(`${e}/bufferView`,this._gltf.bufferViews,r.bufferView);r._data=this.loadBufferViewAsync(`/bufferViews/${i.index}`,i).then(l=>{if(5126!==r.componentType||r.normalized||i.byteStride&&i.byteStride!==s){const e=new n(o);return t.VertexBufferForEach(l,r.byteOffset||0,i.byteStride||s,a,r.componentType,e.length,r.normalized||!1,(t,r)=>{e[r]=t}),e}return Y._GetTypedArray(e,r.componentType,l,r.byteOffset,o)})}if(r.sparse){const o=r.sparse;r._data=r._data.then(i=>{const l=i,u=q.Get(`${e}/sparse/indices/bufferView`,this._gltf.bufferViews,o.indices.bufferView),c=q.Get(`${e}/sparse/values/bufferView`,this._gltf.bufferViews,o.values.bufferView);return Promise.all([this.loadBufferViewAsync(`/bufferViews/${u.index}`,u),this.loadBufferViewAsync(`/bufferViews/${c.index}`,c)]).then(([i,u])=>{const c=Y._GetTypedArray(`${e}/sparse/indices`,o.indices.componentType,i,o.indices.byteOffset,o.count),h=a*o.count;let d;if(5126!==r.componentType||r.normalized){const i=Y._GetTypedArray(`${e}/sparse/values`,r.componentType,u,o.values.byteOffset,h);d=new n(h),t.VertexBufferForEach(i,0,s,a,r.componentType,d.length,r.normalized||!1,(e,t)=>{d[t]=e})}else d=Y._GetTypedArray(`${e}/sparse/values`,r.componentType,u,o.values.byteOffset,h);let m=0;for(let e=0;e<c.length;e++){let t=c[e]*a;for(let e=0;e<a;e++)l[t++]=d[m++]}return l})})}return r._data}_loadFloatAccessorAsync(e,t){return this._loadAccessorAsync(e,t,Float32Array)}_loadIndicesAccessorAsync(e,t){if("SCALAR"!==t.type)throw new Error(`${e}/type: Invalid value ${t.type}`);if(5121!==t.componentType&&5123!==t.componentType&&5125!==t.componentType)throw new Error(`${e}/componentType: Invalid value ${t.componentType}`);if(t._data)return t._data;if(t.sparse){const r=Y._GetTypedArrayConstructor(`${e}/componentType`,t.componentType);t._data=this._loadAccessorAsync(e,t,r)}else{const r=q.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${r.index}`,r).then(r=>Y._GetTypedArray(e,t.componentType,r,t.byteOffset,t.count))}return t._data}_loadVertexBufferViewAsync(e){if(e._babylonBuffer)return e._babylonBuffer;const r=this._babylonScene.getEngine();return e._babylonBuffer=this.loadBufferViewAsync(`/bufferViews/${e.index}`,e).then(e=>new t.Buffer(r,e,!1)),e._babylonBuffer}_loadVertexAccessorAsync(e,r,n){var a;if(null===(a=r._babylonVertexBuffer)||void 0===a?void 0:a[n])return r._babylonVertexBuffer[n];r._babylonVertexBuffer||(r._babylonVertexBuffer={});const s=this._babylonScene.getEngine();if(r.sparse||null==r.bufferView)r._babylonVertexBuffer[n]=this._loadFloatAccessorAsync(e,r).then(e=>new t.VertexBuffer(s,e,n,!1));else{const a=q.Get(`${e}/bufferView`,this._gltf.bufferViews,r.bufferView);r._babylonVertexBuffer[n]=this._loadVertexBufferViewAsync(a).then(o=>{const i=Y._GetNumComponents(e,r.type);return new t.VertexBuffer(s,o,n,!1,void 0,a.byteStride,void 0,r.byteOffset,i,r.componentType,r.normalized,!0,void 0,!0)})}return r._babylonVertexBuffer[n]}_loadMaterialMetallicRoughnessPropertiesAsync(e,r,n){const a=new Array,s=this._getOrCreateMaterialAdapter(n);return r&&(r.baseColorFactor?(s.baseColor=t.Color3.FromArray(r.baseColorFactor),s.geometryOpacity=r.baseColorFactor[3]):s.baseColor=t.Color3.White(),s.baseMetalness=null==r.metallicFactor?1:r.metallicFactor,s.specularRoughness=null==r.roughnessFactor?1:r.roughnessFactor,r.baseColorTexture&&a.push(this.loadTextureInfoAsync(`${e}/baseColorTexture`,r.baseColorTexture,e=>{e.name=`${n.name} (Base Color)`,s.baseColorTexture=e})),r.metallicRoughnessTexture&&(r.metallicRoughnessTexture.nonColorData=!0,a.push(this.loadTextureInfoAsync(`${e}/metallicRoughnessTexture`,r.metallicRoughnessTexture,e=>{e.name=`${n.name} (Metallic Roughness)`,s.baseMetalnessTexture=e,s.specularRoughnessTexture=e})),s.useRoughnessFromMetallicTextureGreen=!0,s.useMetallicFromMetallicTextureBlue=!0)),Promise.all(a).then(()=>{})}_loadMaterialAsync(e,t,r,n,a=()=>{}){const s=this._extensionsLoadMaterialAsync(e,t,r,n,a);if(s)return s;t._data=t._data||{};let o=t._data[n];if(!o){this.logOpen(`${e} ${t.name||""}`);const r=this.createMaterial(e,t,n);o={babylonMaterial:r,babylonMeshes:[],promise:this.loadMaterialPropertiesAsync(e,t,r)},t._data[n]=o,Y.AddPointerMetadata(r,e),this._parent.onMaterialLoadedObservable.notifyObservers(r),this.logClose()}return r&&(o.babylonMeshes.push(r),r.onDisposeObservable.addOnce(()=>{const e=o.babylonMeshes.indexOf(r);-1!==e&&o.babylonMeshes.splice(e,1)})),a(o.babylonMaterial),o.promise.then(()=>o.babylonMaterial)}_selectImplForGltfMaterial(e){var t;if(this.parent.useOpenPBR||(null===(t=e.extensions)||void 0===t?void 0:t.KHR_materials_openpbr)){const e=this._pbrMaterialImpls.get("openpbr");if(e)return e}const r=this._pbrMaterialImpls.get("pbr");if(r)return r;throw new Error("No PBR material implementation loaded")}_getDefaultImpl(){var e;if(this.parent.useOpenPBR){const e=this._pbrMaterialImpls.get("openpbr");if(e)return e}const t=null!==(e=this._pbrMaterialImpls.get("pbr"))&&void 0!==e?e:this._pbrMaterialImpls.values().next().value;if(t)return t;throw new Error("No PBR material implementation loaded")}_createDefaultMaterial(e,t,r){this._babylonScene._blockEntityCollection=!!this._assetContainer;const n=new r.materialClass(e,this._babylonScene);n._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,n.fillMode=t,n.transparencyMode=r.materialClass.MATERIAL_OPAQUE;const a=this._getOrCreateMaterialAdapter(n);return a.transparencyAsAlphaCoverage=this._parent.transparencyAsCoverage,a.baseMetalness=1,a.specularRoughness=1,n}createMaterial(e,t,r){const n=this._extensionsCreateMaterial(e,t,r);if(n)return n;const a=t.name||`material${t.index}`;return this._createDefaultMaterial(a,r,this._selectImplForGltfMaterial(t))}loadMaterialPropertiesAsync(e,t,r){const n=this._extensionsLoadMaterialPropertiesAsync(e,t,r);if(n)return n;const a=new Array;return a.push(this.loadMaterialBasePropertiesAsync(e,t,r)),t.pbrMetallicRoughness&&a.push(this._loadMaterialMetallicRoughnessPropertiesAsync(`${e}/pbrMetallicRoughness`,t.pbrMetallicRoughness,r)),this.loadMaterialAlphaProperties(e,t,r),Promise.all(a).then(()=>{})}loadMaterialBasePropertiesAsync(e,r,n){const a=new Array,s=this._getOrCreateMaterialAdapter(n);let o;s.emissionColor=r.emissiveFactor?t.Color3.FromArray(r.emissiveFactor):new t.Color3(0,0,0),r.doubleSided&&(s.backFaceCulling=!1,s.twoSidedLighting=!0),r.normalTexture&&(r.normalTexture.nonColorData=!0,a.push(this.loadTextureInfoAsync(`${e}/normalTexture`,r.normalTexture,e=>{var t;e.name=`${n.name} (Normal)`,s.geometryNormalTexture=e,null!=(null===(t=r.normalTexture)||void 0===t?void 0:t.scale)&&(e.level=r.normalTexture.scale)})),s.setNormalMapInversions(!this._babylonScene.useRightHandedSystem,this._babylonScene.useRightHandedSystem));let i,l=1;return r.occlusionTexture&&(r.occlusionTexture.nonColorData=!0,a.push(this.loadTextureInfoAsync(`${e}/occlusionTexture`,r.occlusionTexture,e=>{e.name=`${n.name} (Occlusion)`,o=e})),null!=r.occlusionTexture.strength&&(l=r.occlusionTexture.strength)),r.emissiveTexture&&a.push(this.loadTextureInfoAsync(`${e}/emissiveTexture`,r.emissiveTexture,e=>{e.name=`${n.name} (Emissive)`,i=e})),Promise.all(a).then(()=>{o&&(s.ambientOcclusionTexture=o,s.ambientOcclusionTextureStrength=l),i&&(s.emissionColorTexture=i)})}loadMaterialAlphaProperties(e,r,n){if(0===this._pbrMaterialImpls.size)throw new Error(`${e}: Material type not supported`);const a=this._getOrCreateMaterialAdapter(n),s=a.baseColorTexture;switch(r.alphaMode||"OPAQUE"){case"OPAQUE":n.transparencyMode=t.Material.MATERIAL_OPAQUE,n.alpha=1;break;case"MASK":n.transparencyMode=t.Material.MATERIAL_ALPHATEST,a.alphaCutOff=null==r.alphaCutoff?.5:r.alphaCutoff,s&&(s.hasAlpha=!0,a.useAlphaFromBaseColorTexture=!0);break;case"BLEND":n.transparencyMode=t.Material.MATERIAL_ALPHABLEND,s&&(s.hasAlpha=!0,a.useAlphaFromBaseColorTexture=!0);break;default:throw new Error(`${e}/alphaMode: Invalid value (${r.alphaMode})`)}}loadTextureInfoAsync(e,t,r=()=>{}){const n=this._extensionsLoadTextureInfoAsync(e,t,r);if(n)return n;if(this.logOpen(`${e}`),t.texCoord>=6)throw new Error(`${e}/texCoord: Invalid value (${t.texCoord})`);const a=q.Get(`${e}/index`,this._gltf.textures,t.index);a._textureInfo=t;const s=this._loadTextureAsync(`/textures/${t.index}`,a,n=>{n.coordinatesIndex=t.texCoord||0,Y.AddPointerMetadata(n,e),this._parent.onTextureLoadedObservable.notifyObservers(n),r(n)});return this.logClose(),s}_loadTextureAsync(e,t,r=()=>{}){const n=this._extensionsLoadTextureAsync(e,t,r);if(n)return n;this.logOpen(`${e} ${t.name||""}`);const a=null==t.sampler?Y.DefaultSampler:q.Get(`${e}/sampler`,this._gltf.samplers,t.sampler),s=q.Get(`${e}/source`,this._gltf.images,t.source),o=this._createTextureAsync(e,a,s,r,void 0,!t._textureInfo.nonColorData);return this.logClose(),o}_createTextureAsync(e,r,n,a=()=>{},s,o){var i,l;const u=this._loadSampler(`/samplers/${r.index}`,r),c=new Array,h=new t.Deferred;this._babylonScene._blockEntityCollection=!!this._assetContainer;const d={noMipmap:u.noMipMaps,invertY:!1,samplingMode:u.samplingMode,onLoad:()=>{this._disposed||h.resolve()},onError:(t,r)=>{this._disposed||h.reject(new Error(`${e}: ${r&&r.message?r.message:t||"Failed to load texture"}`))},mimeType:null!==(i=n.mimeType)&&void 0!==i?i:t.GetMimeType(null!==(l=n.uri)&&void 0!==l?l:""),loaderOptions:s,useSRGBBuffer:!!o&&this._parent.useSRGBBuffers},m=new t.Texture(null,this._babylonScene,d);m._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,c.push(h.promise);const _=n.uri&&!t.IsBase64DataUrl(n.uri)?n.uri:void 0,p=null!=_?_:`${this._fileName}#image${n.index}`;if(c.push(this.loadImageAsync(`/images/${n.index}`,n).then(e=>{const t=`data:${this._uniqueRootUrl}${p}`;m.updateURL(t,e);const r=m.getInternalTexture();r&&(r.label=n.name)})),m.wrapU=u.wrapU,m.wrapV=u.wrapV,a(m),this._parent.useGltfTextureNames){const e=n.name||_||`image${n.index}`;m.name=e}return Promise.all(c).then(()=>m)}_loadSampler(e,t){return t._data||(t._data={noMipMaps:9728===t.minFilter||9729===t.minFilter,samplingMode:Y._GetTextureSamplingMode(e,t),wrapU:Y._GetTextureWrapMode(`${e}/wrapS`,t.wrapS),wrapV:Y._GetTextureWrapMode(`${e}/wrapT`,t.wrapT)}),t._data}loadImageAsync(e,t){if(!t._data){if(this.logOpen(`${e} ${t.name||""}`),t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{const r=q.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${r.index}`,r)}this.logClose()}return t._data}loadUriAsync(e,r,n){var a;const s=this._extensionsLoadUriAsync(e,r,n);if(s)return s;if(!this._parent._isPreprocessUrlAsyncSet&&!Y._ValidateUri(n))throw new Error(`${e}: '${n}' is invalid`);if(t.IsBase64DataUrl(n)){const r=new Uint8Array(t.DecodeBase64UrlToBinary(n));return this.log(`${e}: Decoded ${n.substring(0,64)}... (${r.length} bytes)`),Promise.resolve(r)}return this.log(`${e}: Loading ${n}`),this._parent.preprocessUrlAsync(this._rootUrl+n,null!==(a=this._rootUrl)&&void 0!==a?a:void 0).then(r=>new Promise((a,s)=>{this._parent._loadFile(this._babylonScene,r,t=>{this._disposed||(this.log(`${e}: Loaded ${n} (${t.byteLength} bytes)`),a(new Uint8Array(t)))},!0,r=>{s(new t.LoadFileError(`${e}: Failed to load '${n}'${r?": "+r.status+" "+r.statusText:""}`,r))})}))}static AddPointerMetadata(e,t){e.metadata=e.metadata||{};const r=e._internalMetadata=e._internalMetadata||{},n=r.gltf=r.gltf||{};(n.pointers=n.pointers||[]).push(t)}static _GetTextureWrapMode(e,r){switch(r=null==r?10497:r){case 33071:return t.Texture.CLAMP_ADDRESSMODE;case 33648:return t.Texture.MIRROR_ADDRESSMODE;case 10497:return t.Texture.WRAP_ADDRESSMODE;default:return t.Logger.Warn(`${e}: Invalid value (${r})`),t.Texture.WRAP_ADDRESSMODE}}static _GetTextureSamplingMode(e,r){const n=null==r.magFilter?9729:r.magFilter,a=null==r.minFilter?9987:r.minFilter;if(9729===n)switch(a){case 9728:return t.Texture.LINEAR_NEAREST;case 9729:return t.Texture.LINEAR_LINEAR;case 9984:return t.Texture.LINEAR_NEAREST_MIPNEAREST;case 9985:return t.Texture.LINEAR_LINEAR_MIPNEAREST;case 9986:return t.Texture.LINEAR_NEAREST_MIPLINEAR;case 9987:return t.Texture.LINEAR_LINEAR_MIPLINEAR;default:return t.Logger.Warn(`${e}/minFilter: Invalid value (${a})`),t.Texture.LINEAR_LINEAR_MIPLINEAR}else switch(9728!==n&&t.Logger.Warn(`${e}/magFilter: Invalid value (${n})`),a){case 9728:return t.Texture.NEAREST_NEAREST;case 9729:return t.Texture.NEAREST_LINEAR;case 9984:return t.Texture.NEAREST_NEAREST_MIPNEAREST;case 9985:return t.Texture.NEAREST_LINEAR_MIPNEAREST;case 9986:return t.Texture.NEAREST_NEAREST_MIPLINEAR;case 9987:return t.Texture.NEAREST_LINEAR_MIPLINEAR;default:return t.Logger.Warn(`${e}/minFilter: Invalid value (${a})`),t.Texture.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,r){try{return t.GetTypedArrayConstructor(r)}catch(t){throw new Error(`${e}: ${t.message}`,{cause:t})}}static _GetTypedArray(e,r,n,a,s){const o=n.buffer;a=n.byteOffset+(a||0);const i=Y._GetTypedArrayConstructor(`${e}/componentType`,r),l=t.VertexBufferGetTypeByteLength(r);return a%l!==0?(t.Logger.Warn(`${e}: Copying buffer as byte offset (${a}) is not a multiple of component type byte length (${l})`),new i(o.slice(a,a+s*l),0)):new i(o,a,s)}static _GetNumComponents(e,t){switch(t){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}throw new Error(`${e}: Invalid type (${t})`)}static _ValidateUri(e){return t.Tools.IsBase64(e)||-1===e.indexOf("..")}static _GetDrawMode(e,r){switch(null==r&&(r=4),r){case 0:return t.Material.PointListDrawMode;case 1:return t.Material.LineListDrawMode;case 2:return t.Material.LineLoopDrawMode;case 3:return t.Material.LineStripDrawMode;case 4:return t.Material.TriangleFillMode;case 5:return t.Material.TriangleStripDrawMode;case 6:return t.Material.TriangleFanDrawMode}throw new Error(`${e}: Invalid mesh primitive mode (${r})`)}_compileMaterialsAsync(){this._parent._startPerformanceCounter("Compile materials");const e=new Array;if(this._gltf.materials)for(const t of this._gltf.materials)if(t._data)for(const r in t._data){const n=t._data[r];for(const t of n.babylonMeshes){t.computeWorldMatrix(!0);const r=n.babylonMaterial;e.push(r.forceCompilationAsync(t)),e.push(r.forceCompilationAsync(t,{useInstances:!0})),this._parent.useClipPlane&&(e.push(r.forceCompilationAsync(t,{clipPlane:!0})),e.push(r.forceCompilationAsync(t,{clipPlane:!0,useInstances:!0})))}}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile materials")})}_compileShadowGeneratorsAsync(){this._parent._startPerformanceCounter("Compile shadow generators");const e=new Array,t=this._babylonScene.lights;for(const r of t){const t=r.getShadowGenerator();t&&e.push(t.forceCompilationAsync())}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile shadow generators")})}_forEachExtensions(e){for(const t of this._extensions)t.enabled&&e(t)}_applyExtensions(e,t,r){for(const n of this._extensions)if(n.enabled){const a=`${n.name}.${t}`,s=e;s._activeLoaderExtensionFunctions=s._activeLoaderExtensionFunctions||{};const o=s._activeLoaderExtensionFunctions;if(!o[a]){o[a]=!0;try{const e=r(n);if(e)return e}finally{delete o[a]}}}return null}_extensionsOnLoading(){this._forEachExtensions(e=>e.onLoading&&e.onLoading())}_extensionsOnReady(){this._forEachExtensions(e=>e.onReady&&e.onReady())}_extensionsLoadSceneAsync(e,t){return this._applyExtensions(t,"loadScene",r=>r.loadSceneAsync&&r.loadSceneAsync(e,t))}_extensionsLoadNodeAsync(e,t,r){return this._applyExtensions(t,"loadNode",n=>n.loadNodeAsync&&n.loadNodeAsync(e,t,r))}_extensionsLoadCameraAsync(e,t,r){return this._applyExtensions(t,"loadCamera",n=>n.loadCameraAsync&&n.loadCameraAsync(e,t,r))}_extensionsLoadVertexDataAsync(e,t,r){return this._applyExtensions(t,"loadVertexData",n=>n._loadVertexDataAsync&&n._loadVertexDataAsync(e,t,r))}_extensionsLoadMeshPrimitiveAsync(e,t,r,n,a,s){return this._applyExtensions(a,"loadMeshPrimitive",o=>o._loadMeshPrimitiveAsync&&o._loadMeshPrimitiveAsync(e,t,r,n,a,s))}_extensionsLoadMaterialAsync(e,t,r,n,a){return this._applyExtensions(t,"loadMaterial",s=>s._loadMaterialAsync&&s._loadMaterialAsync(e,t,r,n,a))}_extensionsCreateMaterial(e,t,r){return this._applyExtensions(t,"createMaterial",n=>n.createMaterial&&n.createMaterial(e,t,r))}_extensionsLoadMaterialPropertiesAsync(e,t,r){return this._applyExtensions(t,"loadMaterialProperties",n=>n.loadMaterialPropertiesAsync&&n.loadMaterialPropertiesAsync(e,t,r))}_extensionsLoadTextureInfoAsync(e,t,r){return this._applyExtensions(t,"loadTextureInfo",n=>n.loadTextureInfoAsync&&n.loadTextureInfoAsync(e,t,r))}_extensionsLoadTextureAsync(e,t,r){return this._applyExtensions(t,"loadTexture",n=>n._loadTextureAsync&&n._loadTextureAsync(e,t,r))}_extensionsLoadAnimationAsync(e,t){return this._applyExtensions(t,"loadAnimation",r=>r.loadAnimationAsync&&r.loadAnimationAsync(e,t))}_extensionsLoadAnimationChannelAsync(e,t,r,n,a){return this._applyExtensions(r,"loadAnimationChannel",s=>s._loadAnimationChannelAsync&&s._loadAnimationChannelAsync(e,t,r,n,a))}_extensionsLoadSkinAsync(e,t,r){return this._applyExtensions(r,"loadSkin",n=>n._loadSkinAsync&&n._loadSkinAsync(e,t,r))}_extensionsLoadUriAsync(e,t,r){return this._applyExtensions(t,"loadUri",n=>n._loadUriAsync&&n._loadUriAsync(e,t,r))}_extensionsLoadBufferViewAsync(e,t){return this._applyExtensions(t,"loadBufferView",r=>r.loadBufferViewAsync&&r.loadBufferViewAsync(e,t))}_extensionsLoadBufferAsync(e,t,r,n){return this._applyExtensions(t,"loadBuffer",a=>a.loadBufferAsync&&a.loadBufferAsync(e,t,r,n))}static LoadExtensionAsync(e,t,r,n){if(!t.extensions)return null;const a=t.extensions[r];return a?n(`${e}/extensions/${r}`,a):null}static LoadExtraAsync(e,t,r,n){if(!t.extras)return null;const a=t.extras[r];return a?n(`${e}/extras/${r}`,a):null}isExtensionUsed(e){return!!this._gltf.extensionsUsed&&-1!==this._gltf.extensionsUsed.indexOf(e)}logOpen(e){this._parent._logOpen(e)}logClose(){this._parent._logClose()}log(e){this._parent._log(e)}startPerformanceCounter(e){this._parent._startPerformanceCounter(e)}endPerformanceCounter(e){this._parent._endPerformanceCounter(e)}}Y.DefaultSampler={index:-1};let X=!1;function Q(){X||(X=!0,b._CreateGLTF2Loader=e=>new Y(e))}const J="EXT_lights_image_based";class Z{constructor(e){this.name=J,this._loader=e,this.enabled=this._loader.isExtensionUsed(J)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights}}loadSceneAsync(e,t){return Y.LoadExtensionAsync(e,t,this.name,(r,n)=>D(this,void 0,void 0,function*(){this._loader._allMaterialsDirtyRequired=!0;const a=new Array;a.push(this._loader.loadSceneAsync(e,t)),this._loader.logOpen(`${r}`);const s=q.Get(`${r}/light`,this._lights,n.light);return a.push(this._loadLightAsync(`/extensions/${this.name}/lights/${n.light}`,s).then(e=>{this._loader.babylonScene.environmentTexture=e})),this._loader.logClose(),yield Promise.all(a).then(()=>{})}))}_loadLightAsync(e,r){if(!r._loaded){const n=new Array;this._loader.logOpen(`${e}`);const a=new Array(r.specularImages.length);for(let t=0;t<r.specularImages.length;t++){const s=r.specularImages[t];a[t]=new Array(s.length);for(let r=0;r<s.length;r++){const o=`${e}/specularImages/${t}/${r}`;this._loader.logOpen(`${o}`);const i=s[r],l=q.Get(o,this._loader.gltf.images,i);n.push(this._loader.loadImageAsync(`/images/${i}`,l).then(e=>{a[t][r]=e})),this._loader.logClose()}}this._loader.logClose(),r._loaded=Promise.all(n).then(()=>D(this,void 0,void 0,function*(){const n=new t.RawCubeTexture(this._loader.babylonScene,null,r.specularImageSize);if(n.name=r.name||"environment",r._babylonTexture=n,null!=r.intensity&&(n.level=r.intensity),r.rotation){let e=t.Quaternion.FromArray(r.rotation);this._loader.babylonScene.useRightHandedSystem||(e=t.Quaternion.Inverse(e)),t.Matrix.FromQuaternionToRef(e,n.getReflectionTextureMatrix())}if(!r.irradianceCoefficients)throw new Error(`${e}: Irradiance coefficients are missing`);const s=t.SphericalHarmonics.FromArray(r.irradianceCoefficients);s.scaleInPlace(r.intensity),s.convertIrradianceToLambertianRadiance();const o=t.SphericalPolynomial.FromHarmonics(s),i=(a.length-1)/Math.log2(r.specularImageSize);return yield n.updateRGBDAsync(a,o,i)}))}return r._loaded.then(()=>r._babylonTexture)}}let ee=!1;function te(){ee||(ee=!0,W(J),K(J,!0,e=>new Z(e)))}te();const re="EXT_mesh_gpu_instancing";class ne{constructor(e){this.name=re,this._loader=e,this.enabled=this._loader.isExtensionUsed(re)}dispose(){this._loader=null}loadNodeAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(e,a)=>D(this,void 0,void 0,function*(){this._loader._disableInstancedMesh++;const s=this._loader.loadNodeAsync(`/nodes/${r.index}`,r,n);if(this._loader._disableInstancedMesh--,!r._primitiveBabylonMeshes)return yield s;const o=new Array;let i=0;const l=t=>{if(null==a.attributes[t])return void o.push(Promise.resolve(null));const r=q.Get(`${e}/attributes/${t}`,this._loader.gltf.accessors,a.attributes[t]);if(o.push(this._loader._loadFloatAccessorAsync(`/accessors/${r.bufferView}`,r)),0===i)i=r.count;else if(i!==r.count)throw new Error(`${e}/attributes: Instance buffer accessors do not have the same count.`)};return l("TRANSLATION"),l("ROTATION"),l("SCALE"),l("_COLOR_0"),yield s.then(e=>D(this,void 0,void 0,function*(){const[n,a,s,l]=yield Promise.all(o),u=new Float32Array(16*i);t.TmpVectors.Vector3[0].copyFromFloats(0,0,0),t.TmpVectors.Quaternion[0].copyFromFloats(0,0,0,1),t.TmpVectors.Vector3[1].copyFromFloats(1,1,1);for(let e=0;e<i;++e)n&&t.Vector3.FromArrayToRef(n,3*e,t.TmpVectors.Vector3[0]),a&&t.Quaternion.FromArrayToRef(a,4*e,t.TmpVectors.Quaternion[0]),s&&t.Vector3.FromArrayToRef(s,3*e,t.TmpVectors.Vector3[1]),t.Matrix.ComposeToRef(t.TmpVectors.Vector3[1],t.TmpVectors.Quaternion[0],t.TmpVectors.Vector3[0],t.TmpVectors.Matrix[0]),t.TmpVectors.Matrix[0].copyToArray(u,16*e);for(const e of r._primitiveBabylonMeshes)e.thinInstanceSetBuffer("matrix",u,16,!0),l&&(l.length===3*i?e.thinInstanceSetBuffer("color",l,3,!0):l.length===4*i?e.thinInstanceSetBuffer("color",l,4,!0):t.Logger.Warn("Unexpected size of _COLOR_0 attribute for mesh "+e.name));return e}))}))}}let ae=!1;function se(){ae||(ae=!0,W(re),K(re,!0,e=>new ne(e)))}se();const oe="EXT_meshopt_compression";class ie{constructor(e){this.name=oe,this.enabled=e.isExtensionUsed(oe),this._loader=e}dispose(){this._loader=null}loadBufferViewAsync(e,r){return Y.LoadExtensionAsync(e,r,this.name,(n,a)=>D(this,void 0,void 0,function*(){const n=r;if(n._meshOptData)return yield n._meshOptData;const s=q.Get(`${e}/buffer`,this._loader.gltf.buffers,a.buffer);return n._meshOptData=this._loader.loadBufferAsync(`/buffers/${s.index}`,s,a.byteOffset||0,a.byteLength).then(e=>D(this,void 0,void 0,function*(){return yield t.MeshoptCompression.Default.decodeGltfBufferAsync(e,a.count,a.byteStride,a.mode,a.filter)})),yield n._meshOptData}))}}let le=!1;function ue(){le||(le=!0,W(oe),K(oe,!0,e=>new ie(e)))}ue();const ce="EXT_texture_webp";class he{constructor(e){this.name=ce,this._loader=e,this.enabled=e.isExtensionUsed(ce)}dispose(){this._loader=null}_loadTextureAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=null==t.sampler?Y.DefaultSampler:q.Get(`${e}/sampler`,this._loader.gltf.samplers,t.sampler),o=q.Get(`${n}/source`,this._loader.gltf.images,a.source);return yield this._loader._createTextureAsync(e,s,o,e=>{r(e)},void 0,!t._textureInfo.nonColorData)}))}}let de=!1;function me(){de||(de=!0,W(ce),K(ce,!0,e=>new he(e)))}me();const _e="EXT_texture_avif";class pe{constructor(e){this.name=_e,this._loader=e,this.enabled=e.isExtensionUsed(_e)}dispose(){this._loader=null}_loadTextureAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=null==t.sampler?Y.DefaultSampler:q.Get(`${e}/sampler`,this._loader.gltf.samplers,t.sampler),o=q.Get(`${n}/source`,this._loader.gltf.images,a.source);return yield this._loader._createTextureAsync(e,s,o,e=>{r(e)},void 0,!t._textureInfo.nonColorData)}))}}let ge=!1;function fe(){ge||(ge=!0,W(_e),K(_e,!0,e=>new pe(e)))}fe();const be="EXT_lights_ies";class ye{constructor(e){this.name=be,this._loader=e,this.enabled=this._loader.isExtensionUsed(be)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,q.Assign(this._lights)}}loadNodeAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(a,s)=>D(this,void 0,void 0,function*(){let o,i;this._loader._allMaterialsDirtyRequired=!0;const l=yield this._loader.loadNodeAsync(e,r,e=>{i=q.Get(a,this._lights,s.light);const r=i.name||e.name;this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer,o=new t.SpotLight(r,t.Vector3.Zero(),t.Vector3.Backward(),0,1,this._loader.babylonScene),o.angle=Math.PI/2,o.innerAngle=0,o._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,i._babylonLight=o,o.falloffType=t.Light.FALLOFF_GLTF,o.diffuse=s.color?t.Color3.FromArray(s.color):t.Color3.White(),o.intensity=s.multiplier||1,o.range=Number.MAX_VALUE,o.parent=e,this._loader._babylonLights.push(o),Y.AddPointerMetadata(o,a),n(e)});let u;if(i.uri)u=yield this._loader.loadUriAsync(e,i,i.uri);else{const t=q.Get(`${e}/bufferView`,this._loader.gltf.bufferViews,i.bufferView);u=yield this._loader.loadBufferViewAsync(`/bufferViews/${t.index}`,t)}return o.iesProfileTexture=new t.Texture(o.name+"_iesProfile",this._loader.babylonScene,!0,!1,void 0,null,null,u,!0,void 0,void 0,void 0,void 0,".ies"),l}))}}let ve=!1;function Te(){ve||(ve=!0,W(be),K(be,!0,e=>new ye(e)))}Te();const xe="KHR_draco_mesh_compression";class Ae{constructor(e){this.name=xe,this.useNormalizedFlagFromAccessor=!0,this._loader=e,this.enabled=t.DracoDecoder.DefaultAvailable&&this._loader.isExtensionUsed(xe)}dispose(){delete this.dracoDecoder,this._loader=null}_loadVertexDataAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(a,s)=>D(this,void 0,void 0,function*(){if(null!=r.mode&&4!==r.mode&&5!==r.mode)throw new Error(`${e}: Unsupported mode ${r.mode}`);const o={},i={},l=(e,t)=>{const a=s.attributes[e];if(null!=a&&(n._delayInfo=n._delayInfo||[],-1===n._delayInfo.indexOf(t)&&n._delayInfo.push(t),o[t]=a,this.useNormalizedFlagFromAccessor)){const n=q.TryGet(this._loader.gltf.accessors,r.attributes[e]);n&&(i[t]=n.normalized||!1)}};l("POSITION",t.VertexBuffer.PositionKind),l("NORMAL",t.VertexBuffer.NormalKind),l("TANGENT",t.VertexBuffer.TangentKind),l("TEXCOORD_0",t.VertexBuffer.UVKind),l("TEXCOORD_1",t.VertexBuffer.UV2Kind),l("TEXCOORD_2",t.VertexBuffer.UV3Kind),l("TEXCOORD_3",t.VertexBuffer.UV4Kind),l("TEXCOORD_4",t.VertexBuffer.UV5Kind),l("TEXCOORD_5",t.VertexBuffer.UV6Kind),l("JOINTS_0",t.VertexBuffer.MatricesIndicesKind),l("WEIGHTS_0",t.VertexBuffer.MatricesWeightsKind),l("COLOR_0",t.VertexBuffer.ColorKind);const u=q.Get(a,this._loader.gltf.bufferViews,s.bufferView);return u._dracoBabylonGeometry||(u._dracoBabylonGeometry=this._loader.loadBufferViewAsync(`/bufferViews/${u.index}`,u).then(a=>D(this,void 0,void 0,function*(){const s=this.dracoDecoder||t.DracoDecoder.Default,l=q.TryGet(this._loader.gltf.accessors,r.attributes.POSITION),u=this._loader.parent.alwaysComputeBoundingBox||n.skeleton||!l?null:j(l);return yield s._decodeMeshToGeometryForGltfAsync(n.name,this._loader.babylonScene,a,o,i,u).catch(t=>{throw new Error(`${e}: ${t.message}`)})}))),yield u._dracoBabylonGeometry}))}}let Ce=!1;function Re(){Ce||(Ce=!0,W(xe),K(xe,!0,e=>new Ae(e)))}Re();const we="KHR_gaussian_splatting",Me=.28209479177387814,Oe=[0,3,5,7];function Fe(e){return e<=0?0:e>=255?255:e+.5|0}class Le{constructor(e){this.name=we,this._loader=e,this.enabled=this._loader.isExtensionUsed(we)}dispose(){this._loader=null}_loadMeshPrimitiveAsync(e,r,n,a,s,o){return Y.LoadExtensionAsync(e,s,this.name,n=>D(this,void 0,void 0,function*(){if(null!=s.mode&&0!==s.mode)throw new Error(`${n}: Gaussian splatting primitives must use POINTS mode`);const a=this._loader,i=t=>{const r=s.attributes[t];if(null==r)return null;const n=q.Get(`${e}/attributes/${t}`,a.gltf.accessors,r);return a._loadFloatAccessorAsync(`/accessors/${n.index}`,n)},l=i("POSITION");if(!l)throw new Error(`${n}: Gaussian splatting primitive is missing the POSITION attribute`);let u=0;const c=[];for(let e=1;e<=3&&null!=s.attributes[`KHR_gaussian_splatting:SH_DEGREE_${e}_COEF_0`];e++){u=e;for(let t=0;t<Oe[e];t++)c.push(`KHR_gaussian_splatting:SH_DEGREE_${e}_COEF_${t}`)}const h=a.babylonScene;h._blockEntityCollection=!!a._assetContainer;const d=new t.GaussianSplattingMesh(r,null,h);d._parentContainer=a._assetContainer,h._blockEntityCollection=!1,Y.AddPointerMetadata(d,e),a.parent.onMeshLoadedObservable.notifyObservers(d),o(d);const m=h.getEngine().getCaps(),[_,p,g,f,b,y,...v]=yield Promise.all([l,i("KHR_gaussian_splatting:ROTATION"),i("KHR_gaussian_splatting:SCALE"),i("KHR_gaussian_splatting:OPACITY"),i("KHR_gaussian_splatting:SH_DEGREE_0_COEF_0"),i("COLOR_0"),...c.map(e=>i(e))]),T=_.length/3,x=y?y.length/T:0,A=new ArrayBuffer(32*T),C=new Float32Array(A),R=new Uint8Array(A);let w=null;if(u>0){const e=3*((u+1)*(u+1)-1),r=Math.ceil(e/16),n=m.maxTextureSize,a=Math.ceil(T/n);w=t.AllocateShBuffers(r,a*n*4*4)}for(let e=0;e<T;e++){const t=8*e,r=32*e,n=3*e;if(C[t+0]=_[n+0],C[t+1]=_[n+1],C[t+2]=_[n+2],C[t+3]=g?g[n+0]:1,C[t+4]=g?g[n+1]:1,C[t+5]=g?g[n+2]:1,b)R[r+24]=Fe(255*(.5+Me*b[n+0])),R[r+25]=Fe(255*(.5+Me*b[n+1])),R[r+26]=Fe(255*(.5+Me*b[n+2]));else if(y){const t=e*x;R[r+24]=Fe(255*y[t+0]),R[r+25]=Fe(255*y[t+1]),R[r+26]=Fe(255*y[t+2])}else R[r+24]=255,R[r+25]=255,R[r+26]=255;R[r+27]=f?Fe(255*f[e]):y&&x>=4?Fe(255*y[e*x+3]):255;const a=4*e,s=p?p[a+0]:0,o=p?p[a+1]:0,i=p?p[a+2]:0,l=p?p[a+3]:1;if(R[r+28]=Fe(127.5*l+127.5),R[r+29]=Fe(127.5*s+127.5),R[r+30]=Fe(127.5*o+127.5),R[r+31]=Fe(127.5*i+127.5),w){const t=16*e;for(let e=0;e<v.length;e++){const r=v[e];if(r)for(let a=0;a<3;a++){const s=3*e+a,o=15&s;w[s>>4][t+o]=Fe(128*r[n+a]+128)}}}}return yield d.updateDataAsync(A,null!=w?w:void 0,void 0,u||void 0),d}))}}let Ee=!1;function Se(){Ee||(Ee=!0,W(we),K(we,!0,e=>new Le(e)))}Se();const ke="KHR_lights_punctual";class Ie{constructor(e){this.name=ke,this._loader=e,this.enabled=this._loader.isExtensionUsed(ke)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,q.Assign(this._lights)}}loadNodeAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(a,s)=>D(this,void 0,void 0,function*(){return this._loader._allMaterialsDirtyRequired=!0,yield this._loader.loadNodeAsync(e,r,e=>{let r;const o=q.Get(a,this._lights,s.light),i=o.name||e.name;switch(this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer,o.type){case"directional":{const e=new t.DirectionalLight(i,t.Vector3.Backward(),this._loader.babylonScene);e.position.setAll(0),r=e;break}case"point":r=new t.PointLight(i,t.Vector3.Zero(),this._loader.babylonScene);break;case"spot":{const e=new t.SpotLight(i,t.Vector3.Zero(),t.Vector3.Backward(),0,1,this._loader.babylonScene);e.angle=2*(o.spot&&o.spot.outerConeAngle||Math.PI/4),e.innerAngle=2*(o.spot&&o.spot.innerConeAngle||0),r=e;break}default:throw this._loader.babylonScene._blockEntityCollection=!1,new Error(`${a}: Invalid light type (${o.type})`)}r._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,o._babylonLight=r,r.falloffType=t.Light.FALLOFF_GLTF,r.diffuse=o.color?t.Color3.FromArray(o.color):t.Color3.White(),r.intensity=null==o.intensity?1:o.intensity,r.range=null==o.range?Number.MAX_VALUE:o.range,r.parent=e,this._loader._babylonLights.push(r),Y.AddPointerMetadata(r,a),n(e)})}))}}let Pe=!1;function Be(){Pe||(Pe=!0,W(ke),K(ke,!0,e=>new Ie(e)))}Be();const Ne="EXT_lights_area";class Ge{constructor(e){this.name=Ne,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ne)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,q.Assign(this._lights)}}loadNodeAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(a,s)=>D(this,void 0,void 0,function*(){return this._loader._allMaterialsDirtyRequired=!0,yield this._loader.loadNodeAsync(e,r,e=>{var r;let o;const i=q.Get(a,this._lights,s.light),l=i.name||e.name;this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer;const u=void 0!==i.size?i.size:1;switch(i.type){case"rect":{const e=void 0!==(null===(r=i.rect)||void 0===r?void 0:r.aspect)?i.rect.aspect*u:u,n=u;o=new t.RectAreaLight(l,t.Vector3.Zero(),e,n,this._loader.babylonScene);break}case"disk":{const e=Math.sqrt(u*u*.25*Math.PI);o=new t.RectAreaLight(l,t.Vector3.Zero(),e,e,this._loader.babylonScene);break}default:throw this._loader.babylonScene._blockEntityCollection=!1,new Error(`${a}: Invalid area light type (${i.type})`)}o._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,i._babylonLight=o,o.falloffType=t.Light.FALLOFF_GLTF,o.diffuse=i.color?t.Color3.FromArray(i.color):t.Color3.White(),o.intensity=null==i.intensity?1:i.intensity;const c=new t.TransformNode(`${l}_orientation`,this._loader.babylonScene);c.rotationQuaternion=t.Quaternion.RotationAxis(t.Vector3.Up(),Math.PI),c.parent=e,o.parent=c,this._loader._babylonLights.push(o),Y.AddPointerMetadata(o,a),n(e)})}))}}let $e=!1;function De(){$e||($e=!0,W(Ne),K(Ne,!0,e=>new Ge(e)))}De();const Ve="KHR_materials_pbrSpecularGlossiness";class He{constructor(e){this.name=Ve,this.order=200,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ve)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialBasePropertiesAsync(e,t,r)),s.push(this._loadSpecularGlossinessPropertiesAsync(n,a,r)),this._loader.loadMaterialAlphaProperties(e,t,r),yield Promise.all(s).then(()=>{})}))}_loadSpecularGlossinessPropertiesAsync(e,r,n){const a=this._loader._getOrCreateMaterialAdapter(n),s=new Array;return a.configureSpecularGlossiness(),r.diffuseFactor?(a.baseColor=t.Color3.FromArray(r.diffuseFactor),n.alpha=r.diffuseFactor[3]):a.baseColor=t.Color3.White(),a.specularColor=r.specularFactor?t.Color3.FromArray(r.specularFactor):t.Color3.White(),a.glossiness=null==r.glossinessFactor?1:r.glossinessFactor,r.diffuseTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/diffuseTexture`,r.diffuseTexture,e=>{e.name=`${n.name} (Diffuse)`,a.baseColorTexture=e})),r.specularGlossinessTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/specularGlossinessTexture`,r.specularGlossinessTexture,e=>{e.name=`${n.name} (Specular Glossiness)`,a.specularColorTexture=e})),Promise.all(s).then(()=>{})}}let Ke=!1;function We(){Ke||(Ke=!0,W(Ve),K(Ve,!0,e=>new He(e)))}We();const Ue="KHR_materials_unlit";class ze{constructor(e){this.name=Ue,this.order=210,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ue)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,()=>D(this,void 0,void 0,function*(){return yield this._loadUnlitPropertiesAsync(e,t,r)}))}_loadUnlitPropertiesAsync(e,r,n){const a=this._loader._getOrCreateMaterialAdapter(n),s=new Array,o=r.pbrMetallicRoughness;return o&&(o.baseColorFactor&&(a.baseColor=t.Color3.FromArray(o.baseColorFactor),a.geometryOpacity=o.baseColorFactor[3]),o.baseColorTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/baseColorTexture`,o.baseColorTexture,e=>{e.name=`${n.name} (Base Color)`,a.baseColorTexture=e}))),a.isUnlit=!0,r.doubleSided&&(a.backFaceCulling=!1,a.twoSidedLighting=!0),this._loader.loadMaterialAlphaProperties(e,r,n),Promise.all(s).then(()=>{})}}let qe=!1;function je(){qe||(qe=!0,W(Ue),K(Ue,!0,e=>new ze(e)))}je();const Ye="KHR_materials_clearcoat";class Xe{constructor(e){this.name=Ye,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ye)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadClearCoatPropertiesAsync(n,a,r)),yield Promise.all(s)}))}_loadClearCoatPropertiesAsync(e,t,r){const n=this._loader._getOrCreateMaterialAdapter(r),a=new Array;return n.configureCoat(),n.coatWeight=void 0!==t.clearcoatFactor?t.clearcoatFactor:0,n.coatRoughness=void 0!==t.clearcoatRoughnessFactor?t.clearcoatRoughnessFactor:0,t.clearcoatTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/clearcoatTexture`,t.clearcoatTexture,e=>{e.name=`${r.name} (ClearCoat)`,n.coatWeightTexture=e})),t.clearcoatRoughnessTexture&&(t.clearcoatRoughnessTexture.nonColorData=!0,a.push(this._loader.loadTextureInfoAsync(`${e}/clearcoatRoughnessTexture`,t.clearcoatRoughnessTexture,e=>{e.name=`${r.name} (ClearCoat Roughness)`,n.coatRoughnessTexture=e}))),t.clearcoatNormalTexture&&(t.clearcoatNormalTexture.nonColorData=!0,a.push(this._loader.loadTextureInfoAsync(`${e}/clearcoatNormalTexture`,t.clearcoatNormalTexture,e=>{var a;e.name=`${r.name} (ClearCoat Normal)`,n.geometryCoatNormalTexture=e,null!=(null===(a=t.clearcoatNormalTexture)||void 0===a?void 0:a.scale)&&(n.geometryCoatNormalTextureScale=t.clearcoatNormalTexture.scale)})),n.setNormalMapInversions(!r.getScene().useRightHandedSystem,r.getScene().useRightHandedSystem)),Promise.all(a).then(()=>{})}}let Qe=!1;function Je(){Qe||(Qe=!0,W(Ye),K(Ye,!0,e=>new Xe(e)))}Je();const Ze="KHR_materials_coat";class et{constructor(e){this.name=Ze,this.order=191,this.useOpenPBR=!1,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ze)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),t.extensions&&t.extensions.KHR_materials_openpbr&&(this.useOpenPBR=!0),s.push(this._loadCoatPropertiesAsync(n,a,r)),yield Promise.all(s)}))}_loadCoatPropertiesAsync(e,r,n){var a,s;const o=this._loader._getOrCreateMaterialAdapter(n),i=new Array;o.configureCoat(),o.coatWeight=void 0!==r.coatFactor?r.coatFactor:0,o.coatRoughness=void 0!==r.coatRoughnessFactor?r.coatRoughnessFactor:0,r.coatTexture&&i.push(this._loader.loadTextureInfoAsync(`${e}/coatTexture`,r.coatTexture,e=>{e.name=`${n.name} (Coat)`,o.coatWeightTexture=e})),r.coatRoughnessTexture&&(r.coatRoughnessTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/coatRoughnessTexture`,r.coatRoughnessTexture,e=>{e.name=`${n.name} (Coat Roughness)`,o.coatRoughnessTexture=e}))),r.coatNormalTexture&&(r.coatNormalTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/coatNormalTexture`,r.coatNormalTexture,e=>{var t;e.name=`${n.name} (Coat Normal)`,o.geometryCoatNormalTexture=e,null!=(null===(t=r.coatNormalTexture)||void 0===t?void 0:t.scale)&&(o.geometryCoatNormalTextureScale=r.coatNormalTexture.scale)})),o.setNormalMapInversions(!n.getScene().useRightHandedSystem,n.getScene().useRightHandedSystem)),o.coatDarkening=void 0!==r.coatDarkeningFactor?r.coatDarkeningFactor:1,o.coatIor=void 0!==r.coatIor?r.coatIor:1.5;const l=t.Color3.White();void 0!==r.coatColorFactor&&l.fromArray(r.coatColorFactor),o.coatColor=l,r.coatColorTexture&&i.push(this._loader.loadTextureInfoAsync(`${e}/coatColorTexture`,r.coatColorTexture,e=>{e.name=`${n.name} (Coat Color)`,o.coatColorTexture=e}));const u=null!==(a=r.coatAnisotropyStrength)&&void 0!==a?a:0,c=null!==(s=r.coatAnisotropyRotation)&&void 0!==s?s:0;return o.coatRoughnessAnisotropy=u,o.geometryCoatTangentAngle=c,this.useOpenPBR||o.configureGltfStyleAnisotropy(!0),r.coatAnisotropyTexture&&(r.coatAnisotropyTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/coatAnisotropyTexture`,r.coatAnisotropyTexture,e=>{e.name=`${n.name} (Coat Anisotropy)`,o.geometryCoatTangentTexture=e}))),Promise.all(i).then(()=>{})}}let tt=!1;function rt(){tt||(tt=!0,W(Ze),K(Ze,!0,e=>new et(e)))}rt();const nt="KHR_materials_iridescence";class at{constructor(e){this.name=nt,this.order=195,this._loader=e,this.enabled=this._loader.isExtensionUsed(nt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadIridescencePropertiesAsync(n,a,r)),yield Promise.all(s).then(()=>{})}))}_loadIridescencePropertiesAsync(e,t,r){var n,a,s,o,i;const l=this._loader._getOrCreateMaterialAdapter(r),u=new Array;return l.thinFilmWeight=null!==(n=t.iridescenceFactor)&&void 0!==n?n:0,l.thinFilmIor=null!==(s=null!==(a=t.iridescenceIor)&&void 0!==a?a:t.iridescenceIOR)&&void 0!==s?s:1.3,l.thinFilmThicknessMinimum=null!==(o=t.iridescenceThicknessMinimum)&&void 0!==o?o:100,l.thinFilmThicknessMaximum=null!==(i=t.iridescenceThicknessMaximum)&&void 0!==i?i:400,t.iridescenceTexture&&u.push(this._loader.loadTextureInfoAsync(`${e}/iridescenceTexture`,t.iridescenceTexture,e=>{e.name=`${r.name} (Iridescence)`,l.thinFilmWeightTexture=e})),t.iridescenceThicknessTexture&&u.push(this._loader.loadTextureInfoAsync(`${e}/iridescenceThicknessTexture`,t.iridescenceThicknessTexture,e=>{e.name=`${r.name} (Iridescence Thickness)`,l.thinFilmThicknessTexture=e})),Promise.all(u).then(()=>{})}}let st=!1;function ot(){st||(st=!0,W(nt),K(nt,!0,e=>new at(e)))}ot();const it="KHR_materials_anisotropy";class lt{constructor(e){this.name=it,this.order=195,this._loader=e,this.enabled=this._loader.isExtensionUsed(it)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadAnisotropyPropertiesAsync(n,a,r)),yield Promise.all(s)}))}_loadAnisotropyPropertiesAsync(e,t,r){return D(this,void 0,void 0,function*(){var n,a,s;const o=this._loader._getOrCreateMaterialAdapter(r),i=new Array,l=null!==(n=t.anisotropyStrength)&&void 0!==n?n:0,u=null!==(a=t.anisotropyRotation)&&void 0!==a?a:0;o.specularRoughnessAnisotropy=l,o.geometryTangentAngle=u;const c=null!==(s=t.extensions)&&void 0!==s?s:{};c.EXT_materials_anisotropy_openpbr&&c.EXT_materials_anisotropy_openpbr.openPbrAnisotropyEnabled||o.configureGltfStyleAnisotropy(!0),t.anisotropyTexture&&(t.anisotropyTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/anisotropyTexture`,t.anisotropyTexture,e=>{e.name=`${r.name} (Anisotropy Intensity)`,o.geometryTangentTexture=e}))),yield Promise.all(i)})}}let ut=!1;function ct(){ut||(ut=!0,W(it),K(it,!0,e=>new lt(e)))}ct();const ht="KHR_materials_emissive_strength";class dt{constructor(e){this.name=ht,this.order=170,this._loader=e,this.enabled=this._loader.isExtensionUsed(ht)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){return yield this._loader.loadMaterialPropertiesAsync(e,t,r),this._loadEmissiveProperties(n,a,r),yield Promise.resolve()}))}_loadEmissiveProperties(e,t,r){void 0!==t.emissiveStrength&&(this._loader._getOrCreateMaterialAdapter(r).emissionLuminance=t.emissiveStrength)}}let mt=!1;function _t(){mt||(mt=!0,W(ht),K(ht,!0,e=>new dt(e)))}_t();const pt="KHR_materials_sheen";class gt{constructor(e){this.name=pt,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(pt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadSheenPropertiesAsync(n,a,r)),yield Promise.all(s).then(()=>{})}))}_loadSheenPropertiesAsync(e,r,n){const a=this._loader._getOrCreateMaterialAdapter(n),s=new Array;a.configureFuzz();const o=void 0!==r.sheenColorFactor?t.Color3.FromArray(r.sheenColorFactor):t.Color3.Black(),i=void 0!==r.sheenRoughnessFactor?r.sheenRoughnessFactor:0;return a.fuzzWeight=1,a.fuzzColor=o,a.fuzzRoughness=i,r.sheenColorTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/sheenColorTexture`,r.sheenColorTexture,e=>{e.name=`${n.name} (Sheen Color)`,a.fuzzColorTexture=e})),r.sheenRoughnessTexture&&(r.sheenRoughnessTexture.nonColorData=!0,s.push(this._loader.loadTextureInfoAsync(`${e}/sheenRoughnessTexture`,r.sheenRoughnessTexture,e=>{e.name=`${n.name} (Sheen Roughness)`,a.fuzzRoughnessTexture=e}))),Promise.all(s).then(()=>{})}}let ft=!1;function bt(){ft||(ft=!0,W(pt),K(pt,!0,e=>new gt(e)))}bt();const yt="KHR_materials_fuzz";class vt{constructor(e){this.name=yt,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(yt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadFuzzPropertiesAsync(n,a,r)),yield Promise.all(s).then(()=>{})}))}_loadFuzzPropertiesAsync(e,r,n){const a=this._loader._getOrCreateMaterialAdapter(n),s=new Array;return a.configureFuzz(),a.fuzzWeight=void 0!==r.fuzzFactor?r.fuzzFactor:0,a.fuzzColor=void 0!==r.fuzzColorFactor?t.Color3.FromArray(r.fuzzColorFactor):t.Color3.White(),a.fuzzRoughness=void 0!==r.fuzzRoughnessFactor?r.fuzzRoughnessFactor:.5,r.fuzzTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/fuzzTexture`,r.fuzzTexture,e=>{e.name=`${n.name} (Fuzz)`,a.fuzzWeightTexture=e})),r.fuzzColorTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/fuzzColorTexture`,r.fuzzColorTexture,e=>{e.name=`${n.name} (Fuzz Color)`,a.fuzzColorTexture=e})),r.fuzzRoughnessTexture&&(r.fuzzRoughnessTexture.nonColorData=!0,s.push(this._loader.loadTextureInfoAsync(`${e}/fuzzRoughnessTexture`,r.fuzzRoughnessTexture,e=>{e.name=`${n.name} (Fuzz Roughness)`,a.fuzzRoughnessTexture=e}))),Promise.all(s).then(()=>{})}}let Tt=!1;function xt(){Tt||(Tt=!0,W(yt),K(yt,!0,e=>new vt(e)))}xt();const At="KHR_materials_specular";class Ct{constructor(e){this.name=At,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(At)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadSpecularPropertiesAsync(n,a,r));const o=this._loader._getOrCreateMaterialAdapter(r);return a.extensions&&a.extensions.EXT_materials_specular_edge_color&&a.extensions.EXT_materials_specular_edge_color.specularEdgeColorEnabled&&o.enableSpecularEdgeColor(!0),yield Promise.all(s).then(()=>{})}))}_loadSpecularPropertiesAsync(e,r,n){var a;const s=this._loader._getOrCreateMaterialAdapter(n),o=new Array;return s.specularWeight=null!==(a=r.specularFactor)&&void 0!==a?a:1,s.specularColor=void 0!==r.specularColorFactor?t.Color3.FromArray(r.specularColorFactor):new t.Color3(1,1,1),r.specularTexture&&(r.specularTexture.nonColorData=!0,o.push(this._loader.loadTextureInfoAsync(`${e}/specularTexture`,r.specularTexture,e=>{e.name=`${n.name} (Specular)`,s.specularWeightTexture=e}))),r.specularColorTexture&&o.push(this._loader.loadTextureInfoAsync(`${e}/specularColorTexture`,r.specularColorTexture,e=>{e.name=`${n.name} (Specular Color)`,s.specularColorTexture=e})),Promise.all(o).then(()=>{})}}let Rt=!1;function wt(){Rt||(Rt=!0,W(At),K(At,!0,e=>new Ct(e)))}wt();const Mt="KHR_materials_ior";class Ot{constructor(e){this.name=Mt,this.order=180,this._loader=e,this.enabled=this._loader.isExtensionUsed(Mt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadIorPropertiesAsync(n,a,r)),yield Promise.all(s).then(()=>{})}))}_loadIorPropertiesAsync(e,t,r){const n=this._loader._getOrCreateMaterialAdapter(r),a=void 0!==t.ior?t.ior:Ot._DEFAULT_IOR;return n.specularIor=a,Promise.resolve()}}Ot._DEFAULT_IOR=1.5;let Ft=!1;function Lt(){Ft||(Ft=!0,W(Mt),K(Mt,!0,e=>new Ot(e)))}Lt();const Et="KHR_materials_variants";class St{constructor(e){this.name=Et,this._loader=e,this.enabled=this._loader.isExtensionUsed(Et)&&!this._loader.parent.skipMaterials}dispose(){this._loader=null}static GetAvailableVariants(e){const t=this._GetExtensionMetadata(e);return t?Object.keys(t.variants):[]}getAvailableVariants(e){return St.GetAvailableVariants(e)}static SelectVariant(e,t){const r=this._GetExtensionMetadata(e);if(!r)throw new Error(`Cannot select variant on a glTF mesh that does not have the ${Et} extension`);const n=e=>{const t=r.variants[e];if(t)for(const e of t)e.mesh.material=e.material};if(t instanceof Array)for(const e of t)n(e);else n(t);r.lastSelected=t}selectVariant(e,t){St.SelectVariant(e,t)}static Reset(e){const t=this._GetExtensionMetadata(e);if(!t)throw new Error(`Cannot reset on a glTF mesh that does not have the ${Et} extension`);for(const e of t.original)e.mesh.material=e.material;t.lastSelected=null}reset(e){St.Reset(e)}static GetLastSelectedVariant(e){const t=this._GetExtensionMetadata(e);if(!t)throw new Error(`Cannot get the last selected variant on a glTF mesh that does not have the ${Et} extension`);return t.lastSelected}getLastSelectedVariant(e){return St.GetLastSelectedVariant(e)}static _GetExtensionMetadata(e){var t,r;return(null===(r=null===(t=null==e?void 0:e._internalMetadata)||void 0===t?void 0:t.gltf)||void 0===r?void 0:r[Et])||null}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._variants=t.variants}}onReady(){var e;const t=this._loader.rootBabylonMesh;if(t){const r=this._loader.parent.extensionOptions[Et];(null==r?void 0:r.defaultVariant)&&St.SelectVariant(t,r.defaultVariant),null===(e=null==r?void 0:r.onLoaded)||void 0===e||e.call(r,{get variants(){return St.GetAvailableVariants(t)},get selectedVariant(){const e=St.GetLastSelectedVariant(t);return e?Array.isArray(e)?e[0]:e:St.GetAvailableVariants(t)[0]},set selectedVariant(e){St.SelectVariant(t,e)}})}}_loadMeshPrimitiveAsync(e,r,n,a,s,o){return Y.LoadExtensionAsync(e,s,this.name,(i,l)=>D(this,void 0,void 0,function*(){const u=new Array;return u.push(this._loader._loadMeshPrimitiveAsync(e,r,n,a,s,r=>{if(o(r),r instanceof t.Mesh){const t=Y._GetDrawMode(e,s.mode),n=this._loader.rootBabylonMesh,a=n?n._internalMetadata=n._internalMetadata||{}:{},o=a.gltf=a.gltf||{},c=o[Et]=o[Et]||{lastSelected:null,original:[],variants:{}};c.original.push({mesh:r,material:r.material});for(let e=0;e<l.mappings.length;++e){const a=l.mappings[e],s=q.Get(`${i}/mappings/${e}/material`,this._loader.gltf.materials,a.material);u.push(this._loader._loadMaterialAsync(`#/materials/${a.material}`,s,r,t,e=>{for(let t=0;t<a.variants.length;++t){const s=a.variants[t],o=q.Get(`/extensions/${Et}/variants/${s}`,this._variants,s);c.variants[o.name]=c.variants[o.name]||[],c.variants[o.name].push({mesh:r,material:e}),r.onClonedObservable.add(e=>{const t=e;let a,s=t;do{if(s=s.parent,!s)return;a=St._GetExtensionMetadata(s)}while(null===a);if(n&&a===St._GetExtensionMetadata(n)){s._internalMetadata={};for(const e in n._internalMetadata)s._internalMetadata[e]=n._internalMetadata[e];s._internalMetadata.gltf=[];for(const e in n._internalMetadata.gltf)s._internalMetadata.gltf[e]=n._internalMetadata.gltf[e];s._internalMetadata.gltf[Et]={lastSelected:null,original:[],variants:{}};for(const e of a.original)s._internalMetadata.gltf[Et].original.push({mesh:e.mesh,material:e.material});for(const e in a.variants)if(Object.prototype.hasOwnProperty.call(a.variants,e)){s._internalMetadata.gltf[Et].variants[e]=[];for(const t of a.variants[e])s._internalMetadata.gltf[Et].variants[e].push({mesh:t.mesh,material:t.material})}a=s._internalMetadata.gltf[Et]}for(const e of a.original)e.mesh===r&&(e.mesh=t);for(const e of a.variants[o.name])e.mesh===r&&(e.mesh=t)})}}))}}})),yield Promise.all(u).then(([e])=>e)}))}}let kt=!1;function It(){kt||(kt=!0,W(Et),K(Et,!0,e=>new St(e)))}It();class Pt{static _GetDefaultOptions(){return{renderSize:1024,samples:4,lodGenerationScale:1,lodGenerationOffset:-4,renderTargetTextureType:t.Constants.TEXTURETYPE_HALF_FLOAT,generateMipmaps:!0}}constructor(e,r){this._opaqueRenderTarget=null,this._opaqueMeshesCache=[],this._transparentMeshesCache=[],this._materialObservers={},this._newMeshObserver=null,this._removedMeshObserver=null,this._disposed=!1,this._materialImpls=[],this._adapterCache=new WeakMap,this._translucentMaterialIndices=new Map,this._opaqueOnlySubMeshes=new Map,this._savedSubMeshes=new Map,this._options=Object.assign(Object.assign({},Pt._GetDefaultOptions()),e),this._scene=r,this._scene._transmissionHelper=this,this.onErrorObservable=new t.Observable,this._scene.onDisposeObservable.addOnce(()=>{this.dispose()}),this._parseScene(),this._setupRenderTargets()}addMaterialImpl(e){this._materialImpls.some(t=>t.materialClass===e.materialClass)||this._materialImpls.push(e)}updateOptions(e){if(!Object.keys(e).filter(t=>this._options[t]!==e[t]).length)return;const t=Object.assign(Object.assign({},this._options),e),r=this._options;this._options=t,t.renderSize===r.renderSize&&t.renderTargetTextureType===r.renderTargetTextureType&&t.generateMipmaps===r.generateMipmaps&&this._opaqueRenderTarget?(this._opaqueRenderTarget.samples=t.samples,this._opaqueRenderTarget.lodGenerationScale=t.lodGenerationScale,this._opaqueRenderTarget.lodGenerationOffset=t.lodGenerationOffset):this._setupRenderTargets()}getOpaqueTarget(){return this._opaqueRenderTarget}_getOrCreateAdapter(e){let t=this._adapterCache.get(e);if(!t)for(const r of this._materialImpls)if(e instanceof r.materialClass){t=new r.adapterClass(e),this._adapterCache.set(e,t);break}return t}_classifyMeshMaterials(e){const r=e.material;if(!r)return"opaque";if(!(r instanceof t.MultiMaterial)){const e=this._getOrCreateAdapter(r);return e&&e.isTranslucent()?(e.refractionBackgroundTexture=this._opaqueRenderTarget,"transparent"):"opaque"}let n=!1,a=!1;const s=new Set;for(let e=0;e<r.subMaterials.length;e++){const t=r.subMaterials[e];if(!t){a=!0;continue}const o=this._getOrCreateAdapter(t);o&&o.isTranslucent()?(o.refractionBackgroundTexture=this._opaqueRenderTarget,n=!0,s.add(e)):a=!0}return n&&a?(this._translucentMaterialIndices.set(e,s),this._rebuildOpaqueOnlySubMeshes(e,s),"mixed"):(this._translucentMaterialIndices.delete(e),this._opaqueOnlySubMeshes.delete(e),n?"transparent":"opaque")}_rebuildOpaqueOnlySubMeshes(e,t){e.subMeshes&&this._opaqueOnlySubMeshes.set(e,e.subMeshes.filter(e=>!t.has(e.materialIndex)))}_addMesh(e){this._materialObservers[e.uniqueId]=e.onMaterialChangedObservable.add(this._onMeshMaterialChanged.bind(this)),t.Tools.SetImmediate(()=>{!this._disposed&&e.material&&("transparent"===this._classifyMeshMaterials(e)?-1===this._transparentMeshesCache.indexOf(e)&&this._transparentMeshesCache.push(e):-1===this._opaqueMeshesCache.indexOf(e)&&this._opaqueMeshesCache.push(e))})}_removeMesh(e){e.onMaterialChangedObservable.remove(this._materialObservers[e.uniqueId]),delete this._materialObservers[e.uniqueId];let t=this._transparentMeshesCache.indexOf(e);-1!==t&&this._transparentMeshesCache.splice(t,1),t=this._opaqueMeshesCache.indexOf(e),-1!==t&&this._opaqueMeshesCache.splice(t,1),this._translucentMaterialIndices.delete(e),this._opaqueOnlySubMeshes.delete(e)}_parseScene(){this._scene.meshes.forEach(this._addMesh.bind(this)),this._newMeshObserver=this._scene.onNewMeshAddedObservable.add(this._addMesh.bind(this)),this._removedMeshObserver=this._scene.onMeshRemovedObservable.add(this._removeMesh.bind(this))}_onMeshMaterialChanged(e){const t=this._transparentMeshesCache.indexOf(e),r=this._opaqueMeshesCache.indexOf(e);"transparent"===this._classifyMeshMaterials(e)?-1!==r?(this._opaqueMeshesCache.splice(r,1),this._transparentMeshesCache.push(e)):-1===t&&this._transparentMeshesCache.push(e):-1!==t?(this._transparentMeshesCache.splice(t,1),this._opaqueMeshesCache.push(e)):-1===r&&this._opaqueMeshesCache.push(e)}_isRenderTargetValid(){var e;return null!==(null===(e=this._opaqueRenderTarget)||void 0===e?void 0:e.getInternalTexture())}_setupRenderTargets(){var e,r;let n;this._opaqueRenderTarget&&this._opaqueRenderTarget.dispose(),this._opaqueRenderTarget=new t.RenderTargetTexture("opaqueSceneTexture",this._options.renderSize,this._scene,this._options.generateMipmaps,void 0,this._options.renderTargetTextureType),this._opaqueRenderTarget.ignoreCameraViewport=!0,this._opaqueRenderTarget.renderList=this._opaqueMeshesCache,this._opaqueRenderTarget.forceLayerMaskCheck=!0,this._opaqueRenderTarget.clearColor=null!==(r=null===(e=this._options.clearColor)||void 0===e?void 0:e.clone())&&void 0!==r?r:this._scene.clearColor.clone(),this._opaqueRenderTarget.clearColor.a=0,this._opaqueRenderTarget.gammaSpace=!1,this._opaqueRenderTarget.lodGenerationScale=this._options.lodGenerationScale,this._opaqueRenderTarget.lodGenerationOffset=this._options.lodGenerationOffset,this._opaqueRenderTarget.samples=this._options.samples,this._opaqueRenderTarget.renderSprites=!0,this._opaqueRenderTarget.renderParticles=!0,this._opaqueRenderTarget.disableImageProcessing=!0,this._opaqueRenderTarget.onBeforeBindObservable.add(e=>{n=this._scene.environmentIntensity,this._scene.environmentIntensity=1,this._options.clearColor?e.clearColor.copyFrom(this._options.clearColor):this._scene.clearColor.toLinearSpaceToRef(e.clearColor,this._scene.getEngine().useExactSrgbConversions),e.clearColor.a=0;const t=this._opaqueOnlySubMeshes.entries();for(let e=t.next();!e.done;e=t.next()){const t=e.value[0],r=e.value[1];t.subMeshes&&(this._savedSubMeshes.set(t,t.subMeshes),t.subMeshes=r)}}),this._opaqueRenderTarget.onAfterUnbindObservable.add(()=>{this._scene.environmentIntensity=n;const e=this._savedSubMeshes.entries();for(let t=e.next();!t.done;t=e.next())t.value[0].subMeshes=t.value[1];this._savedSubMeshes.clear()});for(const e of this._transparentMeshesCache)e.material&&this._classifyMeshMaterials(e);const a=this._translucentMaterialIndices.entries();for(let e=a.next();!e.done;e=a.next()){const t=e.value[0];t.material&&this._classifyMeshMaterials(t)}}dispose(){var e,t;this._disposed=!0,null===(e=this._newMeshObserver)||void 0===e||e.remove(),null===(t=this._removedMeshObserver)||void 0===t||t.remove(),this._newMeshObserver=null,this._removedMeshObserver=null;const r=[...this._transparentMeshesCache,...this._opaqueMeshesCache];for(const e of r){const t=this._materialObservers[e.uniqueId];t&&(t.remove(),delete this._materialObservers[e.uniqueId])}for(const e of this._scene.meshes){const t=this._materialObservers[e.uniqueId];t&&(t.remove(),delete this._materialObservers[e.uniqueId])}this._materialObservers={},this._scene._transmissionHelper=void 0,this._opaqueRenderTarget&&(this._opaqueRenderTarget.dispose(),this._opaqueRenderTarget=null),this._transparentMeshesCache=[],this._opaqueMeshesCache=[],this._translucentMaterialIndices.clear(),this._opaqueOnlySubMeshes.clear(),this._savedSubMeshes.clear()}}function Bt(e,t){if(e.parent.dontUseTransmissionHelper)return;const r=t.getScene()._transmissionHelper,n=null!=r?r:new Pt({},t.getScene());for(const t of Array.from(e._pbrMaterialImpls.values()))n.addMaterialImpl(t);r&&!r._isRenderTargetValid()&&r._setupRenderTargets()}const Nt="KHR_materials_transmission";class Gt{constructor(e){this.name=Nt,this.order=175,this._loader=e,this.enabled=this._loader.isExtensionUsed(Nt),this.enabled&&(e.parent.transparencyAsCoverage=!0)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadTransparentPropertiesAsync(n,t,r,a)),yield Promise.all(s).then(()=>{})}))}_loadTransparentPropertiesAsync(e,t,r,n){const a=this._loader._getOrCreateMaterialAdapter(r),s=void 0!==n.transmissionFactor?n.transmissionFactor:0;if(0===s||!a)return Promise.resolve();a.configureTransmission(),a.transmissionWeight=s,s>0&&Bt(this._loader,r);let o=Promise.resolve(null);return n.transmissionTexture&&(n.transmissionTexture.nonColorData=!0,o=this._loader.loadTextureInfoAsync(`${e}/transmissionTexture`,n.transmissionTexture,e=>{e.name=`${r.name} (Transmission)`,a.transmissionWeightTexture=e})),o.then(()=>{})}}let $t=!1;function Dt(){$t||($t=!0,W(Nt),K(Nt,!0,e=>new Gt(e)))}Dt();const Vt="KHR_materials_diffuse_transmission";class Ht{constructor(e){this.name=Vt,this.order=174,this._loader=e,this.enabled=this._loader.isExtensionUsed(Vt),this.enabled&&(e.parent.transparencyAsCoverage=!0)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadTranslucentPropertiesAsync(n,t,r,a)),yield Promise.all(s).then(()=>{})}))}_loadTranslucentPropertiesAsync(e,r,n,a){var s;const o=this._loader._getOrCreateMaterialAdapter(n);o.configureSubsurface(),o.subsurfaceWeight=null!==(s=a.diffuseTransmissionFactor)&&void 0!==s?s:0,o.subsurfaceWeight>0&&Bt(this._loader,n),o.diffuseTransmissionTint=void 0!==a.diffuseTransmissionColorFactor?t.Color3.FromArray(a.diffuseTransmissionColorFactor):t.Color3.White();const i=new Array;return a.diffuseTransmissionTexture&&(a.diffuseTransmissionTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/diffuseTransmissionTexture`,a.diffuseTransmissionTexture).then(e=>{e.name=`${n.name} (Diffuse Transmission)`,o.subsurfaceWeightTexture=e}))),a.diffuseTransmissionColorTexture&&i.push(this._loader.loadTextureInfoAsync(`${e}/diffuseTransmissionColorTexture`,a.diffuseTransmissionColorTexture).then(e=>{e.name=`${n.name} (Diffuse Transmission Color)`,o.diffuseTransmissionTintTexture=e})),Promise.all(i).then(()=>{})}}let Kt=!1;function Wt(){Kt||(Kt=!0,W(Vt),K(Vt,!0,e=>new Ht(e)))}Wt();const Ut="KHR_materials_volume";class zt{constructor(e){this.name=Ut,this.order=173,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ut),this.enabled&&this._loader._disableInstancedMesh++}dispose(){this.enabled&&this._loader._disableInstancedMesh--,this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadVolumePropertiesAsync(n,t,r,a)),yield Promise.all(s).then(()=>{})}))}_loadVolumePropertiesAsync(e,r,n,a){var s;const o=this._loader._getOrCreateMaterialAdapter(n);if(0===o.transmissionWeight&&0===o.subsurfaceWeight||!a.thicknessFactor)return Promise.resolve();o.geometryThinWalled=!1;const i=void 0!==a.attenuationDistance?a.attenuationDistance:Number.MAX_VALUE,l=void 0!==a.attenuationColor&&3==a.attenuationColor.length?t.Color3.FromArray(a.attenuationColor):t.Color3.White();o.configureVolume(),o.transmissionColor=l,o.transmissionDepth=i,o.volumeThickness=null!==(s=a.thicknessFactor)&&void 0!==s?s:0;const u=new Array;return a.thicknessTexture&&(a.thicknessTexture.nonColorData=!0,u.push(this._loader.loadTextureInfoAsync(`${e}/thicknessTexture`,a.thicknessTexture,e=>{e.name=`${n.name} (Thickness)`,o.volumeThicknessTexture=e}))),Promise.all(u).then(()=>{})}}let qt=!1;function jt(){qt||(qt=!0,W(Ut),K(Ut,!0,e=>new zt(e)))}jt();const Yt="KHR_materials_volume_scatter";class Xt{constructor(e){this.name=Yt,this.order=172,this._loader=e,this.enabled=this._loader.isExtensionUsed(Yt),this.enabled&&this._loader._disableInstancedMesh++}dispose(){this.enabled&&this._loader._disableInstancedMesh--,this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadVolumePropertiesAsync(n,t,r,a)),yield Promise.all(s).then(()=>{})}))}_loadVolumePropertiesAsync(e,r,n,a){const s=this._loader._getOrCreateMaterialAdapter(n);if(0===s.transmissionWeight&&0===s.subsurfaceWeight||s.geometryThinWalled)return Promise.resolve();const o=void 0!==a.multiscatterColorFactor&&3==a.multiscatterColorFactor.length?t.Color3.FromArray(a.multiscatterColorFactor):t.Color3.Black(),i=void 0!==a.scatterAnisotropy?a.scatterAnisotropy:0;let l=Promise.resolve(null);a.multiscatterColorTexture&&(a.multiscatterColorTexture.nonColorData=!0,l=this._loader.loadTextureInfoAsync(`${e}/multiscatterColorTexture`,a.multiscatterColorTexture,e=>{e.name=`${n.name} (Scatter Color)`,s.transmissionWeight>0&&(s.transmissionScatterTexture=e),s.subsurfaceWeight>0&&(s.subsurfaceColorTexture=e)}));const u=new t.Vector3(-Math.log(s.transmissionColor.r),-Math.log(s.transmissionColor.g),-Math.log(s.transmissionColor.b));if(u.scaleInPlace(1/Math.max(s.transmissionDepth,1e-6)),s.transmissionWeight>0){const e=function(e){const r=new t.Vector3(e.r,e.g,e.b),n=new t.Vector3(4.09712,4.09712,4.09712);n.addInPlace(new t.Vector3(4.20863,4.20863,4.20863).multiplyInPlace(r));const a=new t.Vector3(9.59217,9.59217,9.59217);return a.addInPlace(new t.Vector3(41.6808,41.6808,41.6808).multiplyInPlace(r)),a.addInPlace(new t.Vector3(17.7126,17.7126,17.7126).multiplyInPlace(r.multiply(r))),n.subtractInPlace(new t.Vector3(Math.sqrt(a.x),Math.sqrt(a.y),Math.sqrt(a.z))),new t.Vector3(1,1,1).subtract(n.multiply(n))}(o),r=u.multiply(e);r.scaleInPlace(s.transmissionDepth),s.transmissionScatter.set(r.x,r.y,r.z),s.transmissionScatterAnisotropy=i}if(s.subsurfaceWeight>0){s.subsurfaceScatterAnisotropy=i,s.subsurfaceColor=o;const e=new t.Vector3(0!==u.x?1/u.x:1,0!==u.y?1/u.y:1,0!==u.z?1/u.z:1);s.subsurfaceRadius=Math.max(e.x,e.y,e.z),s.subsurfaceRadiusScale=new t.Color3(e.x/s.subsurfaceRadius,e.y/s.subsurfaceRadius,e.z/s.subsurfaceRadius)}return l.then(()=>{})}}let Qt=!1;function Jt(){Qt||(Qt=!0,W(Yt),K(Yt,!0,e=>new Xt(e)))}Jt();const Zt="KHR_materials_dispersion";class er{constructor(e){this.name=Zt,this.order=174,this._loader=e,this.enabled=this._loader.isExtensionUsed(Zt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadDispersionPropertiesAsync(n,t,r,a)),yield Promise.all(s).then(()=>{})}))}_loadDispersionPropertiesAsync(e,t,r,n){const a=this._loader._getOrCreateMaterialAdapter(r);return 0!=a.transmissionWeight&&n.dispersion?(a.transmissionDispersionAbbeNumber=20,a.transmissionDispersionScale=n.dispersion,Promise.resolve()):Promise.resolve()}}let tr=!1;function rr(){tr||(tr=!0,W(Zt),K(Zt,!0,e=>new er(e)))}rr();const nr="KHR_materials_diffuse_roughness";class ar{constructor(e){this.name=nr,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(nr)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=new Array;return s.push(this._loader.loadMaterialPropertiesAsync(e,t,r)),s.push(this._loadDiffuseRoughnessPropertiesAsync(n,a,r)),yield Promise.all(s).then(()=>{})}))}_loadDiffuseRoughnessPropertiesAsync(e,t,r){var n;const a=this._loader._getOrCreateMaterialAdapter(r),s=new Array;return a.baseDiffuseRoughness=null!==(n=t.diffuseRoughnessFactor)&&void 0!==n?n:0,t.diffuseRoughnessTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/diffuseRoughnessTexture`,t.diffuseRoughnessTexture,e=>{e.name=`${r.name} (Diffuse Roughness)`,a.baseDiffuseRoughnessTexture=e})),Promise.all(s).then(()=>{})}}let sr=!1;function or(){sr||(sr=!0,W(nr),K(nr,!0,e=>new ar(e)))}or();const ir="KHR_mesh_quantization";class lr{constructor(e){this.name=ir,this.enabled=e.isExtensionUsed(ir)}dispose(){}}let ur=!1;function cr(){ur||(ur=!0,W(ir),K(ir,!0,e=>new lr(e)))}cr();const hr="KHR_texture_basisu";class dr{constructor(e){this.name=hr,this._loader=e,this.enabled=e.isExtensionUsed(hr)}dispose(){this._loader=null}_loadTextureAsync(e,t,r){return Y.LoadExtensionAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){const s=null==t.sampler?Y.DefaultSampler:q.Get(`${e}/sampler`,this._loader.gltf.samplers,t.sampler),o=q.Get(`${n}/source`,this._loader.gltf.images,a.source);return yield this._loader._createTextureAsync(e,s,o,e=>{r(e)},t._textureInfo.nonColorData?{useRGBAIfASTCBC7NotAvailableWhenUASTC:!0}:void 0,!t._textureInfo.nonColorData)}))}}let mr=!1;function _r(){mr||(mr=!0,W(hr),K(hr,!0,e=>new dr(e)))}_r();const pr="KHR_texture_transform";class gr{constructor(e){this.name=pr,this._loader=e,this.enabled=this._loader.isExtensionUsed(pr)}dispose(){this._loader=null}loadTextureInfoAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(a,s)=>D(this,void 0,void 0,function*(){return yield this._loader.loadTextureInfoAsync(e,r,e=>{if(!(e instanceof t.Texture))throw new Error(`${a}: Texture type not supported`);s.offset&&(e.uOffset=s.offset[0],e.vOffset=s.offset[1]),e.uRotationCenter=0,e.vRotationCenter=0,s.rotation&&(e.wAng=-s.rotation),s.scale&&(e.uScale=s.scale[0],e.vScale=s.scale[1]),null!=s.texCoord&&(e.coordinatesIndex=s.texCoord),n(e)})}))}}let fr=!1;function br(){fr||(fr=!0,W(pr),K(pr,!0,e=>new gr(e)))}br();const yr="KHR_xmp_json_ld";class vr{constructor(e){this.name=yr,this.order=100,this._loader=e,this.enabled=this._loader.isExtensionUsed(yr)}dispose(){this._loader=null}onLoading(){var e,t,r;if(null===this._loader.rootBabylonMesh)return;const n=null===(e=this._loader.gltf.extensions)||void 0===e?void 0:e.KHR_xmp_json_ld,a=null===(r=null===(t=this._loader.gltf.asset)||void 0===t?void 0:t.extensions)||void 0===r?void 0:r.KHR_xmp_json_ld;if(n&&a){const e=+a.packet;n.packets&&e<n.packets.length&&(this._loader.rootBabylonMesh.metadata=this._loader.rootBabylonMesh.metadata||{},this._loader.rootBabylonMesh.metadata.xmp=n.packets[e])}}}let Tr=!1;function xr(){Tr||(Tr=!0,W(yr),K(yr,!0,e=>new vr(e)))}xr();const Ar="KHR_animation_pointer";class Cr{constructor(e){this.name=Ar,this._loader=e,this._pathToObjectConverter=B(this._loader.gltf)}get enabled(){return this._loader.isExtensionUsed(Ar)}dispose(){this._loader=null,delete this._pathToObjectConverter}_loadAnimationChannelAsync(e,r,n,a,s){var o;const i=null===(o=a.target.extensions)||void 0===o?void 0:o.KHR_animation_pointer;if(!i||!this._pathToObjectConverter)return null;"pointer"!==a.target.path&&t.Logger.Warn(`${e}/target/path: Value (${a.target.path}) must be (pointer) when using the ${this.name} extension`),null!=a.target.node&&t.Logger.Warn(`${e}/target/node: Value (${a.target.node}) must not be present when using the ${this.name} extension`);const l=`${e}/extensions/${this.name}`,u=i.pointer;if(!u)throw new Error(`${l}: Pointer is missing`);try{const t=this._pathToObjectConverter.convert(u);if(!t.info.interpolation)throw new Error(`${l}/pointer: Interpolation is missing`);return this._loader._loadAnimationChannelFromTargetInfoAsync(e,r,n,a,{object:t.object,info:t.info.interpolation},s)}catch(e){return t.Logger.Warn(`${l}/pointer: Invalid pointer (${u}) skipped`),null}}}let Rr=!1;function wr(){Rr||(Rr=!0,W(Ar),K(Ar,!0,e=>new Cr(e)))}function Mr(e,r,n,a){return t.Vector3.FromArray(r,n).scaleInPlace(a)}function Or(e,r,n,a){return t.Quaternion.FromArray(r,n).scaleInPlace(a)}function Fr(e,t,r,n){const a=new Array(e._numMorphTargets);for(let e=0;e<a.length;e++)a[e]=t[r++]*n;return a}class Lr{constructor(e,t,r,n){this.type=e,this.name=t,this.getValue=r,this.getStride=n}_buildAnimation(e,r,n){const a=new t.Animation(e,this.name,r,this.type);return a.setKeys(n,!0),a}}class Er extends Lr{buildAnimations(e,t,r,n){const a=[];return a.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,r,n)}),a}}class Sr extends Lr{buildAnimations(e,r,n,a){const s=[];if(e._numMorphTargets)for(let o=0;o<e._numMorphTargets;o++){const i=new t.Animation(`${r}_${o}`,this.name,n,this.type);if(i.setKeys(a.map(e=>({frame:e.frame,inTangent:e.inTangent?e.inTangent[o]:void 0,value:e.value[o],outTangent:e.outTangent?e.outTangent[o]:void 0,interpolation:e.interpolation})),!0),e._primitiveBabylonMeshes)for(const t of e._primitiveBabylonMeshes)if(t.morphTargetManager){const e=t.morphTargetManager.getTarget(o),r=i.clone();e.animations.push(r),s.push({babylonAnimatable:e,babylonAnimation:r})}}return s}}let kr=!1;function Ir(){kr||(kr=!0,G("/nodes/{}/translation",[new Er(t.Animation.ANIMATIONTYPE_VECTOR3,"position",Mr,()=>3)]),G("/nodes/{}/rotation",[new Er(t.Animation.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",Or,()=>4)]),G("/nodes/{}/scale",[new Er(t.Animation.ANIMATIONTYPE_VECTOR3,"scaling",Mr,()=>3)]),G("/nodes/{}/weights",[new Sr(t.Animation.ANIMATIONTYPE_FLOAT,"influence",Fr,e=>e._numMorphTargets)]))}var Pr={__proto__:null,AnimationPropertyInfo:Lr,RegisterGLTFLoaderAnimation:Ir,TransformNodeAnimationPropertyInfo:Er,WeightAnimationPropertyInfo:Sr,getQuaternion:Or,getVector3:Mr,getWeights:Fr};function Br(e,r,n,a){return t.Color3.FromArray(r,n).scale(a)}function Nr(e,t,r,n){return t[r+3]*n}function Gr(e,t,r,n){return t[r]*n}function $r(e,t,r,n){return-t[r]*n}function Dr(e,t,r,n){return t[r+1]*n}function Vr(e,t,r,n){return t[r]*n*2}function Hr(e){return{scale:[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.uScale`,Gr,()=>2),new Wr(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.vScale`,Dr,()=>2)],offset:[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.uOffset`,Gr,()=>2),new Wr(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.vOffset`,Dr,()=>2)],rotation:[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.wAng`,$r,()=>1)]}}class Kr extends Lr{buildAnimations(e,t,r,n){return[{babylonAnimatable:e._babylonCamera,babylonAnimation:this._buildAnimation(t,r,n)}]}}class Wr extends Lr{buildAnimations(e,t,r,n){const a=[];for(const s in e._data)a.push({babylonAnimatable:e._data[s].babylonMaterial,babylonAnimation:this._buildAnimation(t,r,n)});return a}}class Ur extends Lr{buildAnimations(e,t,r,n){return[{babylonAnimatable:e._babylonLight,babylonAnimation:this._buildAnimation(t,r,n)}]}}class zr extends Lr{buildAnimations(e,t,r,n){return e._primitiveBabylonMeshes?e._primitiveBabylonMeshes.map(e=>({babylonAnimatable:e,babylonAnimation:this._buildAnimation(t,r,n)})):[]}}let qr=!1;!function(){if(qr)return;qr=!0,Ir(),G("/cameras/{}/orthographic/xmag",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"orthoLeft",$r,()=>1),new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"orthoRight",Dr,()=>1)]),G("/cameras/{}/orthographic/ymag",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"orthoBottom",$r,()=>1),new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"orthoTop",Dr,()=>1)]),G("/cameras/{}/orthographic/zfar",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"maxZ",Gr,()=>1)]),G("/cameras/{}/orthographic/znear",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"minZ",Gr,()=>1)]),G("/cameras/{}/perspective/yfov",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"fov",Gr,()=>1)]),G("/cameras/{}/perspective/zfar",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"maxZ",Gr,()=>1)]),G("/cameras/{}/perspective/znear",[new Kr(t.Animation.ANIMATIONTYPE_FLOAT,"minZ",Gr,()=>1)]),G("/materials/{}/pbrMetallicRoughness/baseColorFactor",[new Wr(t.Animation.ANIMATIONTYPE_COLOR3,"albedoColor",Br,()=>4),new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"alpha",Nr,()=>4)]),G("/materials/{}/pbrMetallicRoughness/metallicFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"metallic",Gr,()=>1)]),G("/materials/{}/pbrMetallicRoughness/metallicFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"roughness",Gr,()=>1)]);const e=Hr("albedoTexture");G("/materials/{}/pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale",e.scale),G("/materials/{}/pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset",e.offset),G("/materials/{}/pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/rotation",e.rotation);const r=Hr("metallicTexture");G("//materials/{}/pbrMetallicRoughness/metallicRoughnessTexture/scale",r.scale),G("//materials/{}/pbrMetallicRoughness/metallicRoughnessTexture/offset",r.offset),G("//materials/{}/pbrMetallicRoughness/metallicRoughnessTexture/rotation",r.rotation),G("/materials/{}/emissiveFactor",[new Wr(t.Animation.ANIMATIONTYPE_COLOR3,"emissiveColor",Br,()=>3)]);const n=Hr("bumpTexture");G("/materials/{}/normalTexture/scale",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"bumpTexture.level",Gr,()=>1)]),G("/materials/{}/normalTexture/extensions/KHR_texture_transform/scale",n.scale),G("/materials/{}/normalTexture/extensions/KHR_texture_transform/offset",n.offset),G("/materials/{}/normalTexture/extensions/KHR_texture_transform/rotation",n.rotation),G("/materials/{}/occlusionTexture/strength",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"ambientTextureStrength",Gr,()=>1)]);const a=Hr("ambientTexture");G("/materials/{}/occlusionTexture/extensions/KHR_texture_transform/scale",a.scale),G("/materials/{}/occlusionTexture/extensions/KHR_texture_transform/offset",a.offset),G("/materials/{}/occlusionTexture/extensions/KHR_texture_transform/rotation",a.rotation);const s=Hr("emissiveTexture");G("/materials/{}/emissiveTexture/extensions/KHR_texture_transform/scale",s.scale),G("/materials/{}/emissiveTexture/extensions/KHR_texture_transform/offset",s.offset),G("/materials/{}/emissiveTexture/extensions/KHR_texture_transform/rotation",s.rotation),G("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyStrength",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"anisotropy.intensity",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyRotation",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"anisotropy.angle",Gr,()=>1)]);const o=Hr("anisotropy.texture");G("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyTexture/extensions/KHR_texture_transform/scale",o.scale),G("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyTexture/extensions/KHR_texture_transform/offset",o.offset),G("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyTexture/extensions/KHR_texture_transform/rotation",o.rotation),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"clearCoat.intensity",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"clearCoat.roughness",Gr,()=>1)]);const i=Hr("clearCoat.texture");G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatTexture/extensions/KHR_texture_transform/scale",i.scale),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatTexture/extensions/KHR_texture_transform/offset",i.offset),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatTexture/extensions/KHR_texture_transform/rotation",i.rotation);const l=Hr("clearCoat.bumpTexture");G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/scale",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"clearCoat.bumpTexture.level",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/scale",l.scale),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/offset",l.offset),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/rotation",l.rotation);const u=Hr("clearCoat.textureRoughness");G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessTexture/extensions/KHR_texture_transform/scale",u.scale),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessTexture/extensions/KHR_texture_transform/offset",u.offset),G("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessTexture/extensions/KHR_texture_transform/rotation",u.rotation),G("/materials/{}/extensions/KHR_materials_dispersion/dispersionFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.dispersion",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_emissive_strength/emissiveStrength",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"emissiveIntensity",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_ior/ior",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"indexOfRefraction",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.intensity",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceIor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.indexOfRefraction",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessMinimum",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.minimumThickness",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessMaximum",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.maximumThickness",Gr,()=>1)]);const c=Hr("iridescence.texture");G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceTexture/extensions/KHR_texture_transform/scale",c.scale),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceTexture/extensions/KHR_texture_transform/offset",c.offset),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceTexture/extensions/KHR_texture_transform/rotation",c.rotation);const h=Hr("iridescence.thicknessTexture");G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessTexture/extensions/KHR_texture_transform/scale",h.scale),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessTexture/extensions/KHR_texture_transform/offset",h.offset),G("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessTexture/extensions/KHR_texture_transform/rotation",h.rotation),G("/materials/{}/extensions/KHR_materials_sheen/sheenColorFactor",[new Wr(t.Animation.ANIMATIONTYPE_COLOR3,"sheen.color",Br,()=>3)]),G("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"sheen.roughness",Gr,()=>1)]);const d=Hr("sheen.texture");G("/materials/{}/extensions/KHR_materials_sheen/sheenColorTexture/extensions/KHR_texture_transform/scale",d.scale),G("/materials/{}/extensions/KHR_materials_sheen/sheenColorTexture/extensions/KHR_texture_transform/offset",d.offset),G("/materials/{}/extensions/KHR_materials_sheen/sheenColorTexture/extensions/KHR_texture_transform/rotation",d.rotation);const m=Hr("sheen.textureRoughness");G("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessTexture/extensions/KHR_texture_transform/scale",m.scale),G("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessTexture/extensions/KHR_texture_transform/offset",m.offset),G("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessTexture/extensions/KHR_texture_transform/rotation",m.rotation),G("/materials/{}/extensions/KHR_materials_specular/specularFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"metallicF0Factor",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_specular/specularColorFactor",[new Wr(t.Animation.ANIMATIONTYPE_COLOR3,"metallicReflectanceColor",Br,()=>3)]);const _=Hr("metallicReflectanceTexture");G("/materials/{}/extensions/KHR_materials_specular/specularTexture/extensions/KHR_texture_transform/scale",_.scale),G("/materials/{}/extensions/KHR_materials_specular/specularTexture/extensions/KHR_texture_transform/offset",_.offset),G("/materials/{}/extensions/KHR_materials_specular/specularTexture/extensions/KHR_texture_transform/rotation",_.rotation);const p=Hr("reflectanceTexture");G("/materials/{}/extensions/KHR_materials_specular/specularColorTexture/extensions/KHR_texture_transform/scale",p.scale),G("/materials/{}/extensions/KHR_materials_specular/specularColorTexture/extensions/KHR_texture_transform/offset",p.offset),G("/materials/{}/extensions/KHR_materials_specular/specularColorTexture/extensions/KHR_texture_transform/rotation",p.rotation),G("/materials/{}/extensions/KHR_materials_transmission/transmissionFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.refractionIntensity",Gr,()=>1)]);const g=Hr("subSurface.refractionIntensityTexture");G("/materials/{}/extensions/KHR_materials_transmission/transmissionTexture/extensions/KHR_texture_transform/scale",g.scale),G("/materials/{}/extensions/KHR_materials_transmission/transmissionTexture/extensions/KHR_texture_transform/offset",g.offset),G("/materials/{}/extensions/KHR_materials_transmission/transmissionTexture/extensions/KHR_texture_transform/rotation",g.rotation),G("/materials/{}/extensions/KHR_materials_volume/attenuationColor",[new Wr(t.Animation.ANIMATIONTYPE_COLOR3,"subSurface.tintColor",Br,()=>3)]),G("/materials/{}/extensions/KHR_materials_volume/attenuationDistance",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.tintColorAtDistance",Gr,()=>1)]),G("/materials/{}/extensions/KHR_materials_volume/thicknessFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.maximumThickness",Gr,()=>1)]);const f=Hr("subSurface.thicknessTexture");G("/materials/{}/extensions/KHR_materials_volume/thicknessTexture/extensions/KHR_texture_transform/scale",f.scale),G("/materials/{}/extensions/KHR_materials_volume/thicknessTexture/extensions/KHR_texture_transform/offset",f.offset),G("/materials/{}/extensions/KHR_materials_volume/thicknessTexture/extensions/KHR_texture_transform/rotation",f.rotation),G("/materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionFactor",[new Wr(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.translucencyIntensity",Gr,()=>1)]);const b=Hr("subSurface.translucencyIntensityTexture");G("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionTexture/extensions/KHR_texture_transform/scale",b.scale),G("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionTexture/extensions/KHR_texture_transform/offset",b.offset),G("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionTexture/extensions/KHR_texture_transform/rotation",b.rotation),G("/materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorFactor",[new Wr(t.Animation.ANIMATIONTYPE_COLOR3,"subSurface.translucencyColor",Br,()=>3)]);const y=Hr("subSurface.translucencyColorTexture");G("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorTexture/extensions/KHR_texture_transform/scale",y.scale),G("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorTexture/extensions/KHR_texture_transform/offset",y.offset),G("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorTexture/extensions/KHR_texture_transform/rotation",y.rotation),G("/extensions/KHR_lights_punctual/lights/{}/color",[new Ur(t.Animation.ANIMATIONTYPE_COLOR3,"diffuse",Br,()=>3)]),G("/extensions/KHR_lights_punctual/lights/{}/intensity",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"intensity",Gr,()=>1)]),G("/extensions/KHR_lights_punctual/lights/{}/range",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"range",Gr,()=>1)]),G("/extensions/KHR_lights_punctual/lights/{}/spot/innerConeAngle",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"innerAngle",Vr,()=>1)]),G("/extensions/KHR_lights_punctual/lights/{}/spot/outerConeAngle",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"angle",Vr,()=>1)]),G("/extensions/EXT_lights_area/lights/{}/color",[new Ur(t.Animation.ANIMATIONTYPE_COLOR3,"diffuse",Br,()=>3)]),G("/extensions/EXT_lights_area/lights/{}/intensity",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"intensity",Gr,()=>1)]),G("/extensions/EXT_lights_area/lights/{}/size",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"radius",Gr,()=>1)]),G("/extensions/EXT_lights_area/lights/{}/rect/aspect",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"radius",Gr,()=>1)]),G("/nodes/{}/extensions/EXT_lights_ies/color",[new Ur(t.Animation.ANIMATIONTYPE_COLOR3,"diffuse",Br,()=>3)]),G("/nodes/{}/extensions/EXT_lights_ies/multiplier",[new Ur(t.Animation.ANIMATIONTYPE_FLOAT,"intensity",Gr,()=>1)]),G("/nodes/{}/extensions/KHR_node_visibility/visible",[new zr(t.Animation.ANIMATIONTYPE_FLOAT,"isVisible",Gr,()=>1)])}(),wr();const jr="MSFT_audio_emitter";class Yr{constructor(e){this.name=jr,this._loader=e,this.enabled=this._loader.isExtensionUsed(jr)}dispose(){this._loader=null,this._clips=null,this._emitters=null}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._clips=t.clips,this._emitters=t.emitters,q.Assign(this._clips),q.Assign(this._emitters)}}loadSceneAsync(e,t){return Y.LoadExtensionAsync(e,t,this.name,(r,n)=>D(this,void 0,void 0,function*(){const a=new Array;a.push(this._loader.loadSceneAsync(e,t));for(const e of n.emitters){const t=q.Get(`${r}/emitters`,this._emitters,e);if(null!=t.refDistance||null!=t.maxDistance||null!=t.rolloffFactor||null!=t.distanceModel||null!=t.innerAngle||null!=t.outerAngle)throw new Error(`${r}: Direction or Distance properties are not allowed on emitters attached to a scene`);a.push(this._loadEmitterAsync(`${r}/emitters/${t.index}`,t))}yield Promise.all(a)}))}loadNodeAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(e,a)=>D(this,void 0,void 0,function*(){const s=new Array,o=yield this._loader.loadNodeAsync(e,r,r=>{for(const n of a.emitters){const a=q.Get(`${e}/emitters`,this._emitters,n);s.push(this._loadEmitterAsync(`${e}/emitters/${a.index}`,a).then(()=>{for(const e of a._babylonSounds)e.attachToMesh(r),null==a.innerAngle&&null==a.outerAngle||(e.setLocalDirectionToMesh(t.Vector3.Forward()),e.setDirectionalCone(2*t.Tools.ToDegrees(null==a.innerAngle?Math.PI:a.innerAngle),2*t.Tools.ToDegrees(null==a.outerAngle?Math.PI:a.outerAngle),0))}))}n(r)});return yield Promise.all(s),o}))}loadAnimationAsync(e,t){return Y.LoadExtensionAsync(e,t,this.name,(r,n)=>D(this,void 0,void 0,function*(){const a=yield this._loader.loadAnimationAsync(e,t),s=new Array;q.Assign(n.events);for(const o of n.events)s.push(this._loadAnimationEventAsync(`${r}/events/${o.index}`,e,t,o,a));return yield Promise.all(s),a}))}_loadClipAsync(e,r){if(r._objectURL)return r._objectURL;let n;if(r.uri)n=this._loader.loadUriAsync(e,r,r.uri);else{const t=q.Get(`${e}/bufferView`,this._loader.gltf.bufferViews,r.bufferView);n=this._loader.loadBufferViewAsync(`/bufferViews/${t.index}`,t)}return r._objectURL=n.then(e=>{const n=t.GetBlobBufferSource(e);return URL.createObjectURL(new Blob([n],{type:r.mimeType}))}),r._objectURL}_loadEmitterAsync(e,r){if(r._babylonSounds=r._babylonSounds||[],!r._babylonData){const e=new Array,n=r.name||`emitter${r.index}`,a={loop:!1,autoplay:!1,volume:null==r.volume?1:r.volume};for(let s=0;s<r.clips.length;s++){const o=`/extensions/${this.name}/clips`,i=q.Get(o,this._clips,r.clips[s].clip);e.push(this._loadClipAsync(`${o}/${r.clips[s].clip}`,i).then(e=>{const o=r._babylonSounds[s]=new t.Sound(n,e,this._loader.babylonScene,null,a);o.refDistance=r.refDistance||1,o.maxDistance=r.maxDistance||256,o.rolloffFactor=r.rolloffFactor||1,o.distanceModel=r.distanceModel||"exponential"}))}const s=Promise.all(e).then(()=>{const e=r.clips.map(e=>e.weight||1),n=new t.WeightedSound(r.loop||!1,r._babylonSounds,e);r.innerAngle&&(n.directionalConeInnerAngle=2*t.Tools.ToDegrees(r.innerAngle)),r.outerAngle&&(n.directionalConeOuterAngle=2*t.Tools.ToDegrees(r.outerAngle)),r.volume&&(n.volume=r.volume),r._babylonData.sound=n});r._babylonData={loaded:s}}return r._babylonData.loaded}_getEventAction(e,t,r,n,a){switch(r){case"play":return e=>{const r=(a||0)+(e-n);t.play(r)};case"stop":return()=>{t.stop()};case"pause":return()=>{t.pause()};default:throw new Error(`${e}: Unsupported action ${r}`)}}_loadAnimationEventAsync(e,r,n,a,s){if(0==s.targetedAnimations.length)return Promise.resolve();const o=s.targetedAnimations[0],i=a.emitter,l=q.Get(`/extensions/${this.name}/emitters`,this._emitters,i);return this._loadEmitterAsync(e,l).then(()=>{const r=l._babylonData.sound;if(r){const n=new t.AnimationEvent(a.time,this._getEventAction(e,r,a.action,a.time,a.startOffset));o.animation.addEvent(n),s.onAnimationGroupEndObservable.add(()=>{r.stop()}),s.onAnimationGroupPauseObservable.add(()=>{r.pause()})}})}}let Xr=!1;function Qr(){Xr||(Xr=!0,W(jr),K(jr,!0,e=>new Yr(e)))}Qr();const Jr="MSFT_lod";class Zr{constructor(e){var r,n;this.name=Jr,this.order=100,this.maxLODsToLoad=10,this.onNodeLODsLoadedObservable=new t.Observable,this.onMaterialLODsLoadedObservable=new t.Observable,this._bufferLODs=new Array,this._nodeIndexLOD=null,this._nodeSignalLODs=new Array,this._nodePromiseLODs=new Array,this._nodeBufferLODs=new Array,this._materialIndexLOD=null,this._materialSignalLODs=new Array,this._materialPromiseLODs=new Array,this._materialBufferLODs=new Array,this._loader=e,this.maxLODsToLoad=null!==(n=null===(r=this._loader.parent.extensionOptions[Jr])||void 0===r?void 0:r.maxLODsToLoad)&&void 0!==n?n:this.maxLODsToLoad,this.enabled=this._loader.isExtensionUsed(Jr)}dispose(){this._loader=null,this._nodeIndexLOD=null,this._nodeSignalLODs.length=0,this._nodePromiseLODs.length=0,this._nodeBufferLODs.length=0,this._materialIndexLOD=null,this._materialSignalLODs.length=0,this._materialPromiseLODs.length=0,this._materialBufferLODs.length=0,this.onMaterialLODsLoadedObservable.clear(),this.onNodeLODsLoadedObservable.clear()}onReady(){for(let e=0;e<this._nodePromiseLODs.length;e++){const t=Promise.all(this._nodePromiseLODs[e]).then(()=>{0!==e&&(this._loader.endPerformanceCounter(`Node LOD ${e}`),this._loader.log(`Loaded node LOD ${e}`)),this.onNodeLODsLoadedObservable.notifyObservers(e),e!==this._nodePromiseLODs.length-1&&(this._loader.startPerformanceCounter(`Node LOD ${e+1}`),this._loadBufferLOD(this._nodeBufferLODs,e+1),this._nodeSignalLODs[e]&&this._nodeSignalLODs[e].resolve())});this._loader._completePromises.push(t)}for(let e=0;e<this._materialPromiseLODs.length;e++){const t=Promise.all(this._materialPromiseLODs[e]).then(()=>{0!==e&&(this._loader.endPerformanceCounter(`Material LOD ${e}`),this._loader.log(`Loaded material LOD ${e}`)),this.onMaterialLODsLoadedObservable.notifyObservers(e),e!==this._materialPromiseLODs.length-1&&(this._loader.startPerformanceCounter(`Material LOD ${e+1}`),this._loadBufferLOD(this._materialBufferLODs,e+1),this._materialSignalLODs[e]&&this._materialSignalLODs[e].resolve())});this._loader._completePromises.push(t)}}loadSceneAsync(e,t){const r=this._loader.loadSceneAsync(e,t);return this._loadBufferLOD(this._bufferLODs,0),r}loadNodeAsync(e,r,n){return Y.LoadExtensionAsync(e,r,this.name,(e,a)=>D(this,void 0,void 0,function*(){let s;const o=this._getLODs(e,r,this._loader.gltf.nodes,a.ids);this._loader.logOpen(`${e}`);for(let e=0;e<o.length;e++){const r=o[e];0!==e&&(this._nodeIndexLOD=e,this._nodeSignalLODs[e]=this._nodeSignalLODs[e]||new t.Deferred);const a=e=>{n(e),e.setEnabled(!1)},i=this._loader.loadNodeAsync(`/nodes/${r.index}`,r,a).then(t=>{if(0!==e){const t=o[e-1];t._babylonTransformNode&&(this._disposeTransformNode(t._babylonTransformNode),delete t._babylonTransformNode)}return t.setEnabled(!0),t});this._nodePromiseLODs[e]=this._nodePromiseLODs[e]||[],0===e?s=i:(this._nodeIndexLOD=null,this._nodePromiseLODs[e].push(i))}return this._loader.logClose(),yield s}))}_loadMaterialAsync(e,t,r,n,a){return this._nodeIndexLOD?null:Y.LoadExtensionAsync(e,t,this.name,(e,s)=>D(this,void 0,void 0,function*(){let o;const i=this._getLODs(e,t,this._loader.gltf.materials,s.ids);this._loader.logOpen(`${e}`);for(let e=0;e<i.length;e++){const t=i[e];0!==e&&(this._materialIndexLOD=e);const s=this._loader._loadMaterialAsync(`/materials/${t.index}`,t,r,n,t=>{0===e&&a(t)}).then(t=>{if(0!==e){a(t);const r=i[e-1]._data;r[n]&&(this._disposeMaterials([r[n].babylonMaterial]),delete r[n])}return t});this._materialPromiseLODs[e]=this._materialPromiseLODs[e]||[],0===e?o=s:(this._materialIndexLOD=null,this._materialPromiseLODs[e].push(s))}return this._loader.logClose(),yield o}))}_loadUriAsync(e,r,n){if(null!==this._nodeIndexLOD){this._loader.log("deferred");const a=this._nodeIndexLOD-1;return this._nodeSignalLODs[a]=this._nodeSignalLODs[a]||new t.Deferred,this._nodeSignalLODs[this._nodeIndexLOD-1].promise.then(()=>D(this,void 0,void 0,function*(){return yield this._loader.loadUriAsync(e,r,n)}))}if(null!==this._materialIndexLOD){this._loader.log("deferred");const a=this._materialIndexLOD-1;return this._materialSignalLODs[a]=this._materialSignalLODs[a]||new t.Deferred,this._materialSignalLODs[a].promise.then(()=>D(this,void 0,void 0,function*(){return yield this._loader.loadUriAsync(e,r,n)}))}return null}loadBufferAsync(e,r,n,a){if(this._loader.parent.useRangeRequests&&!r.uri){if(!this._loader.bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);const r=(e,r)=>D(this,void 0,void 0,function*(){const s=n,o=s+a-1;let i=e[r];return i?(i.start=Math.min(i.start,s),i.end=Math.max(i.end,o)):(i={start:s,end:o,loaded:new t.Deferred},e[r]=i),yield i.loaded.promise.then(e=>new Uint8Array(e.buffer,e.byteOffset+n-i.start,a))});return this._loader.log("deferred"),null!==this._nodeIndexLOD?r(this._nodeBufferLODs,this._nodeIndexLOD):null!==this._materialIndexLOD?r(this._materialBufferLODs,this._materialIndexLOD):r(this._bufferLODs,0)}return null}_loadBufferLOD(e,t){const r=e[t];r&&(this._loader.log(`Loading buffer range [${r.start}-${r.end}]`),this._loader.bin.readAsync(r.start,r.end-r.start+1).then(e=>{r.loaded.resolve(e)},e=>{r.loaded.reject(e)}))}_getLODs(e,t,r,n){if(this.maxLODsToLoad<=0)throw new Error("maxLODsToLoad must be greater than zero");const a=[];for(let t=n.length-1;t>=0;t--)if(a.push(q.Get(`${e}/ids/${n[t]}`,r,n[t])),a.length===this.maxLODsToLoad)return a;return a.push(t),a}_disposeTransformNode(e){const t=[],r=e.material;r&&t.push(r);for(const r of e.getChildMeshes())r.material&&t.push(r.material);e.dispose();const n=t.filter(e=>this._loader.babylonScene.meshes.every(t=>t.material!=e));this._disposeMaterials(n)}_disposeMaterials(e){const t={};for(const r of e){for(const e of r.getActiveTextures())t[e.uniqueId]=e;r.dispose()}for(const e in t)for(const r of this._loader.babylonScene.materials)r.hasTexture(t[e])&&delete t[e];for(const e in t)t[e].dispose()}}let en=!1;function tn(){en||(en=!0,W(Jr),K(Jr,!0,e=>new Zr(e)))}tn();const rn="MSFT_minecraftMesh";class nn{constructor(e){this.name=rn,this._loader=e,this.enabled=this._loader.isExtensionUsed(rn)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtraAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){if(a){if(!this._loader._pbrMaterialImpls.get("pbr"))throw new Error(`${n}: Material type not supported`);const a=this._loader.loadMaterialPropertiesAsync(e,t,r);return r.needAlphaBlending()&&(r.forceDepthWrite=!0,r.separateCullingPass=!0),r.backFaceCulling=r.forceDepthWrite,r.twoSidedLighting=!0,yield a}}))}}let an=!1;function sn(){an||(an=!0,W(rn),K(rn,!0,e=>new nn(e)))}sn();const on="MSFT_sRGBFactors";class ln{constructor(e){this.name=on,this._loader=e,this.enabled=this._loader.isExtensionUsed(on)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,r){return Y.LoadExtraAsync(e,t,this.name,(n,a)=>D(this,void 0,void 0,function*(){if(a){const n=this._loader._getOrCreateMaterialAdapter(r),a=this._loader.loadMaterialPropertiesAsync(e,t,r),s=r.getScene().getEngine().useExactSrgbConversions;return n.baseColorTexture||n.baseColor.toLinearSpaceToRef(n.baseColor,s),n.specularColorTexture||n.specularColor.toLinearSpaceToRef(n.specularColor,s),yield a}}))}}let un=!1;function cn(){un||(un=!0,W(on),K(on,!0,e=>new ln(e)))}function hn(e){const[t,r]=e.split(":");return dn({op:t,extension:r})}function dn(e,r=!0){var n;const a=e.extension?null===(n=_n[e.extension])||void 0===n?void 0:n[e.op]:pn[e.op];if(!a&&(t.Logger.Warn(`No mapping found for operation ${e.op} and extension ${e.extension||"KHR_interactivity"}`),r)){const t={},r={flows:{}};if(e.inputValueSockets){t.values={};for(const r in e.inputValueSockets)t.values[r]={name:r}}return e.outputValueSockets&&(r.values={},Object.keys(e.outputValueSockets).forEach(e=>{r.values[e]={name:e}})),{blocks:[],inputs:t,outputs:r}}return a}function mn(e,t,r){_n[t]||(_n[t]={}),_n[t][e]=r}cn();const _n={BABYLON:{"flow/log":{blocks:["FlowGraphConsoleLogBlock"],inputs:{values:{message:{name:"message"}}}}}},pn={"event/onStart":{blocks:["FlowGraphSceneReadyEventBlock"],outputs:{values:{event:{name:"event"}},flows:{out:{name:"done"}}}},"event/onTick":{blocks:["FlowGraphSceneTickEventBlock"],inputs:{},outputs:{values:{timeSinceLastTick:{name:"deltaTime",gltfType:"number"},event:{name:"event"}},flows:{out:{name:"done"}}}},"event/send":{blocks:["FlowGraphSendCustomEventBlock"],extraProcessor(e,t,r,n,a){var s;if("event/send"!==t.op||!e.configuration||1!==Object.keys(e.configuration).length)throw new Error("Receive event should have a single configuration object, the event itself");const o=null===(s=e.configuration.event.value)||void 0===s?void 0:s[0];if("number"!=typeof o)throw new Error("Event id should be a number");const i=n.arrays.events[o],l=a[0];return l.config||(l.config={}),l.config.eventId=i.eventId,l.config.eventData=i.eventData,a}},"event/receive":{blocks:["FlowGraphReceiveCustomEventBlock"],outputs:{values:{event:{name:"event"}},flows:{out:{name:"done"}}},validation(e,r){var n,a;if(!e.configuration)return t.Logger.Error("Receive event should have a configuration object"),{valid:!1,error:"Receive event should have a configuration object"};const s=e.configuration.event;if(!s)return t.Logger.Error("Receive event should have a single configuration object, the event itself"),{valid:!1,error:"Receive event should have a single configuration object, the event itself"};const o=null===(n=s.value)||void 0===n?void 0:n[0];return"number"!=typeof o?(t.Logger.Error("Event id should be a number"),{valid:!1,error:"Event id should be a number"}):(null===(a=r.events)||void 0===a?void 0:a[o])?{valid:!0}:(t.Logger.Error(`Event with id ${o} not found`),{valid:!1,error:`Event with id ${o} not found`})},extraProcessor(e,t,r,n,a){var s;if("event/receive"!==t.op||!e.configuration||1!==Object.keys(e.configuration).length)throw new Error("Receive event should have a single configuration object, the event itself");const o=null===(s=e.configuration.event.value)||void 0===s?void 0:s[0];if("number"!=typeof o)throw new Error("Event id should be a number");const i=n.arrays.events[o],l=a[0];return l.config||(l.config={}),l.config.eventId=i.eventId,l.config.eventData=i.eventData,a}},"event/stopPropagation":{blocks:["FlowGraphStopEventPropagationBlock"],inputs:{values:{event:{name:"event"},stopImmediate:{name:"stopImmediate"}},flows:{in:{name:"in"}}},outputs:{flows:{out:{name:"out"}}}},"math/E":gn("FlowGraphEBlock"),"math/Pi":gn("FlowGraphPIBlock"),"math/Tau":gn("FlowGraphTauBlock"),"math/Inf":gn("FlowGraphInfBlock"),"math/NaN":gn("FlowGraphNaNBlock"),"math/abs":gn("FlowGraphAbsBlock"),"math/sign":gn("FlowGraphSignBlock"),"math/trunc":gn("FlowGraphTruncBlock"),"math/floor":gn("FlowGraphFloorBlock"),"math/ceil":gn("FlowGraphCeilBlock"),"math/round":{blocks:["FlowGraphRoundBlock"],configuration:{},inputs:{values:{a:{name:"a"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a){var s;return(s=a[0]).config||(s.config={}),a[0].config.roundHalfAwayFromZero=!0,a}},"math/fract":gn("FlowGraphFractBlock"),"math/neg":gn("FlowGraphNegationBlock"),"math/add":gn("FlowGraphAddBlock",["a","b"],!0),"math/sub":gn("FlowGraphSubtractBlock",["a","b"],!0),"math/mul":{blocks:["FlowGraphMultiplyBlock"],extraProcessor(e,t,r,n,a){var s;(s=a[0]).config||(s.config={}),a[0].config.useMatrixPerComponent=!0,a[0].config.preventIntegerFloatArithmetic=!0;let o=-1;return Object.keys(e.values||{}).find(t=>{var r;return void 0!==(null===(r=e.values)||void 0===r?void 0:r[t].type)&&(o=e.values[t].type,!0)}),-1!==o&&(a[0].config.type=n.arrays.types[o].flowGraphType),a},validation:e=>e.values?fn(e):{valid:!0}},"math/div":gn("FlowGraphDivideBlock",["a","b"],!0),"math/rem":gn("FlowGraphModuloBlock",["a","b"]),"math/min":gn("FlowGraphMinBlock",["a","b"]),"math/max":gn("FlowGraphMaxBlock",["a","b"]),"math/clamp":gn("FlowGraphClampBlock",["a","b","c"]),"math/saturate":gn("FlowGraphSaturateBlock"),"math/mix":gn("FlowGraphMathInterpolationBlock",["a","b","c"]),"math/smoothStep":gn("FlowGraphSmoothStepBlock",["a","b","c"]),"math/rgbToOkLCh":{blocks:["FlowGraphRGBToOkLChBlock"],inputs:{values:{r:{name:"r",gltfType:"number"},g:{name:"g",gltfType:"number"},b:{name:"b",gltfType:"number"}}},outputs:{values:{l:{name:"l"},c:{name:"c"},h:{name:"h"}}}},"math/rgbFromOkLCh":{blocks:["FlowGraphRGBFromOkLChBlock"],inputs:{values:{l:{name:"l",gltfType:"number"},c:{name:"c",gltfType:"number"},h:{name:"h",gltfType:"number"}}},outputs:{values:{r:{name:"r"},g:{name:"g"},b:{name:"b"}}}},"math/quatSlerp":gn("FlowGraphMathSlerpBlock",["a","b","c"]),"math/slerp":gn("FlowGraphVectorSlerpBlock",["a","b","c"]),"math/eq":gn("FlowGraphEqualityBlock",["a","b"]),"ref/eq":gn("FlowGraphEqualityBlock",["a","b"]),"math/lt":gn("FlowGraphLessThanBlock",["a","b"]),"math/le":gn("FlowGraphLessThanOrEqualBlock",["a","b"]),"math/gt":gn("FlowGraphGreaterThanBlock",["a","b"]),"math/ge":gn("FlowGraphGreaterThanOrEqualBlock",["a","b"]),"math/isNaN":gn("FlowGraphIsNaNBlock"),"math/isInf":gn("FlowGraphIsInfBlock"),"math/select":{blocks:["FlowGraphConditionalBlock"],inputs:{values:{condition:{name:"condition"},a:{name:"onTrue"},b:{name:"onFalse"}}},outputs:{values:{value:{name:"output"}}}},"math/random":{blocks:["FlowGraphRandomBlock"],outputs:{values:{value:{name:"value"}}}},"math/sin":gn("FlowGraphSinBlock"),"math/cos":gn("FlowGraphCosBlock"),"math/tan":gn("FlowGraphTanBlock"),"math/asin":gn("FlowGraphASinBlock"),"math/acos":gn("FlowGraphACosBlock"),"math/atan":gn("FlowGraphATanBlock"),"math/atan2":gn("FlowGraphATan2Block",["a","b"]),"math/sinh":gn("FlowGraphSinhBlock"),"math/cosh":gn("FlowGraphCoshBlock"),"math/tanh":gn("FlowGraphTanhBlock"),"math/asinh":gn("FlowGraphASinhBlock"),"math/acosh":gn("FlowGraphACoshBlock"),"math/atanh":gn("FlowGraphATanhBlock"),"math/exp":gn("FlowGraphExponentialBlock"),"math/log":gn("FlowGraphLogBlock"),"math/log2":gn("FlowGraphLog2Block"),"math/log10":gn("FlowGraphLog10Block"),"math/sqrt":gn("FlowGraphSquareRootBlock"),"math/cbrt":gn("FlowGraphCubeRootBlock"),"math/pow":gn("FlowGraphPowerBlock",["a","b"]),"math/length":gn("FlowGraphLengthBlock"),"math/normalize":gn("FlowGraphNormalizeBlock"),"math/dot":gn("FlowGraphDotBlock",["a","b"]),"math/cross":gn("FlowGraphCrossBlock",["a","b"]),"math/rotate2D":{blocks:["FlowGraphRotate2DBlock"],inputs:{values:{a:{name:"a"},angle:{name:"b"}}},outputs:{values:{value:{name:"value"}}}},"math/rotate3D":{blocks:["FlowGraphRotate3DBlock"],inputs:{values:{a:{name:"a"},rotation:{name:"b"}}},outputs:{values:{value:{name:"value"}}}},"math/transform":{blocks:["FlowGraphTransformVectorBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}}},"math/combine2":{blocks:["FlowGraphCombineVector2Block"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/combine3":{blocks:["FlowGraphCombineVector3Block"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/combine4":{blocks:["FlowGraphCombineVector4Block"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract2":{blocks:["FlowGraphExtractVector2Block"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"}}}},"math/extract3":{blocks:["FlowGraphExtractVector3Block"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"}}}},"math/extract4":{blocks:["FlowGraphExtractVector4Block"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"}}}},"math/transpose":gn("FlowGraphTransposeBlock"),"math/determinant":gn("FlowGraphDeterminantBlock"),"math/inverse":gn("FlowGraphInvertMatrixBlock"),"math/matMul":gn("FlowGraphMatrixMultiplicationBlock",["a","b"]),"math/matCompose":{blocks:["FlowGraphMatrixCompose"],inputs:{values:{translation:{name:"position",gltfType:"float3"},rotation:{name:"rotationQuaternion",gltfType:"float4"},scale:{name:"scaling",gltfType:"float3"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a,s){const o=a[0].dataInputs.find(e=>"rotationQuaternion"===e.name);if(!o)throw new Error("Rotation quaternion input not found");return s._connectionValues[o.uniqueId]&&(s._connectionValues[o.uniqueId].type="Quaternion"),a}},"math/matDecompose":{blocks:["FlowGraphMatrixDecompose"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{translation:{name:"position"},rotation:{name:"rotationQuaternion"},scale:{name:"scaling"}}},extraProcessor(e,t,r,n,a){var s;return(s=a[0]).config||(s.config={}),a[0].config.keepDegenerateComponents=!0,a}},"math/quatConjugate":gn("FlowGraphConjugateBlock",["a"]),"math/quatMul":{blocks:["FlowGraphMultiplyBlock"],inputs:{values:{a:{name:"a",gltfType:"vector4"},b:{name:"b",gltfType:"vector4"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a){var s;return(s=a[0]).config||(s.config={}),a[0].config.type="Quaternion",a}},"math/quatAngleBetween":gn("FlowGraphAngleBetweenBlock",["a","b"]),"math/quatFromAxisAngle":{blocks:["FlowGraphQuaternionFromAxisAngleBlock"],inputs:{values:{axis:{name:"a",gltfType:"float3"},angle:{name:"b",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/quatToAxisAngle":gn("FlowGraphAxisAngleFromQuaternionBlock",["a"]),"math/quatFromDirections":gn("FlowGraphQuaternionFromDirectionsBlock",["a","b"]),"math/quatFromUpForward":{blocks:["FlowGraphQuaternionFromUpForwardBlock"],inputs:{values:{up:{name:"a",gltfType:"float3"},forward:{name:"b",gltfType:"float3"}}},outputs:{values:{value:{name:"value"}}}},"math/quatFromAngles":{blocks:["FlowGraphQuaternionFromAnglesBlock"],configuration:{order:{name:"order",defaultValue:["yxz"]}},inputs:{values:{x:{name:"a",gltfType:"number"},y:{name:"b",gltfType:"number"},z:{name:"c",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/combine2x2":{blocks:["FlowGraphCombineMatrix2DBlock"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract2x2":{blocks:["FlowGraphExtractMatrix2DBlock"],inputs:{values:{a:{name:"input",gltfType:"float2x2"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"}}}},"math/combine3x3":{blocks:["FlowGraphCombineMatrix3DBlock"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"},e:{name:"input_4",gltfType:"number"},f:{name:"input_5",gltfType:"number"},g:{name:"input_6",gltfType:"number"},h:{name:"input_7",gltfType:"number"},i:{name:"input_8",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract3x3":{blocks:["FlowGraphExtractMatrix3DBlock"],inputs:{values:{a:{name:"input",gltfType:"float3x3"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"},4:{name:"output_4"},5:{name:"output_5"},6:{name:"output_6"},7:{name:"output_7"},8:{name:"output_8"}}}},"math/combine4x4":{blocks:["FlowGraphCombineMatrixBlock"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"},e:{name:"input_4",gltfType:"number"},f:{name:"input_5",gltfType:"number"},g:{name:"input_6",gltfType:"number"},h:{name:"input_7",gltfType:"number"},i:{name:"input_8",gltfType:"number"},j:{name:"input_9",gltfType:"number"},k:{name:"input_10",gltfType:"number"},l:{name:"input_11",gltfType:"number"},m:{name:"input_12",gltfType:"number"},n:{name:"input_13",gltfType:"number"},o:{name:"input_14",gltfType:"number"},p:{name:"input_15",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract4x4":{blocks:["FlowGraphExtractMatrixBlock"],configuration:{},inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"},4:{name:"output_4"},5:{name:"output_5"},6:{name:"output_6"},7:{name:"output_7"},8:{name:"output_8"},9:{name:"output_9"},10:{name:"output_10"},11:{name:"output_11"},12:{name:"output_12"},13:{name:"output_13"},14:{name:"output_14"},15:{name:"output_15"}}}},"math/not":{blocks:["FlowGraphBitwiseNotBlock"],inputs:{values:{a:{name:"a"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a,s){var o,i,l;(l=a[0]).config||(l.config={});const u=a[0].dataInputs[0];return a[0].config.valueType=null!==(i=null===(o=s._connectionValues[u.uniqueId])||void 0===o?void 0:o.type)&&void 0!==i?i:"FlowGraphInteger",a}},"math/and":{blocks:["FlowGraphBitwiseAndBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a,s){var o,i,l,u,c;(c=a[0]).config||(c.config={});const h=a[0].dataInputs[0],d=a[0].dataInputs[1];return a[0].config.valueType=null!==(u=null!==(i=null===(o=s._connectionValues[h.uniqueId])||void 0===o?void 0:o.type)&&void 0!==i?i:null===(l=s._connectionValues[d.uniqueId])||void 0===l?void 0:l.type)&&void 0!==u?u:"FlowGraphInteger",a}},"math/or":{blocks:["FlowGraphBitwiseOrBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a,s){var o,i,l,u,c;(c=a[0]).config||(c.config={});const h=a[0].dataInputs[0],d=a[0].dataInputs[1];return a[0].config.valueType=null!==(u=null!==(i=null===(o=s._connectionValues[h.uniqueId])||void 0===o?void 0:o.type)&&void 0!==i?i:null===(l=s._connectionValues[d.uniqueId])||void 0===l?void 0:l.type)&&void 0!==u?u:"FlowGraphInteger",a}},"math/xor":{blocks:["FlowGraphBitwiseXorBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,r,n,a,s){var o,i,l,u,c;(c=a[0]).config||(c.config={});const h=a[0].dataInputs[0],d=a[0].dataInputs[1];return a[0].config.valueType=null!==(u=null!==(i=null===(o=s._connectionValues[h.uniqueId])||void 0===o?void 0:o.type)&&void 0!==i?i:null===(l=s._connectionValues[d.uniqueId])||void 0===l?void 0:l.type)&&void 0!==u?u:"FlowGraphInteger",a}},"math/asr":gn("FlowGraphBitwiseRightShiftBlock",["a","b"]),"math/lsl":gn("FlowGraphBitwiseLeftShiftBlock",["a","b"]),"math/clz":gn("FlowGraphLeadingZerosBlock"),"math/ctz":gn("FlowGraphTrailingZerosBlock"),"math/popcnt":gn("FlowGraphOneBitsCounterBlock"),"math/rad":gn("FlowGraphDegToRadBlock"),"math/deg":gn("FlowGraphRadToDegBlock"),"type/boolToInt":gn("FlowGraphBooleanToInt"),"type/boolToFloat":gn("FlowGraphBooleanToFloat"),"type/intToBool":gn("FlowGraphIntToBoolean"),"type/intToFloat":gn("FlowGraphIntToFloat"),"type/floatToInt":gn("FlowGraphFloatToInt"),"type/floatToBool":gn("FlowGraphFloatToBoolean"),"flow/sequence":{blocks:["FlowGraphSequenceBlock"],extraProcessor(e,t,r,n,a){const s=a[0];return s.config||(s.config={}),s.config.outputSignalCount=Object.keys(e.flows||[]).length,s.signalOutputs.forEach((e,t)=>{e.name="out_"+t}),a}},"flow/branch":{blocks:["FlowGraphBranchBlock"],outputs:{flows:{true:{name:"onTrue"},false:{name:"onFalse"}}}},"flow/switch":{blocks:["FlowGraphSwitchBlock"],configuration:{cases:{name:"cases",isArray:!0,inOptions:!0,defaultValue:[]}},inputs:{values:{selection:{name:"case"},default:{name:"default"}}},validation(e){var r;const n=null===(r=e.configuration)||void 0===r?void 0:r.cases;if(n&&n.value){if(!n.value.every(e=>"number"==typeof e&&/^-?\d+$/.test(e.toString())))return t.Logger.Warn("Switch cases should be integers. Using empty array instead."),n.value=[],{valid:!0};const e=new Set(n.value);n.value=Array.from(e)}return{valid:!0}},extraProcessor(e,t,r,n,a){if("flow/switch"!==t.op||!e.flows||0===Object.keys(e.flows).length)throw new Error("Switch should have a single configuration object, the cases array");return a[0].signalOutputs.forEach(e=>{"default"!==e.name&&(e.name="out_"+e.name)}),a}},"flow/while":{blocks:["FlowGraphWhileLoopBlock"],outputs:{flows:{loopBody:{name:"executionFlow"}}}},"flow/for":{blocks:["FlowGraphForLoopBlock"],configuration:{initialIndex:{name:"initialIndex",gltfType:"number",inOptions:!0,defaultValue:0}},inputs:{values:{startIndex:{name:"startIndex",gltfType:"number"},endIndex:{name:"endIndex",gltfType:"number"}}},outputs:{values:{index:{name:"index"}},flows:{loopBody:{name:"executionFlow"}}},extraProcessor(e,t,r,n,a){const s=a[0];return s.config||(s.config={}),s.config.incrementIndexWhenLoopDone=!0,s.config.maxLoopIterations=2e4,a}},"flow/doN":{blocks:["FlowGraphDoNBlock"],configuration:{},inputs:{values:{n:{name:"maxExecutions",gltfType:"number"}}},outputs:{values:{currentCount:{name:"executionCount"}}}},"flow/multiGate":{blocks:["FlowGraphMultiGateBlock"],configuration:{isRandom:{name:"isRandom",gltfType:"boolean",inOptions:!0,defaultValue:!1},isLoop:{name:"isLoop",gltfType:"boolean",inOptions:!0,defaultValue:!1}},extraProcessor(e,t,r,n,a){if("flow/multiGate"!==t.op||!e.flows||0===Object.keys(e.flows).length)throw new Error("MultiGate should have a single configuration object, the number of output flows");const s=a[0];return s.config||(s.config={}),s.config.outputSignalCount=Object.keys(e.flows).length,s.signalOutputs.forEach((e,t)=>{e.name="out_"+t}),a}},"flow/waitAll":{blocks:["FlowGraphWaitAllBlock"],configuration:{inputFlows:{name:"inputSignalCount",gltfType:"number",inOptions:!0,defaultValue:0}},inputs:{flows:{reset:{name:"reset"},"[segment]":{name:"in_$1"}}},validation(e){var t,r,n;return"number"!=typeof(null===(n=null===(r=null===(t=e.configuration)||void 0===t?void 0:t.inputFlows)||void 0===r?void 0:r.value)||void 0===n?void 0:n[0])&&(e.configuration=e.configuration||{inputFlows:{value:[0]}},e.configuration.inputFlows.value=[0]),{valid:!0}}},"flow/throttle":{blocks:["FlowGraphThrottleBlock"],outputs:{flows:{err:{name:"error"}}}},"flow/setDelay":{blocks:["FlowGraphSetDelayBlock"],outputs:{flows:{err:{name:"error"}},values:{lastDelay:{name:"lastDelayIndex"}}}},"flow/cancelDelay":{blocks:["FlowGraphCancelDelayBlock"],inputs:{values:{delay:{name:"delayIndex"}}}},"variable/get":{blocks:["FlowGraphGetVariableBlock"],validation(e){var r,n;return(null===(n=null===(r=e.configuration)||void 0===r?void 0:r.variable)||void 0===n?void 0:n.value)?{valid:!0}:(t.Logger.Error("Variable get block should have a variable configuration"),{valid:!1,error:"Variable get block should have a variable configuration"})},configuration:{variable:{name:"variable",gltfType:"number",flowGraphType:"string",inOptions:!0,isVariable:!0,dataTransformer:(e,t)=>t.getVariableName(e)}}},"variable/set":{blocks:["FlowGraphSetVariableBlock"],configuration:{variables:{name:"variables",gltfType:"number",flowGraphType:"string",inOptions:!0,isArray:!0,dataTransformer:(e,t)=>e.map(e=>t.getVariableName(e))}},extraProcessor:(e,t,r,n,a)=>(a[0].dataInputs.forEach(e=>{e.name=n.getVariableName(+e.name)}),a)},"variable/interpolate":{blocks:["FlowGraphInterpolationBlock","FlowGraphContextBlock","FlowGraphPlayAnimationBlock","FlowGraphBezierCurveEasing","FlowGraphGetVariableBlock"],configuration:{variable:{name:"propertyName",inOptions:!0,isVariable:!0,dataTransformer:(e,t)=>t.getVariableName(e)},useSlerp:{name:"animationType",inOptions:!0,defaultValue:!1,dataTransformer:e=>!0===e?"Quaternion":void 0}},inputs:{values:{value:{name:"value_1"},duration:{name:"duration_1",gltfType:"number"},p1:{name:"controlPoint1",toBlock:"FlowGraphBezierCurveEasing"},p2:{name:"controlPoint2",toBlock:"FlowGraphBezierCurveEasing"}},flows:{in:{name:"in",toBlock:"FlowGraphPlayAnimationBlock"}}},outputs:{flows:{err:{name:"error",toBlock:"FlowGraphPlayAnimationBlock"},out:{name:"out",toBlock:"FlowGraphPlayAnimationBlock"},done:{name:"done",toBlock:"FlowGraphPlayAnimationBlock"}}},interBlockConnectors:[{input:"object",output:"userVariables",inputBlockIndex:2,outputBlockIndex:1,isVariable:!0},{input:"animation",output:"animation",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"easingFunction",output:"easingFunction",inputBlockIndex:0,outputBlockIndex:3,isVariable:!0},{input:"value_0",output:"value",inputBlockIndex:0,outputBlockIndex:4,isVariable:!0}],extraProcessor(e,r,n,a,s){var o,i,l,u,c,h;const d=s[0],m=null===(i=null===(o=e.configuration)||void 0===o?void 0:o.variable.value)||void 0===i?void 0:i[0];if("number"!=typeof m)throw t.Logger.Error("Variable index is not defined for variable interpolation block"),new Error("Variable index is not defined for variable interpolation block");const _=a.arrays.staticVariables[m];void 0===(null===(u=null===(l=d.config)||void 0===l?void 0:l.animationType)||void 0===u?void 0:u.value)&&(d.config||(d.config={}),(c=d.config).animationType||(c.animationType={}),d.config.animationType.value=t.getAnimationTypeByFlowGraphType(_.type));const p=s[4];return p.config||(p.config={}),(h=p.config).variable||(h.variable={}),p.config.variable.value=a.getVariableName(m),s}},"pointer/get":{blocks:["FlowGraphGetPropertyBlock","FlowGraphJsonPointerParserBlock"],validation:yn,configuration:{pointer:{name:"jsonPointer",toBlock:"FlowGraphJsonPointerParserBlock"}},inputs:{values:{"[segment]":{name:"$1",toBlock:"FlowGraphJsonPointerParserBlock"}}},interBlockConnectors:[{input:"object",output:"object",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"propertyName",output:"propertyName",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"customGetFunction",output:"getFunction",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0}],extraProcessor:(e,t,r,n,a)=>(a.forEach(e=>{"FlowGraphJsonPointerParserBlock"===e.className&&(e.config||(e.config={}),e.config.outputValue=!0)}),a)},"pointer/set":{blocks:["FlowGraphSetPropertyBlock","FlowGraphJsonPointerParserBlock"],validation:yn,configuration:{pointer:{name:"jsonPointer",toBlock:"FlowGraphJsonPointerParserBlock"}},inputs:{values:{value:{name:"value"},"[segment]":{name:"$1",toBlock:"FlowGraphJsonPointerParserBlock"}}},outputs:{flows:{err:{name:"error"}}},interBlockConnectors:[{input:"object",output:"object",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"propertyName",output:"propertyName",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"customSetFunction",output:"setFunction",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0}],extraProcessor:(e,t,r,n,a)=>(a.forEach(e=>{"FlowGraphJsonPointerParserBlock"===e.className&&(e.config||(e.config={}),e.config.outputValue=!0)}),a)},"pointer/interpolate":{blocks:["FlowGraphInterpolationBlock","FlowGraphJsonPointerParserBlock","FlowGraphPlayAnimationBlock","FlowGraphBezierCurveEasing"],validation:yn,configuration:{pointer:{name:"jsonPointer",toBlock:"FlowGraphJsonPointerParserBlock"}},inputs:{values:{value:{name:"value_1"},"[segment]":{name:"$1",toBlock:"FlowGraphJsonPointerParserBlock"},duration:{name:"duration_1",gltfType:"number"},p1:{name:"controlPoint1",toBlock:"FlowGraphBezierCurveEasing"},p2:{name:"controlPoint2",toBlock:"FlowGraphBezierCurveEasing"}},flows:{in:{name:"in",toBlock:"FlowGraphPlayAnimationBlock"}}},outputs:{flows:{err:{name:"error",toBlock:"FlowGraphPlayAnimationBlock"},out:{name:"out",toBlock:"FlowGraphPlayAnimationBlock"},done:{name:"done",toBlock:"FlowGraphPlayAnimationBlock"}}},interBlockConnectors:[{input:"object",output:"object",inputBlockIndex:2,outputBlockIndex:1,isVariable:!0},{input:"propertyName",output:"propertyName",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"customBuildAnimation",output:"generateAnimationsFunction",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"animation",output:"animation",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"easingFunction",output:"easingFunction",inputBlockIndex:0,outputBlockIndex:3,isVariable:!0},{input:"value_0",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0}],extraProcessor:(e,t,r,n,a)=>(a.forEach(t=>{"FlowGraphJsonPointerParserBlock"===t.className?(t.config||(t.config={}),t.config.outputValue=!0):"FlowGraphInterpolationBlock"===t.className&&(t.config||(t.config={}),Object.keys(e.values||[]).forEach(r=>{var a;const s=null===(a=e.values)||void 0===a?void 0:a[r];if("value"===r&&s){const e=s.type;void 0!==e&&(t.config.animationType=n.arrays.types[e].flowGraphType)}}))}),a)},"animation/start":{blocks:["FlowGraphPlayAnimationBlock","FlowGraphArrayIndexBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],inputs:{values:{animation:{name:"index",gltfType:"number",toBlock:"FlowGraphArrayIndexBlock"},speed:{name:"speed",gltfType:"number"},startTime:{name:"from",gltfType:"number",convertConnectedTimeToFrames:!0,dataTransformer:(e,t)=>[e[0]*t._animationTargetFps]},endTime:{name:"to",gltfType:"number",convertConnectedTimeToFrames:!0,dataTransformer:(e,t)=>[e[0]*t._animationTargetFps]}}},outputs:{flows:{err:{name:"error"}}},interBlockConnectors:[{input:"animationGroup",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"animationGroups",inputBlockIndex:1,outputBlockIndex:2,isVariable:!0}],extraProcessor(e,t,r,n,a,s,o){const i=a[a.length-1];return i.config||(i.config={}),i.config.glTF=o,a}},"animation/stop":{blocks:["FlowGraphStopAnimationBlock","FlowGraphArrayIndexBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],inputs:{values:{animation:{name:"index",gltfType:"number",toBlock:"FlowGraphArrayIndexBlock"}}},outputs:{flows:{err:{name:"error"}}},interBlockConnectors:[{input:"animationGroup",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"animationGroups",inputBlockIndex:1,outputBlockIndex:2,isVariable:!0}],extraProcessor(e,t,r,n,a,s,o){const i=a[a.length-1];return i.config||(i.config={}),i.config.glTF=o,a}},"animation/stopAt":{blocks:["FlowGraphStopAnimationBlock","FlowGraphArrayIndexBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],configuration:{},inputs:{values:{animation:{name:"index",gltfType:"number",toBlock:"FlowGraphArrayIndexBlock"},stopTime:{name:"stopAtFrame",gltfType:"number",convertConnectedTimeToFrames:!0,dataTransformer:(e,t)=>[e[0]*t._animationTargetFps]}}},outputs:{flows:{err:{name:"error"}}},interBlockConnectors:[{input:"animationGroup",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"animationGroups",inputBlockIndex:1,outputBlockIndex:2,isVariable:!0}],extraProcessor(e,t,r,n,a,s,o){const i=a[a.length-1];return i.config||(i.config={}),i.config.glTF=o,a}},"math/switch":{blocks:["FlowGraphDataSwitchBlock"],configuration:{cases:{name:"cases",isArray:!0,inOptions:!0,defaultValue:[]}},inputs:{values:{selection:{name:"case"}}},validation(e){var r;const n=null===(r=e.configuration)||void 0===r?void 0:r.cases;if(n&&n.value){if(!n.value.every(e=>"number"==typeof e&&/^-?\d+$/.test(e.toString())))return t.Logger.Warn("Switch cases should be integers. Using empty array instead."),n.value=[],{valid:!0};const e=new Set(n.value);n.value=Array.from(e)}return{valid:!0}},extraProcessor(e,t,r,n,a){const s=a[0];return s.dataInputs.forEach(e=>{"default"!==e.name&&"case"!==e.name&&(e.name="in_"+e.name)}),s.config||(s.config={}),s.config.treatCasesAsIntegers=!0,a}},"debug/log":{blocks:["FlowGraphConsoleLogBlock"],configuration:{message:{name:"messageTemplate",inOptions:!0}}}};function gn(e,t=["a"],r){return{blocks:[e],inputs:{values:t.reduce((e,t)=>(e[t]={name:t},e),{})},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,a,s){var o;if(r){(o=s[0]).config||(o.config={}),s[0].config.preventIntegerFloatArithmetic=!0;let t=-1;Object.keys(e.values||{}).find(r=>{var n;return void 0!==(null===(n=e.values)||void 0===n?void 0:n[r].type)&&(t=e.values[r].type,!0)}),-1!==t&&(s[0].config.type=a.arrays.types[t].flowGraphType)}return s},validation:e=>r?fn(e):{valid:!0}}}function fn(e){if(e.values){const t=Object.keys(e.values).map(t=>e.values[t].type).filter(e=>void 0!==e);if(!t.every(e=>e===t[0]))return{valid:!1,error:"All inputs must be of the same type"}}return{valid:!0}}function bn(e){for(let t=0;t<e.length;t++){const r=e[t];if(-1==="[]{}".indexOf(r))continue;let n=1;for(;e[t+n]===r;)n++;if(n%2!=0)return!0;t+=n-1}return!1}function yn(e){var t,r,n;const a=null===(n=null===(r=null===(t=e.configuration)||void 0===t?void 0:t.pointer)||void 0===r?void 0:r.value)||void 0===n?void 0:n[0];if("string"!=typeof a)return{valid:!1,error:"A pointer operation requires a string `pointer` configuration value"};if(0!==a.length&&"/"!==a[0])return{valid:!1,error:`The JSON Pointer Template "${a}" is not a syntactically valid JSON Pointer`};const s=e=>({valid:!1,error:`The JSON Pointer Template "${a}" is invalid: ${e}`}),o=new Set;for(const e of a.split("/")){const t="["===e[0]&&"["!==e[1],r="{"===e[0]&&"{"!==e[1];if(!t&&!r){if(bn(e))return s(`the path segment "${e}" contains an odd number of consecutive brackets`);continue}const n=t?"]":"}",a=e.substring(1,e.length-1);if(e.length<3||e[e.length-1]!==n||/[[{]/.test(a)||/[\]}]/.test(a))return s(`the template parameter path segment "${e}" is malformed`);const i=a.replace(/~1/g,"/").replace(/~0/g,"~");if(o.has(i))return s(`the template parameter "${i}" is used more than once`);o.add(i)}return{valid:!0}}function vn(){return Object.keys(pn)}const Tn={float:{length:1,flowGraphType:"number",elementType:"number"},bool:{length:1,flowGraphType:"boolean",elementType:"boolean"},float2:{length:2,flowGraphType:"Vector2",elementType:"number"},float3:{length:3,flowGraphType:"Vector3",elementType:"number"},float4:{length:4,flowGraphType:"Vector4",elementType:"number"},float4x4:{length:16,flowGraphType:"Matrix",elementType:"number"},float2x2:{length:4,flowGraphType:"Matrix2D",elementType:"number"},float3x3:{length:9,flowGraphType:"Matrix3D",elementType:"number"},int:{length:1,flowGraphType:"FlowGraphInteger",elementType:"number"},ref:{length:1,flowGraphType:"string",elementType:"string"}};class xn{constructor(e,t,r=60){this._interactivityGraph=e,this._gltf=t,this._animationTargetFps=r,this._types=[],this._mappings=[],this._staticVariables=[],this._events=[],this._internalEventsCounter=0,this._nodes=[],this._insertedBlocks=[],this._parseTypes(),this._parseDeclarations(),this._parseVariables(),this._parseEvents(),this._parseNodes()}get arrays(){return{types:this._types,mappings:this._mappings,staticVariables:this._staticVariables,events:this._events,nodes:this._nodes}}_parseTypes(){if(this._interactivityGraph.types)for(const e of this._interactivityGraph.types)this._types.push(Tn[e.signature])}_parseDeclarations(){if(this._interactivityGraph.declarations)for(const e of this._interactivityGraph.declarations){const r=dn(e);if(!r)throw t.Logger.Error(["No mapping found for declaration",e]),new Error("Error parsing declarations");this._mappings.push({flowGraphMapping:r,fullOperationName:e.extension?e.op+":"+e.extension:e.op})}}_parseVariables(){if(this._interactivityGraph.variables)for(const e of this._interactivityGraph.variables){const t=this._parseVariable(e);this._staticVariables.push(t)}}_parseVariable(e,r){const n=this._types[e.type];if(!n)throw t.Logger.Error(["No type found for variable",e]),new Error("Error parsing variables");if(e.value&&e.value.length!==n.length)throw t.Logger.Error(["Invalid value length for variable",e,n]),new Error("Error parsing variables");const a=e.value||[];if(!a.length)switch(n.flowGraphType){case"boolean":a.push(!1);break;case"FlowGraphInteger":a.push(0);break;case"number":a.push(NaN);break;case"string":a.push("");break;case"Vector2":a.push(NaN,NaN);break;case"Vector3":a.push(NaN,NaN,NaN);break;case"Vector4":case"Matrix2D":case"Quaternion":a.fill(NaN,0,4);break;case"Matrix":a.fill(NaN,0,16);break;case"Matrix3D":a.fill(NaN,0,9)}return"number"===n.elementType&&"string"==typeof a[0]&&(a[0]=parseFloat(a[0])),{type:n.flowGraphType,value:r?r(a,this):a}}_parseEvents(){if(this._interactivityGraph.events)for(const e of this._interactivityGraph.events){const r={eventId:e.id||"internalEvent_"+this._internalEventsCounter++};e.values&&(r.eventData=Object.keys(e.values).map(r=>{var n;const a=null===(n=e.values)||void 0===n?void 0:n[r];if(!a)throw t.Logger.Error(["No value found for event key",r]),new Error("Error parsing events");const s=this._types[a.type];if(!s)throw t.Logger.Error(["No type found for event value",a]),new Error("Error parsing events");const o=void 0!==a.value?this._parseVariable(a):void 0;return{id:r,type:s.flowGraphType,eventData:!0,value:o}})),this._events.push(r)}}_parseNodes(){var e;if(this._interactivityGraph.nodes)for(const r of this._interactivityGraph.nodes){if("number"!=typeof r.declaration)throw t.Logger.Error(["No declaration found for node",r]),new Error("Error parsing nodes");const n=this._mappings[r.declaration];if(!n)throw t.Logger.Error(["No mapping found for node",r]),new Error("Error parsing nodes");if(n.flowGraphMapping.validation){const t=n.flowGraphMapping.validation(r,this._interactivityGraph,this._gltf);if(!t.valid)throw new Error(`Error validating interactivity node ${null===(e=this._interactivityGraph.declarations)||void 0===e?void 0:e[r.declaration].op} - ${t.error}`)}const a=[];for(const e of n.flowGraphMapping.blocks){const t=this._getEmptyBlock(e,n.fullOperationName);this._parseNodeConfiguration(r,t,n.flowGraphMapping,e),a.push(t)}this._nodes.push({blocks:a,fullOperationName:n.fullOperationName})}}_getEmptyBlock(e,r){return{uniqueId:t.RandomGUID(),className:e,dataInputs:[],dataOutputs:[],signalInputs:[],signalOutputs:[],config:{},type:r,metadata:{}}}_parseNodeConfiguration(e,r,n,a){var s;const o=e.configuration;if(o)for(const e in o){const i=o[e];if(!i)throw new Error("Error parsing node configuration");const l=null===(s=n.configuration)||void 0===s?void 0:s[e];if(l&&l.toBlock?l.toBlock===a:0===n.blocks.indexOf(a)){let n=null==l?void 0:l.defaultValue;(null==i?void 0:i.value)&&(n=i.value),(null==l?void 0:l.isArray)||(1!==n.length&&t.Logger.Warn(`Invalid non-array value length: ${n.length}`),n=n[0]),(null==l?void 0:l.dataTransformer)&&(n=l.dataTransformer(n,this)),void 0!==n&&(r.config[(null==l?void 0:l.name)||e]={value:n})}}}_parseNodeConnections(e){var r,n,a,s,o,i,l,u,c,h,d,m,_,p,g,f,b,y,v;for(let T=0;T<this._nodes.length;T++){const x=null===(r=this._interactivityGraph.nodes)||void 0===r?void 0:r[T];if(!x)throw t.Logger.Error(["No node found for interactivity node",this._nodes[T]]),new Error("Error parsing node connections");const A=this._nodes[T],C=this._mappings[x.declaration];if(!C)throw t.Logger.Error(["No mapping found for node",x]),new Error("Error parsing node connections");if(0===A.blocks.length){t.Logger.Warn(`Skipping connections for no-op node #${T} (unsupported operation: ${A.fullOperationName})`);continue}const R=x.flows||{},w=Object.keys(R).sort();for(const e of w){const r=R[e],c=null===(a=null===(n=C.flowGraphMapping.outputs)||void 0===n?void 0:n.flows)||void 0===a?void 0:a[e],h=(null==c?void 0:c.name)||e,d=r.node,m=this._nodes[d];if(!m)throw t.Logger.Error(["No node found for input node id",d]),new Error("Error parsing node connections");if(0===m.blocks.length){t.Logger.Warn(`Dropping flow connection from node #${T} "${e}" to no-op node #${d} (unsupported operation: ${m.fullOperationName})`);continue}const _=this._createNewSocketConnection(h,!0);(c&&c.toBlock&&A.blocks.find(e=>e.className===c.toBlock)||A.blocks[0]).signalOutputs.push(_);const p=hn(m.fullOperationName);if(!p)throw t.Logger.Error(["No mapping found for input node",m]),new Error("Error parsing node connections");let g=null===(o=null===(s=p.inputs)||void 0===s?void 0:s.flows)||void 0===o?void 0:o[r.socket||"in"],f=!1;if(!g)for(const e in null===(i=p.inputs)||void 0===i?void 0:i.flows)e.startsWith("[")&&e.endsWith("]")&&(f=!0,g=null===(u=null===(l=p.inputs)||void 0===l?void 0:l.flows)||void 0===u?void 0:u[e]);const b=g?f?g.name.replace("$1",r.socket||""):g.name:r.socket||"in",y=g&&g.toBlock&&m.blocks.find(e=>e.className===g.toBlock)||m.blocks[0];let v=y.signalInputs.find(e=>e.name===b);v||(v=this._createNewSocketConnection(b),y.signalInputs.push(v)),v.connectedPointIds.push(_.uniqueId),_.connectedPointIds.push(v.uniqueId)}const M=x.values||{},O=Object.keys(M);for(const r of O){const n=M[r];let a=null===(h=null===(c=C.flowGraphMapping.inputs)||void 0===c?void 0:c.values)||void 0===h?void 0:h[r],s=!1;if(!a)for(const e in null===(d=C.flowGraphMapping.inputs)||void 0===d?void 0:d.values)e.startsWith("[")&&e.endsWith("]")&&(s=!0,a=null===(_=null===(m=C.flowGraphMapping.inputs)||void 0===m?void 0:m.values)||void 0===_?void 0:_[e]);const o=a?s?a.name.replace("$1",r):a.name:r,i=this._createNewSocketConnection(o);(a&&a.toBlock&&A.blocks.find(e=>e.className===a.toBlock)||A.blocks[0]).dataInputs.push(i);const l=!!(null==a?void 0:a.convertConnectedTimeToFrames);if(void 0!==n.value){const t=this._parseVariable(n,a&&a.dataTransformer);e._connectionValues[i.uniqueId]=t}else{if(void 0===n.node)throw t.Logger.Error(["Invalid value for value connection",n]),new Error("Error parsing node connections");{const a=n.node,s=n.socket||"value",o=this._nodes[a];if(!o)throw t.Logger.Error(["No node found for output socket reference",n]),new Error("Error parsing node connections");if(0===o.blocks.length){t.Logger.Warn(`Dropping value connection from no-op node #${a} (unsupported operation: ${o.fullOperationName}) into node #${T} "${r}"; consumer will use type-default value`);continue}const u=hn(o.fullOperationName);if(!u)throw t.Logger.Error(["No mapping found for output socket reference",n]),new Error("Error parsing node connections");let c=null===(g=null===(p=u.outputs)||void 0===p?void 0:p.values)||void 0===g?void 0:g[s],h=!1;if(!c)for(const e in null===(f=u.outputs)||void 0===f?void 0:f.values)e.startsWith("[")&&e.endsWith("]")&&(h=!0,c=null===(y=null===(b=u.outputs)||void 0===b?void 0:b.values)||void 0===y?void 0:y[e]);const d=c?h?c.name.replace("$1",s):null==c?void 0:c.name:s,m=c&&c.toBlock&&o.blocks.find(e=>e.className===c.toBlock)||o.blocks[0];let _=m.dataOutputs.find(e=>e.name===d);_||(_=this._createNewSocketConnection(d,!0),m.dataOutputs.push(_)),l?this._connectWithSecondsToFramesConversion(e,_,i):(i.connectedPointIds.push(_.uniqueId),_.connectedPointIds.push(i.uniqueId))}}}if(C.flowGraphMapping.interBlockConnectors)for(const e of C.flowGraphMapping.interBlockConnectors){const t=e.input,r=e.output,n=e.isVariable;this._connectFlowGraphNodes(t,r,A.blocks[e.inputBlockIndex],A.blocks[e.outputBlockIndex],n)}if(C.flowGraphMapping.extraProcessor){const r=null===(v=this._interactivityGraph.declarations)||void 0===v?void 0:v[x.declaration];if(!r)throw t.Logger.Error(["No declaration found for extra processor",x]),new Error("Error parsing node connections");A.blocks=C.flowGraphMapping.extraProcessor(x,r,C.flowGraphMapping,this,A.blocks,e,this._gltf)}}}_createNewSocketConnection(e,r){return{uniqueId:t.RandomGUID(),name:e,_connectionType:r?1:0,connectedPointIds:[]}}_connectWithSecondsToFramesConversion(e,t,r){const n=this._getEmptyBlock("FlowGraphMultiplyBlock","FlowGraphMultiplyBlock");n.config={type:"number"};const a=this._createNewSocketConnection("a"),s=this._createNewSocketConnection("b"),o=this._createNewSocketConnection("value",!0);n.dataInputs.push(a,s),n.dataOutputs.push(o),e._connectionValues[s.uniqueId]={type:"number",value:[this._animationTargetFps]},a.connectedPointIds.push(t.uniqueId),t.connectedPointIds.push(a.uniqueId),r.connectedPointIds.push(o.uniqueId),o.connectedPointIds.push(r.uniqueId),this._insertedBlocks.push(n)}_connectFlowGraphNodes(e,t,r,n,a){const s=a?r.dataInputs:r.signalInputs,o=a?n.dataOutputs:n.signalOutputs,i=s.find(t=>t.name===e)||this._createNewSocketConnection(e),l=o.find(e=>e.name===t)||this._createNewSocketConnection(t,!0);s.find(t=>t.name===e)||s.push(i),o.find(e=>e.name===t)||o.push(l),i.connectedPointIds.push(l.uniqueId),l.connectedPointIds.push(i.uniqueId)}getVariableName(e){return"staticVariable_"+e}serializeToFlowGraph(){const e={uniqueId:t.RandomGUID(),_userVariables:{},_connectionValues:{}};this._parseNodeConnections(e);for(let t=0;t<this._staticVariables.length;t++){const r=this._staticVariables[t];e._userVariables[this.getVariableName(t)]=r}return{rightHanded:!0,allBlocks:this._nodes.reduce((e,t)=>e.concat(t.blocks),[]).concat(this._insertedBlocks),executionContexts:[e]}}}class An{constructor(e,t){this._prefixes=e,this._fallback=t}addPrefix(e){this._prefixes.unshift(e)}convert(e){for(const{prefix:t,converter:r}of this._prefixes)if(e.startsWith(t))return r.convert(e);return this._fallback.convert(e)}}const Cn="/extensions/BABYLON_scene_objects/";class Rn{constructor(e,t){this._scene=e,this._tree=t}convert(e){if(!e.startsWith(Cn))throw new Error(`BabylonScenePathToObjectConverter: path "${e}" does not start with the expected prefix "${Cn}".`);const t=e.slice(34).split("/").filter(e=>e.length>0);if(0===t.length)throw new Error(`BabylonScenePathToObjectConverter: path "${e}" is missing a collection name.`);const r=t[0],n=this._tree[r];if(!n)throw new Error(`BabylonScenePathToObjectConverter: unknown collection "${r}" in path "${e}".`);if(2===t.length&&"length"===t[1])return{object:this._getCollectionArray(r),info:n.length};if(t.length<2)throw new Error(`BabylonScenePathToObjectConverter: path "${e}" is missing an instance id.`);if(!/^\d+$/.test(t[1]))throw new Error(`BabylonScenePathToObjectConverter: invalid uniqueId "${t[1]}" in path "${e}".`);const a=parseInt(t[1],10);if(!Number.isFinite(a)||a<0)throw new Error(`BabylonScenePathToObjectConverter: invalid uniqueId "${t[1]}" in path "${e}".`);const s=this._lookupInstanceByUniqueId(r,a);if(!s)throw new Error(`BabylonScenePathToObjectConverter: no ${r} instance found with uniqueId ${a} (path "${e}").`);if(2===t.length)return{object:s,info:this._buildIdentityAccessor(s)};if(t.length>3)throw new Error(`BabylonScenePathToObjectConverter: nested property paths are not yet supported (path "${e}").`);const o=t[2],i=n.__array__[o];if(!i||"boolean"==typeof i)throw new Error(`BabylonScenePathToObjectConverter: property "${o}" is not registered on ${r} (path "${e}").`);return{object:s,info:i}}_getCollectionArray(e){switch(e){case"transformNodes":return this._scene.transformNodes;case"meshes":return this._scene.meshes;case"materials":return this._scene.materials;default:return[]}}_lookupInstanceByUniqueId(e,t){switch(e){case"transformNodes":return this._scene.transformNodes.find(e=>e.uniqueId===t)||this._scene.meshes.find(e=>e.uniqueId===t);case"meshes":return this._scene.meshes.find(e=>e.uniqueId===t);case"materials":return this._scene.materials.find(e=>e.uniqueId===t);default:return}}_buildIdentityAccessor(e){return{type:"object",get:()=>e,getTarget:()=>e,isReadOnly:!0}}}const wn="/extensions/KHR_interactivity/events/";const Mn={isKhrInteractivityRef:!0};class On{convert(e){const r=e.endsWith("/")?e.slice(0,-1):e;if(r.startsWith(wn)){const e=r.substring(37);return{object:Mn,info:{type:"object",isReadOnly:!0,get:()=>e.length>0?r:void 0,getTarget:()=>Mn}}}const n=r.substring(37),a=/^\d+$/.test(n)?parseInt(n,10):NaN;return{object:Mn,info:{type:"object",isReadOnly:!0,get:(e,r,n)=>{const s=n;if(!(!s||isNaN(a)||a<0))return t.IsDelayActive(s,a)?new t.FlowGraphInteger(a):void 0},getTarget:()=>Mn}}}}const Fn="/extensions/KHR_interactivity/limits/",Ln={major:2,minor:0},En=2147483647,Sn={maxActiveAnimations:En,maxActiveDelays:En,maxActivePropertyInterpolations:En,maxActiveVariableInterpolations:En},kn={isKhrInteractivityAssetCapability:!0};class In{constructor(e,t){this._gltf=e,this._isExtensionEnabled=t}convert(e){const t=e.endsWith("/")?e.slice(0,-1):e;if(t.startsWith(Fn)){const r=Sn[t.substring(37)];if(void 0===r)throw new Error(`Path ${e} is invalid`);return this._createAccessor("number",()=>r)}const r=t.substring(36);if("majorVersion"===r||"minorVersion"===r)return this._createAccessor("number",()=>{var e;return function(e){const[t,r]=(null!=e?e:"").split("."),n=parseInt(t,10),a=parseInt(r,10);return isNaN(n)?Ln:n!==Ln.major?n<Ln.major?{major:n,minor:isNaN(a)?0:a}:Ln:{major:n,minor:Math.min(isNaN(a)?0:a,Ln.minor)}}(null===(e=this._gltf.asset)||void 0===e?void 0:e.version)["majorVersion"===r?"major":"minor"]});const n=r.split("/");if(3===n.length&&"extensions"===n[0]&&"enabled"===n[2]){const e=n[1];return this._createAccessor("boolean",()=>this._isExtensionEnabled(e))}throw new Error(`Path ${e} is invalid`)}_createAccessor(e,t){return{object:kn,info:{type:e,isReadOnly:!0,get:t,getTarget:()=>kn}}}}class Pn{encodeEventReference(e){return function(e){return wn+e}(e)}decodeEventReference(e){return function(e){return"string"==typeof(t=e)&&t.startsWith(wn)?e.substring(37):void 0;var t}(e)}decodeIndexReference(e){if(0===e.length||"/"!==e[0])return;const t=e.substring(e.lastIndexOf("/")+1);return/^(0|[1-9]\d*)$/.test(t)?parseInt(t,10):void 0}getObjectReference(e,t){var r,n;const a=null===(n=null===(r=e._internalMetadata)||void 0===r?void 0:r.gltf)||void 0===n?void 0:n.pointers;if(!Array.isArray(a))return;const s=a.filter(e=>"string"==typeof e);if(0!==s.length){if(t){const e=s.find(e=>e.split("/")[1]===t);if(e)return e}return s[0]}}}const Bn="KHR_interactivity";class Nn{constructor(e){var r;this._loader=e,this.name=Bn,this.enabled=this._loader.isExtensionUsed(Bn),this._gltfPathConverter=B(this._loader.gltf);const n=e.babylonScene;if(this._gltfPathConverter){const e=[];n&&e.push({prefix:Cn,converter:new Rn(n,{transformNodes:{length:{type:"number",get:e=>e.length,getTarget:e=>e},__array__:{__target__:!0,name:{type:"string",get:e=>e.name,set:(e,t)=>{t.name=e},getTarget:e=>e},translation:{type:"Vector3",get:e=>e.position,set:(e,t)=>t.position.copyFrom(e),getTarget:e=>e},rotation:{type:"Quaternion",get:e=>{var r;return null!==(r=e.rotationQuaternion)&&void 0!==r?r:t.Quaternion.RotationYawPitchRoll(e.rotation.y,e.rotation.x,e.rotation.z)},set:(e,t)=>{t.rotationQuaternion?t.rotationQuaternion.copyFrom(e):t.rotationQuaternion=e.clone()},getTarget:e=>e},scale:{type:"Vector3",get:e=>e.scaling,set:(e,t)=>t.scaling.copyFrom(e),getTarget:e=>e},matrix:{type:"Matrix",get:e=>e.computeWorldMatrix(!1),getTarget:e=>e,isReadOnly:!0},globalMatrix:{type:"Matrix",get:e=>e.computeWorldMatrix(!0),getTarget:e=>e,isReadOnly:!0}}},meshes:{length:{type:"number",get:e=>e.length,getTarget:e=>e},__array__:{__target__:!0,name:{type:"string",get:e=>e.name,set:(e,t)=>{t.name=e},getTarget:e=>e},visible:{type:"boolean",get:e=>e.isVisible,set:(e,t)=>{t.isVisible=e},getTarget:e=>e}}},materials:{length:{type:"number",get:e=>e.length,getTarget:e=>e},__array__:{__target__:!0,name:{type:"string",get:e=>e.name,set:(e,t)=>{t.name=e},getTarget:e=>e}}}})});const a=new On;e.push({prefix:wn,converter:a}),e.push({prefix:"/extensions/KHR_interactivity/delays/",converter:a});const s=new Set((null!==(r=this._loader.gltf.extensionsUsed)&&void 0!==r?r:[]).filter(e=>{var t;return H.has(e)&&!1!==(null===(t=this._loader.parent.extensionOptions[e])||void 0===t?void 0:t.enabled)})),o=new In(this._loader.gltf,e=>s.has(e));e.push({prefix:"/extensions/KHR_interactivity/asset/",converter:o}),e.push({prefix:Fn,converter:o}),this._pathConverter=new An(e,this._gltfPathConverter)}e._skipStartAnimationStep=!0,n&&Gn(n)}dispose(){this._loader=null,delete this._gltfPathConverter,delete this._pathConverter}onReady(){return D(this,void 0,void 0,function*(){var e;if(!this._loader.babylonScene||!this._pathConverter)return;const r=this._loader.babylonScene,n=null===(e=this._loader.gltf.extensions)||void 0===e?void 0:e.KHR_interactivity;n&&(yield Promise.all(n.graphs.map((e,n)=>D(this,void 0,void 0,function*(){var a;const s=new t.FlowGraphCoordinator({scene:r,hostResolver:new Pn});s.dispatchEventsSynchronously=!1;try{const r=new xn(e,this._loader.gltf,this._loader.parent.targetFps);yield t.ParseFlowGraphAsync(r.serializeToFlowGraph(),{coordinator:s,pathConverter:this._pathConverter}),s.start()}catch(e){t.Logger.Error(`KHR_interactivity: rejecting behavior graph #${n}: ${null!==(a=null==e?void 0:e.message)&&void 0!==a?a:e}`),s.dispose()}}))))})}}function Gn(e){$("/extensions/KHR_interactivity/?/activeCamera/rotation",{get:()=>{if(!e.activeCamera)return new t.Quaternion(NaN,NaN,NaN,NaN);const r=t.Quaternion.FromRotationMatrix(e.activeCamera.getWorldMatrix()).normalize();return e.useRightHandedSystem||(r.w*=-1,r.x*=-1),r},type:"Quaternion",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/position",{get:()=>{if(!e.activeCamera)return new t.Vector3(NaN,NaN,NaN);const r=e.activeCamera.getWorldMatrix().getTranslation();return e.useRightHandedSystem||(r.x*=-1),r},type:"Vector3",getTarget:()=>e.activeCamera});const r=r=>{const n=e.activeCamera;return n&&n.mode!==t.Constants.ORTHOGRAPHIC_CAMERA?r(n):NaN},n=r=>{const n=e.activeCamera;return n&&n.mode===t.Constants.ORTHOGRAPHIC_CAMERA?r(n):NaN};$("/extensions/KHR_interactivity/?/activeCamera/perspective/aspectRatio",{get:()=>r(e=>e.getEngine().getAspectRatio(e)),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/perspective/yfov",{get:()=>r(e=>{if(e.fovMode===t.Constants.FOVMODE_VERTICAL_FIXED)return e.fov;const r=e.getEngine().getAspectRatio(e);return r?2*Math.atan(Math.tan(e.fov/2)/r):e.fov}),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/perspective/znear",{get:()=>r(e=>e.minZ),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/perspective/zfar",{get:()=>r(e=>0===e.maxZ?1/0:e.maxZ),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/orthographic/xmag",{get:()=>n(e=>{var t,r;const n=e.getEngine().getRenderWidth()/2;return((null!==(t=e.orthoRight)&&void 0!==t?t:n)-(null!==(r=e.orthoLeft)&&void 0!==r?r:-n))/2}),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/orthographic/ymag",{get:()=>n(e=>{var t,r;const n=e.getEngine().getRenderHeight()/2;return((null!==(t=e.orthoTop)&&void 0!==t?t:n)-(null!==(r=e.orthoBottom)&&void 0!==r?r:-n))/2}),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/orthographic/znear",{get:()=>n(e=>e.minZ),type:"number",getTarget:()=>e.activeCamera}),$("/extensions/KHR_interactivity/?/activeCamera/orthographic/zfar",{get:()=>n(e=>e.maxZ),type:"number",getTarget:()=>e.activeCamera}),$("/animations/{}/extensions/KHR_interactivity/isPlaying",{get:e=>{var t,r;return null!==(r=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.isPlaying)&&void 0!==r&&r},type:"boolean",getTarget:e=>e._babylonAnimationGroup}),$("/animations/{}/extensions/KHR_interactivity/minTime",{get:e=>{var t,r;return(null!==(r=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.from)&&void 0!==r?r:0)/60},type:"number",getTarget:e=>e._babylonAnimationGroup}),$("/animations/{}/extensions/KHR_interactivity/maxTime",{get:e=>{var t,r;return(null!==(r=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.to)&&void 0!==r?r:0)/60},type:"number",getTarget:e=>e._babylonAnimationGroup}),$("/animations/{}/extensions/KHR_interactivity/playhead",{get:e=>{var t,r;return(null!==(r=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.getCurrentFrame())&&void 0!==r?r:0)/60},type:"number",getTarget:e=>e._babylonAnimationGroup}),$("/animations/{}/extensions/KHR_interactivity/virtualPlayhead",{get:e=>{var t,r;return(null!==(r=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.getCurrentFrame())&&void 0!==r?r:0)/60},type:"number",getTarget:e=>e._babylonAnimationGroup})}let $n=!1;function Dn(){$n||($n=!0,t.addToBlockFactory(Bn,"FlowGraphGLTFDataProvider",()=>D(this,void 0,void 0,function*(){return(yield Promise.resolve().then(function(){return _a})).FlowGraphGLTFDataProvider})))}let Vn=!1;function Hn(){Vn||(Vn=!0,Dn(),W(Bn),K(Bn,!0,e=>new Nn(e)))}Hn();const Kn="KHR_node_visibility";class Wn{constructor(e){this.name=Kn,this._loader=e,this.enabled=e.isExtensionUsed(Kn)}onReady(){var e;if(!this._loader)return;const t=this._loader.gltf.nodes;if(t)for(const r of t){const t=r._babylonTransformNode;t&&(t.inheritVisibility=!0,r.extensions&&r.extensions.KHR_node_visibility&&!1===r.extensions.KHR_node_visibility.visible&&(t.isVisible=!1,null===(e=r._primitiveBabylonMeshes)||void 0===e||e.forEach(e=>{e.inheritVisibility=!0,e.isVisible=!1})))}}dispose(){delete this._loader}}let Un=!1;function zn(){Un||(Un=!0,$("/nodes/{}/extensions/KHR_node_visibility/visible",{get:e=>{const t=e._babylonTransformNode;return!t||void 0===t.isVisible||t.isVisible},set:(e,t)=>{var r,n;null===(r=t._primitiveBabylonMeshes)||void 0===r||r.forEach(e=>{e.inheritVisibility=!0}),t._babylonTransformNode&&(t._babylonTransformNode.isVisible=e),null===(n=t._primitiveBabylonMeshes)||void 0===n||n.forEach(t=>{t.isVisible=e})},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"isVisible"],type:"boolean"}))}let qn=!1;function jn(){qn||(qn=!0,zn(),W(Kn),K(Kn,!0,e=>new Wn(e)))}jn();const Yn="KHR_node_selectability";class Xn{constructor(e){this.name=Yn,this._loader=e,this.enabled=e.isExtensionUsed(Yn)}onReady(){return D(this,void 0,void 0,function*(){var e;null===(e=this._loader.gltf.nodes)||void 0===e||e.forEach(e=>{var t,r,n;(null===(t=e.extensions)||void 0===t?void 0:t.KHR_node_selectability)&&!1===(null===(r=e.extensions)||void 0===r?void 0:r.KHR_node_selectability.selectable)&&(null===(n=e._babylonTransformNode)||void 0===n||n.getChildMeshes().forEach(e=>{e.isPickable=!1}))})})}dispose(){this._loader=null}}let Qn=!1;function Jn(){Qn||(Qn=!0,mn("event/onSelect",Yn,{blocks:["FlowGraphMeshPickEventBlock","FlowGraphGetVariableBlock","FlowGraphIndexOfBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],configuration:{stopPropagation:{name:"stopPropagation"},nodeIndex:{name:"variable",toBlock:"FlowGraphGetVariableBlock",dataTransformer:e=>"pickedMesh_"+e}},outputs:{values:{selectedNodeIndex:{name:"index",toBlock:"FlowGraphIndexOfBlock"},selectedNode:{name:"pickedMesh",toBlock:"FlowGraphMeshPickEventBlock"},controllerIndex:{name:"pointerId"},selectionPoint:{name:"pickedPoint"},selectionRayOrigin:{name:"pickOrigin"}},flows:{out:{name:"done"}}},interBlockConnectors:[{input:"asset",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"nodes",inputBlockIndex:2,outputBlockIndex:3,isVariable:!0},{input:"object",output:"pickedMesh",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0}],extraProcessor(e,t,r,n,a,s,o){var i,l,u,c,h,d,m;const _=a[a.length-1];_.config=_.config||{},_.config.glTF=o;const p=null===(u=null===(l=null===(i=e.configuration)||void 0===i?void 0:i.nodeIndex)||void 0===l?void 0:l.value)||void 0===u?void 0:u[0];if(void 0===p||"number"!=typeof p)throw new Error("nodeIndex not found in configuration");const g="pickedMesh_"+p;return a[1].config.variable=g,s._userVariables[g]={className:"Mesh",id:null===(h=null===(c=null==o?void 0:o.nodes)||void 0===c?void 0:c[p]._babylonTransformNode)||void 0===h?void 0:h.id,uniqueId:null===(m=null===(d=null==o?void 0:o.nodes)||void 0===d?void 0:d[p]._babylonTransformNode)||void 0===m?void 0:m.uniqueId},a}}),$("/nodes/{}/extensions/KHR_node_selectability/selectable",{get:e=>{const t=e._babylonTransformNode;return!t||void 0===t.isPickable||t.isPickable},set:(e,t)=>{var r;null===(r=t._primitiveBabylonMeshes)||void 0===r||r.forEach(t=>{t.isPickable=e})},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"isPickable"],type:"boolean"}))}let Zn=!1;function ea(){Zn||(Zn=!0,Jn(),W(Yn),K(Yn,!0,e=>new Xn(e)))}ea();const ta="KHR_node_hoverability",ra="targetMeshPointerOver_",na="targetMeshPointerOut_";class aa{constructor(e){this.name=ta,this._loader=e,this.enabled=e.isExtensionUsed(ta)}onReady(){return D(this,void 0,void 0,function*(){var e;null===(e=this._loader.gltf.nodes)||void 0===e||e.forEach(e=>{var t,r,n;(null===(t=e.extensions)||void 0===t?void 0:t.KHR_node_hoverability)&&!1===(null===(r=e.extensions)||void 0===r?void 0:r.KHR_node_hoverability.hoverable)&&(null===(n=e._babylonTransformNode)||void 0===n||n.getChildMeshes().forEach(e=>{e.pointerOverDisableMeshTesting=!0}))})})}dispose(){this._loader=null}}let sa=!1;function oa(){sa||(sa=!0,mn("event/onHoverIn",ta,{blocks:["FlowGraphPointerOverEventBlock","FlowGraphGetVariableBlock","FlowGraphIndexOfBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],configuration:{stopPropagation:{name:"stopPropagation"},nodeIndex:{name:"variable",toBlock:"FlowGraphGetVariableBlock",dataTransformer:e=>ra+e}},outputs:{values:{hoverNodeIndex:{name:"index",toBlock:"FlowGraphIndexOfBlock"},hoveredNode:{name:"meshUnderPointer",toBlock:"FlowGraphPointerOverEventBlock"},controllerIndex:{name:"pointerId"}},flows:{out:{name:"done"}}},interBlockConnectors:[{input:"targetMesh",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"nodes",inputBlockIndex:2,outputBlockIndex:3,isVariable:!0},{input:"object",output:"meshUnderPointer",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0}],extraProcessor(e,t,r,n,a,s,o){var i,l,u,c,h,d,m;const _=a[a.length-1];_.config=_.config||{},_.config.glTF=o;const p=null===(u=null===(l=null===(i=e.configuration)||void 0===i?void 0:i.nodeIndex)||void 0===l?void 0:l.value)||void 0===u?void 0:u[0];if(void 0===p||"number"!=typeof p)throw new Error("nodeIndex not found in configuration");const g=ra+p;return a[1].config.variable=g,s._userVariables[g]={className:"Mesh",id:null===(h=null===(c=null==o?void 0:o.nodes)||void 0===c?void 0:c[p]._babylonTransformNode)||void 0===h?void 0:h.id,uniqueId:null===(m=null===(d=null==o?void 0:o.nodes)||void 0===d?void 0:d[p]._babylonTransformNode)||void 0===m?void 0:m.uniqueId},a}}),mn("event/onHoverOut",ta,{blocks:["FlowGraphPointerOutEventBlock","FlowGraphGetVariableBlock","FlowGraphIndexOfBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],configuration:{stopPropagation:{name:"stopPropagation"},nodeIndex:{name:"variable",toBlock:"FlowGraphGetVariableBlock",dataTransformer:e=>na+e}},outputs:{values:{hoverNodeIndex:{name:"index",toBlock:"FlowGraphIndexOfBlock"},hoveredNode:{name:"meshOutOfPointer",toBlock:"FlowGraphPointerOutEventBlock"},controllerIndex:{name:"pointerId"}},flows:{out:{name:"done"}}},interBlockConnectors:[{input:"targetMesh",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"nodes",inputBlockIndex:2,outputBlockIndex:3,isVariable:!0},{input:"object",output:"meshOutOfPointer",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0}],extraProcessor(e,t,r,n,a,s,o){var i,l,u,c,h,d,m;const _=a[a.length-1];_.config=_.config||{},_.config.glTF=o;const p=null===(u=null===(l=null===(i=e.configuration)||void 0===i?void 0:i.nodeIndex)||void 0===l?void 0:l.value)||void 0===u?void 0:u[0];if(void 0===p||"number"!=typeof p)throw new Error("nodeIndex not found in configuration");const g=na+p;return a[1].config.variable=g,s._userVariables[g]={className:"Mesh",id:null===(h=null===(c=null==o?void 0:o.nodes)||void 0===c?void 0:c[p]._babylonTransformNode)||void 0===h?void 0:h.id,uniqueId:null===(m=null===(d=null==o?void 0:o.nodes)||void 0===d?void 0:d[p]._babylonTransformNode)||void 0===m?void 0:m.uniqueId},a}}),$("/nodes/{}/extensions/KHR_node_hoverability/hoverable",{get:e=>{const t=e._babylonTransformNode;return!t||void 0===t.pointerOverDisableMeshTesting||t.pointerOverDisableMeshTesting},set:(e,t)=>{var r;null===(r=t._primitiveBabylonMeshes)||void 0===r||r.forEach(t=>{t.pointerOverDisableMeshTesting=!e})},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"pointerOverDisableMeshTesting"],type:"boolean"}))}let ia=!1;function la(){ia||(ia=!0,oa(),W(ta),K(ta,!0,e=>new aa(e)))}la();const ua="ExtrasAsMetadata";class ca{_assignExtras(e,t){if(t.extras&&Object.keys(t.extras).length>0){const r=e.metadata=e.metadata||{};(r.gltf=r.gltf||{}).extras=t.extras}}constructor(e){this.name=ua,this.enabled=!0,this._loader=e}dispose(){this._loader=null}loadNodeAsync(e,t,r){return this._loader.loadNodeAsync(e,t,e=>{this._assignExtras(e,t),r(e)})}loadCameraAsync(e,t,r){return this._loader.loadCameraAsync(e,t,e=>{this._assignExtras(e,t),r(e)})}createMaterial(e,t,r){const n=this._loader.createMaterial(e,t,r);return this._assignExtras(n,t),n}loadAnimationAsync(e,t){return this._loader.loadAnimationAsync(e,t).then(e=>(this._assignExtras(e,t),e))}}let ha=!1;function da(){ha||(ha=!0,W(ua),K(ua,!1,e=>new ca(e)))}da();class ma extends t.FlowGraphBlock{constructor(e){var r,n;super(e);const a=e.glTF,s=(null===(r=null==a?void 0:a.animations)||void 0===r?void 0:r.map(e=>e._babylonAnimationGroup))||[];this.animationGroups=this.registerDataOutput("animationGroups",t.RichTypeAny,s);const o=(null===(n=null==a?void 0:a.nodes)||void 0===n?void 0:n.map(e=>e._babylonTransformNode))||[];this.nodes=this.registerDataOutput("nodes",t.RichTypeAny,o)}getClassName(){return"FlowGraphGLTFDataProvider"}}var _a={__proto__:null,FlowGraphGLTFDataProvider:ma},pa={__proto__:null,AddObjectAccessorToKey:$,EXT_lights_area:Ge,EXT_lights_ies:ye,EXT_lights_image_based:Z,EXT_mesh_gpu_instancing:ne,EXT_meshopt_compression:ie,EXT_texture_avif:pe,EXT_texture_webp:he,ExtrasAsMetadata:ca,FlowGraphGLTFDataProvider:ma,GetMappingForKey:N,GetPathToObjectConverter:B,InteractivityGraphToFlowGraphParser:xn,KHR_animation_pointer:Cr,KHR_draco_mesh_compression:Ae,KHR_gaussian_splatting:Le,KHR_interactivity:Nn,KHR_lights:Ie,KHR_materials_anisotropy:lt,KHR_materials_clearcoat:Xe,KHR_materials_coat:et,KHR_materials_diffuse_roughness:ar,KHR_materials_diffuse_transmission:Ht,KHR_materials_dispersion:er,KHR_materials_emissive_strength:dt,KHR_materials_fuzz:vt,KHR_materials_ior:Ot,KHR_materials_iridescence:at,KHR_materials_pbrSpecularGlossiness:He,KHR_materials_sheen:gt,KHR_materials_specular:Ct,KHR_materials_transmission:Gt,KHR_materials_unlit:ze,KHR_materials_variants:St,KHR_materials_volume:zt,KHR_materials_volume_scatter:Xt,KHR_mesh_quantization:lr,KHR_node_hoverability:aa,KHR_node_selectability:Xn,KHR_node_visibility:Wn,KHR_texture_basisu:dr,KHR_texture_transform:gr,KHR_xmp_json_ld:vr,MSFT_audio_emitter:Yr,MSFT_lod:Zr,MSFT_minecraftMesh:nn,MSFT_sRGBFactors:ln,RegisterEXT_lights_area:De,RegisterEXT_lights_ies:Te,RegisterEXT_lights_image_based:te,RegisterEXT_mesh_gpu_instancing:se,RegisterEXT_meshopt_compression:ue,RegisterEXT_texture_avif:fe,RegisterEXT_texture_webp:me,RegisterExtrasAsMetadata:da,RegisterKHR_animation_pointer:wr,RegisterKHR_draco_mesh_compression:Re,RegisterKHR_gaussian_splatting:Se,RegisterKHR_interactivity:Hn,RegisterKHR_lights:Be,RegisterKHR_materials_anisotropy:ct,RegisterKHR_materials_clearcoat:Je,RegisterKHR_materials_coat:rt,RegisterKHR_materials_diffuse_roughness:or,RegisterKHR_materials_diffuse_transmission:Wt,RegisterKHR_materials_dispersion:rr,RegisterKHR_materials_emissive_strength:_t,RegisterKHR_materials_fuzz:xt,RegisterKHR_materials_ior:Lt,RegisterKHR_materials_iridescence:ot,RegisterKHR_materials_pbrSpecularGlossiness:We,RegisterKHR_materials_sheen:bt,RegisterKHR_materials_specular:wt,RegisterKHR_materials_transmission:Dt,RegisterKHR_materials_unlit:je,RegisterKHR_materials_variants:It,RegisterKHR_materials_volume:jt,RegisterKHR_materials_volume_scatter:Jt,RegisterKHR_mesh_quantization:cr,RegisterKHR_node_hoverability:la,RegisterKHR_node_selectability:ea,RegisterKHR_node_visibility:jn,RegisterKHR_texture_basisu:_r,RegisterKHR_texture_transform:br,RegisterKHR_xmp_json_ld:xr,RegisterMSFT_audio_emitter:Qr,RegisterMSFT_lod:tn,RegisterMSFT_minecraftMesh:sn,RegisterMSFT_sRGBFactors:cn,SetInterpolationForKey:G,TransmissionHelper:Pt,_AddInteractivityObjectModel:Gn,_RegisterKHRInteractivityRuntime:Dn,_RegisterKHRNodeHoverabilityRuntime:oa,_RegisterKHRNodeSelectabilityRuntime:Jn,_RegisterKHRNodeVisibilityRuntime:zn,addNewInteractivityFlowGraphMapping:mn,ensureTransmissionHelper:Bt,getAllSupportedNativeNodeTypes:vn,getMappingForDeclaration:dn,getMappingForFullOperationName:hn,gltfTypeToBabylonType:Tn};Q(),v(),Ir();class ga{constructor(e){this._specWorkflow=!1,this._diffuseTransmissionTint=t.Color3.White(),this._diffuseTransmissionTintTexture=null,this._material=e}get material(){return this._material}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){this._material.alphaCutOff=e}get alphaCutOff(){return this._material.alphaCutOff}set useAlphaFromBaseColorTexture(e){this._material._useAlphaFromBaseColorTexture=e}get useAlphaFromBaseColorTexture(){return this._material._useAlphaFromBaseColorTexture}get transparencyAsAlphaCoverage(){return!1}set transparencyAsAlphaCoverage(e){}set baseColor(e){this._material.baseColor=e}get baseColor(){return this._material.baseColor}set baseColorTexture(e){this._material.baseColorTexture=e}get baseColorTexture(){return this._material.baseColorTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e}get baseDiffuseRoughness(){return this._material.baseDiffuseRoughness}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.baseMetalness=e}get baseMetalness(){return this._material.baseMetalness}set baseMetalnessTexture(e){this._material.baseMetalnessTexture=e}get baseMetalnessTexture(){return this._material.baseMetalnessTexture}set useRoughnessFromMetallicTextureGreen(e){this._material._useRoughnessFromMetallicTextureGreen=e}set useMetallicFromMetallicTextureBlue(e){this._material._useMetallicFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){}configureSpecularGlossiness(){this._specWorkflow=!0}set specularWeight(e){this._material.specularWeight=e}get specularWeight(){return this._material.specularWeight}set specularWeightTexture(e){this._material.specularColorTexture===e?(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0):this._material.specularWeightTexture=e}get specularWeightTexture(){return this._material.specularWeightTexture}set specularColor(e){this._material.specularColor=e}get specularColor(){return this._material.specularColor}set specularColorTexture(e){this._material.specularColorTexture=e,this._material.specularWeightTexture===this._material.specularColorTexture&&(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0)}get specularColorTexture(){return this._material.specularColorTexture}set specularRoughness(e){this._material.specularRoughness=e}get specularRoughness(){return this._material.specularRoughness}set specularRoughnessTexture(e){this._material.specularRoughnessTexture=e}get specularRoughnessTexture(){return this._material.specularRoughnessTexture}set specularIor(e){this._material.specularIor=e}get specularIor(){return this._material.specularIor}set glossiness(e){this._material.specularRoughness=Math.max(1-e,0)}get glossiness(){return 1-this._material.specularRoughness}set emissionColor(e){this._material.emissionColor=e}get emissionColor(){return this._material.emissionColor}set emissionLuminance(e){this._material.emissionLuminance=e}get emissionLuminance(){return this._material.emissionLuminance}set emissionColorTexture(e){this._material.emissionColorTexture=e}get emissionColorTexture(){return this._material.emissionColorTexture}set ambientOcclusionTexture(e){this._material.ambientOcclusionTexture=e}get ambientOcclusionTexture(){return this._material.ambientOcclusionTexture}set ambientOcclusionTextureStrength(e){const t=this._material.ambientOcclusionTexture;t&&(t.level=e)}get ambientOcclusionTextureStrength(){var e;const t=this._material.ambientOcclusionTexture;return null!==(e=null==t?void 0:t.level)&&void 0!==e?e:1}configureCoat(){}set coatWeight(e){this._material.coatWeight=e}get coatWeight(){return this._material.coatWeight}set coatWeightTexture(e){this._material.coatWeightTexture=e}get coatWeightTexture(){return this._material.coatWeightTexture}set coatColor(e){this._material.coatColor=e}get coatColor(){return this._material.coatColor}set coatColorTexture(e){this._material.coatColorTexture=e}set coatRoughness(e){this._material.coatRoughness=e}get coatRoughness(){return this._material.coatRoughness}set coatRoughnessTexture(e){this._material.coatRoughnessTexture=e,e&&(this._material._useCoatRoughnessFromGreenChannel=!0)}get coatRoughnessTexture(){return this._material.coatRoughnessTexture}set coatIor(e){this._material.coatIor=e}get coatIor(){return this._material.coatIor}set coatDarkening(e){this._material.coatDarkening=e}get coatDarkening(){return this._material.coatDarkening}set coatDarkeningTexture(e){this._material.coatDarkeningTexture=e}set coatRoughnessAnisotropy(e){this._material.coatRoughnessAnisotropy=e}get coatRoughnessAnisotropy(){return this._material.coatRoughnessAnisotropy}set geometryCoatTangentAngle(e){this._material.geometryCoatTangentAngle=e}set geometryCoatTangentTexture(e){this._material.geometryCoatTangentTexture=e,e&&(this._material._useCoatRoughnessAnisotropyFromTangentTexture=!0)}get geometryCoatTangentTexture(){return this._material.geometryCoatTangentTexture}configureTransmission(){this._material.geometryThinWalled=1,this._material.transmissionDepth=0}set transmissionWeight(e){this._material.transmissionWeight=e}set transmissionWeightTexture(e){this._material.transmissionWeightTexture=e}get transmissionWeightTexture(){return this._material.transmissionWeightTexture}get transmissionWeight(){return this._material.transmissionWeight}set transmissionScatter(e){this._material.transmissionScatter=e}get transmissionScatter(){return this._material.transmissionScatter}set transmissionScatterTexture(e){this._material.transmissionScatterTexture=e}get transmissionScatterTexture(){return this._material.transmissionScatterTexture}set transmissionScatterAnisotropy(e){this._material.transmissionScatterAnisotropy=e}set transmissionDispersionAbbeNumber(e){this._material.transmissionDispersionAbbeNumber=e}set transmissionDispersionScale(e){this._material.transmissionDispersionScale=e}set transmissionDepth(e){e!==Number.MAX_VALUE||0!==this._material.transmissionDepth?this._material.transmissionDepth=e:this._material.transmissionDepth=0}get transmissionDepth(){return this._material.transmissionDepth}set transmissionColor(e){e.equals(t.Color3.White())||(this._material.transmissionColor=e)}get transmissionColor(){return this._material.transmissionColor}get refractionBackgroundTexture(){return this._material.backgroundRefractionTexture}set refractionBackgroundTexture(e){this._material.backgroundRefractionTexture=e}configureVolume(){this._material.geometryThinWalled=0}set geometryThinWalled(e){this._material.geometryThinWalled=e?1:0}get geometryThinWalled(){return!!this._material.geometryThinWalled}set volumeThicknessTexture(e){this._material.geometryThicknessTexture=e,this._material._useGeometryThicknessFromGreenChannel=!0}set volumeThickness(e){this._material.geometryThickness=e}configureSubsurface(){this._material.geometryThinWalled=1,this._material.subsurfaceScatterAnisotropy=1}set subsurfaceWeight(e){this._material.subsurfaceWeight=e}get subsurfaceWeight(){return this._material.subsurfaceWeight}set subsurfaceWeightTexture(e){this._material.subsurfaceWeightTexture=e,this._material._useSubsurfaceWeightFromTextureAlpha=!0}get subsurfaceWeightTexture(){return this._material.subsurfaceWeightTexture}set subsurfaceColor(e){this._material.subsurfaceColor=e}set subsurfaceColorTexture(e){this._material.subsurfaceColorTexture=e}set diffuseTransmissionTint(e){this._diffuseTransmissionTint=e}get diffuseTransmissionTint(){return this._diffuseTransmissionTint}set diffuseTransmissionTintTexture(e){this._diffuseTransmissionTintTexture=e}get subsurfaceRadius(){return this._material.subsurfaceRadius}set subsurfaceRadius(e){this._material.subsurfaceRadius=e}get subsurfaceRadiusScale(){return this._material.subsurfaceRadiusScale}set subsurfaceRadiusScale(e){this._material.subsurfaceRadiusScale=e}set subsurfaceScatterAnisotropy(e){this._material.subsurfaceScatterAnisotropy=e}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){}set fuzzWeight(e){this._material.fuzzWeight=e}set fuzzWeightTexture(e){this._material.fuzzWeightTexture=e}set fuzzColor(e){this._material.fuzzColor=e}set fuzzColorTexture(e){this._material.fuzzColorTexture=e}set fuzzRoughness(e){this._material.fuzzRoughness=e}set fuzzRoughnessTexture(e){this._material.fuzzRoughnessTexture=e,this._material._useFuzzRoughnessFromTextureAlpha=!0}set specularRoughnessAnisotropy(e){this._material.specularRoughnessAnisotropy=e}get specularRoughnessAnisotropy(){return this._material.specularRoughnessAnisotropy}set geometryTangentAngle(e){this._material.geometryTangentAngle=e}set geometryTangentTexture(e){this._material.geometryTangentTexture=e,this._material._useSpecularRoughnessAnisotropyFromTangentTexture=!0}get geometryTangentTexture(){return this._material.geometryTangentTexture}configureGltfStyleAnisotropy(e=!0){this._material._useGltfStyleAnisotropy=e}set thinFilmWeight(e){this._material.thinFilmWeight=e}set thinFilmIor(e){this._material.thinFilmIor=e}set thinFilmThicknessMinimum(e){this._material.thinFilmThicknessMin=e/1e3}set thinFilmThicknessMaximum(e){this._material.thinFilmThickness=e/1e3}set thinFilmWeightTexture(e){this._material.thinFilmWeightTexture=e}set thinFilmThicknessTexture(e){this._material.thinFilmThicknessTexture=e,this._material._useThinFilmThicknessFromTextureGreen=!0}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.geometryOpacity=e}get geometryOpacity(){return this._material.geometryOpacity}set geometryNormalTexture(e){this._material.geometryNormalTexture=e}get geometryNormalTexture(){return this._material.geometryNormalTexture}setNormalMapInversions(e,t){}set geometryCoatNormalTexture(e){this._material.geometryCoatNormalTexture=e}get geometryCoatNormalTexture(){return this._material.geometryCoatNormalTexture}set geometryCoatNormalTextureScale(e){this._material.geometryCoatNormalTexture&&(this._material.geometryCoatNormalTexture.level=e)}finalizeAsync(e){return D(this,void 0,void 0,function*(){var r,n,a;if(this._diffuseTransmissionTint&&!this._diffuseTransmissionTint.equals(t.Color3.White())||this._diffuseTransmissionTintTexture)if(this._material.geometryThinWalled)this.subsurfaceColor=this._diffuseTransmissionTint,this.subsurfaceColorTexture=this._diffuseTransmissionTintTexture;else if(yield this.copySurfaceToCoatAsync(e,this.subsurfaceWeight,this.subsurfaceWeightTexture,t.TextureChannel.A,this._diffuseTransmissionTint,this._diffuseTransmissionTintTexture,!0),e._disposed)return;if(this.transmissionWeight>0)if(this._material.geometryThinWalled||0===this._material.transmissionDepth)this._material.transmissionColor=this._material.baseColor,this._material.transmissionColorTexture=this._material.baseColorTexture;else if((!this.baseColor.equals(t.Color3.White())||null!==this.baseColorTexture)&&(yield this.copySurfaceToCoatAsync(e,this.transmissionWeight,this.transmissionWeightTexture,t.TextureChannel.R,this.baseColor,this.baseColorTexture,!1),e._disposed))return;if(this._specWorkflow){const s=yield t.InvertTextureAsync("newRoughnessTexture ("+this._material.name+")",yield t.ExtractChannelAsync("glossiness ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularColorTexture,new t.Color4(this.specularColor.r,this.specularColor.g,this.specularColor.b,this.glossiness),t.TextureChannel.A,t.TextureColorSpace.Linear),t.TextureChannel.A,this._material.getScene(),t.TextureColorSpace.Linear,t.ChannelMask.R),this._material.getScene(),t.ChannelMask.R,t.TextureColorSpace.Linear,t.ChannelMask.R);if(e._disposed)return void(null===(r=s.texture)||void 0===r||r.dispose());this.specularRoughnessTexture=s.texture,this.specularRoughness=s.factor?s.factor.r:1;const o=yield t.ExtractMaxChannelAsync("metallicTexture ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularColorTexture,this.specularColor.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.Linear),this._material.getScene(),!1,t.TextureColorSpace.SRGB,t.ChannelMask.RGB);if(e._disposed)return void(null===(n=o.texture)||void 0===n||n.dispose());this.baseMetalnessTexture=o.texture,this.baseMetalness=o.factor?o.factor.r:1;const i=yield t.LerpTexturesAsync("newBaseColor ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.baseColorTexture,this.baseColor.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.Linear),t.CreateTextureWithFactorOperand(this.specularColorTexture,this.specularColor.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.Linear),Object.assign(Object.assign({},o),{dispose:void 0,colorSpace:t.TextureColorSpace.Linear}),this._material.getScene(),t.TextureColorSpace.SRGB,t.ChannelMask.RGB);if(e._disposed)return void(null===(a=i.texture)||void 0===a||a.dispose());const l=this.baseColorTexture;null==l||l.dispose(),this.baseColorTexture=i.texture,this.baseColor=i.factor?new t.Color3(i.factor.r,i.factor.g,i.factor.b):t.Color3.White();const u=this.specularColorTexture;null==u||u.dispose(),this.specularColorTexture=null}})}copySurfaceToCoatAsync(e,r,n,a,s,o){return D(this,arguments,void 0,function*(e,r,n,a,s,o,i=!1){var l,u,c,h,d,m,_,p,g;const f=this._material.coatWeight,b=this._material.coatWeightTexture,y=this._material.coatColor.clone(),v=this._material.coatColorTexture,T=this._material.geometryCoatNormalTexture,x=new t.Color4(f,f,f,f),A=new t.Color4(r,r,r,r);this.coatWeightTexture=null,this.coatWeight=1;const C=yield Promise.allSettled([t.LerpTexturesAsync("lerpExistingCoat",t.CreateTextureWithFactorOperand(null,new t.Color4(1,1,1,1)),t.CreateTextureWithFactorOperand(v,y.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.SRGB),t.CreateTextureWithFactorOperand(b,x,t.TextureChannel.R),this._material.getScene(),t.TextureColorSpace.SRGB),t.LerpTexturesAsync("lerpSurfaceColor",t.CreateTextureWithFactorOperand(null,new t.Color4(1,1,1,1)),t.CreateTextureWithFactorOperand(o,s.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.SRGB),t.CreateTextureWithFactorOperand(n,A,a),this._material.getScene(),t.TextureColorSpace.SRGB)]),R=C.find(e=>"rejected"===e.status);if(R){for(const e of C)"fulfilled"===e.status&&(null===(l=e.value.texture)||void 0===l||l.dispose());throw R.reason}const[w,M]=C.map(e=>e.value);if(e._disposed)return null===(u=w.texture)||void 0===u||u.dispose(),void(null===(c=M.texture)||void 0===c||c.dispose());const O=yield t.MultiplyTexturesAsync("newCoatColor ("+this._material.name+")",w,M,this._material.getScene(),t.TextureColorSpace.SRGB);if(e._disposed)return void(null===(h=O.texture)||void 0===h||h.dispose());O.texture?(this.coatColorTexture=O.texture,this.coatColor=t.Color3.White()):O.factor&&(this.coatColorTexture=null,this.coatColor.fromArray([O.factor.r,O.factor.g,O.factor.b]));const F=yield t.LerpTexturesAsync("newCoatIor ("+this._material.name+")",t.CreateTextureWithFactorOperand(null,new t.Color4(this._material.specularIor,this._material.specularIor,this._material.specularIor,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(null,new t.Color4(this.coatIor,this.coatIor,this.coatIor,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(b,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)return void(null===(d=F.texture)||void 0===d||d.dispose());this.coatIor=F.factor?F.factor.r:this.coatIor;const L=yield t.LerpTexturesAsync("newCoatRoughness ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularRoughnessTexture,new t.Color4(this.specularRoughness,this.specularRoughness,this.specularRoughness,1),t.TextureChannel.G),t.CreateTextureWithFactorOperand(this.coatRoughnessTexture,new t.Color4(this.coatRoughness,this.coatRoughness,this.coatRoughness,1),t.TextureChannel.G),t.CreateTextureWithFactorOperand(b,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)return void(null===(m=L.texture)||void 0===m||m.dispose());this.coatRoughness=L.factor?L.factor.r:1,this.coatRoughnessTexture=L.texture;const E=yield t.LerpTexturesAsync("newCoatDarkening ("+this._material.name+")",t.CreateTextureWithFactorOperand(null,new t.Color4(0,0,0,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(null,new t.Color4(this.coatDarkening,this.coatDarkening,this.coatDarkening,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(b,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)null===(_=E.texture)||void 0===_||_.dispose();else{if(this.coatDarkening=E.factor?E.factor.r:this.coatDarkening,i){const r=yield t.LerpTexturesAsync("newSpecularRoughness ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularRoughnessTexture,new t.Color4(this._material.specularRoughness,this._material.specularRoughness,this._material.specularRoughness,1),t.TextureChannel.G),t.CreateTextureWithFactorOperand(null,new t.Color4(1,1,1,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(n,A,a),this._material.getScene());if(e._disposed)return void(null===(p=r.texture)||void 0===p||p.dispose());this.specularRoughness=r.factor?r.factor.r:1,this.specularRoughnessTexture=r.texture}if(T||this.geometryNormalTexture){const r=yield t.LerpTexturesAsync("newCoatNormal ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.geometryNormalTexture,this.geometryNormalTexture?new t.Color4(1,1,1,1):new t.Color4(.5,.5,1,1),t.TextureChannel.RGBA),t.CreateTextureWithFactorOperand(T,T?new t.Color4(1,1,1,1):new t.Color4(.5,.5,1,1),t.TextureChannel.RGBA),t.CreateTextureWithFactorOperand(b,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)return void(null===(g=r.texture)||void 0===g||g.dispose());r.texture&&(this.geometryCoatNormalTexture=r.texture)}}})}}var fa={__proto__:null,OpenPBRMaterialLoadingAdapter:ga};class ba{constructor(e){this._specWorkflow=!1,this._material=e,this._material.enableSpecularAntiAliasing=!0}get material(){return this._material}finalizeAsync(e){return D(this,void 0,void 0,function*(){})}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){this._material.alphaCutOff=e}get alphaCutOff(){return this._material.alphaCutOff}set useAlphaFromBaseColorTexture(e){this._material.useAlphaFromAlbedoTexture=e}get useAlphaFromBaseColorTexture(){return this._material.useAlphaFromAlbedoTexture}get transparencyAsAlphaCoverage(){return this._material.useRadianceOverAlpha||this._material.useSpecularOverAlpha}set transparencyAsAlphaCoverage(e){this._material.useRadianceOverAlpha=!e,this._material.useSpecularOverAlpha=!e}set baseColor(e){this._material.albedoColor=e}get baseColor(){return this._material.albedoColor}set baseColorTexture(e){this._material.albedoTexture=e}get baseColorTexture(){return this._material.albedoTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e,e>0&&(this._material.brdf.baseDiffuseModel=t.Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR)}get baseDiffuseRoughness(){var e;return null!==(e=this._material.baseDiffuseRoughness)&&void 0!==e?e:0}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.metallic=e}get baseMetalness(){var e;return null!==(e=this._material.metallic)&&void 0!==e?e:1}set baseMetalnessTexture(e){this._material.metallicTexture=e}get baseMetalnessTexture(){return this._material.metallicTexture}set useRoughnessFromMetallicTextureGreen(e){this._material.useRoughnessFromMetallicTextureGreen=e,this._material.useRoughnessFromMetallicTextureAlpha=!e}set useMetallicFromMetallicTextureBlue(e){this._material.useMetallnessFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){e&&(this._material.brdf.dielectricSpecularModel=t.Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR,this._material.brdf.conductorSpecularModel=t.Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR)}configureSpecularGlossiness(){this._specWorkflow=!0,this._material.metallic=null,this._material.roughness=null,this._material.useMicroSurfaceFromReflectivityMapAlpha=!0}set specularWeight(e){this._material.metallicF0Factor=e}get specularWeight(){var e;return null!==(e=this._material.metallicF0Factor)&&void 0!==e?e:1}set specularWeightTexture(e){e?(this._material.metallicReflectanceTexture=e,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!0):(this._material.metallicReflectanceTexture=null,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!1)}get specularWeightTexture(){return this._material.metallicReflectanceTexture}set specularColor(e){this._specWorkflow?this._material.reflectivityColor=e:this._material.metallicReflectanceColor=e}get specularColor(){return this._specWorkflow?this._material.reflectivityColor:this._material.metallicReflectanceColor}set specularColorTexture(e){this._specWorkflow?(this._material.reflectivityTexture=e,this._material.reflectivityTexture&&(this._material.reflectivityTexture.hasAlpha=!0)):this._material.reflectanceTexture=e}get specularColorTexture(){return this._specWorkflow?this._material.reflectivityTexture:this._material.reflectanceTexture}set specularRoughness(e){this._material.roughness=e}get specularRoughness(){var e;return null!==(e=this._material.roughness)&&void 0!==e?e:1}set specularRoughnessTexture(e){this.baseMetalnessTexture||(this._material.metallicTexture=e)}get specularRoughnessTexture(){return this._material.metallicTexture}set specularIor(e){this._material.indexOfRefraction=e}get specularIor(){return this._material.indexOfRefraction}get glossiness(){var e;return null!==(e=this._material.microSurface)&&void 0!==e?e:1}set glossiness(e){this._material.microSurface=e}set emissionColor(e){this._material.emissiveColor=e}get emissionColor(){return this._material.emissiveColor}set emissionLuminance(e){this._material.emissiveIntensity=e}get emissionLuminance(){return this._material.emissiveIntensity}set emissionColorTexture(e){this._material.emissiveTexture=e}get emissionColorTexture(){return this._material.emissiveTexture}set ambientOcclusionTexture(e){this._material.ambientTexture=e,e&&(this._material.useAmbientInGrayScale=!0)}get ambientOcclusionTexture(){return this._material.ambientTexture}set ambientOcclusionTextureStrength(e){this._material.ambientTextureStrength=e}get ambientOcclusionTextureStrength(){var e;return null!==(e=this._material.ambientTextureStrength)&&void 0!==e?e:1}configureCoat(){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.remapF0OnInterfaceChange=!1}set coatWeight(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.intensity=e}get coatWeight(){return this._material.clearCoat.intensity}set coatWeightTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.texture=e}get coatWeightTexture(){return this._material.clearCoat.texture}set coatColor(e){this._material.clearCoat.isTintEnabled=e!=t.Color3.White(),this._material.clearCoat.tintColor=e}set coatColorTexture(e){this._material.clearCoat.tintTexture=e}set coatRoughness(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.roughness=e}get coatRoughness(){var e;return null!==(e=this._material.clearCoat.roughness)&&void 0!==e?e:0}set coatRoughnessTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.textureRoughness=e}get coatRoughnessTexture(){return this._material.clearCoat.textureRoughness}set coatIor(e){this._material.clearCoat.indexOfRefraction=e}set coatDarkening(e){}set coatDarkeningTexture(e){}set coatRoughnessAnisotropy(e){}get coatRoughnessAnisotropy(){return 0}set geometryCoatTangentAngle(e){}set geometryCoatTangentTexture(e){}get geometryCoatTangentTexture(){return null}set transmissionWeight(e){this._material.subSurface.isRefractionEnabled=e>0,this._material.subSurface.refractionIntensity=e}get transmissionWeight(){return this._material.subSurface.isRefractionEnabled?this._material.subSurface.refractionIntensity:0}set transmissionWeightTexture(e){this._material.subSurface.isRefractionEnabled=!0,this._material.subSurface.refractionIntensityTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set transmissionDepth(e){this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(new t.Color3(e,e,e))}get transmissionDepth(){return this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance:0}set transmissionColor(e){this.transmissionWeight>0?this._material.subSurface.tintColor=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(e)}get transmissionColor(){return this.transmissionWeight>0?this._material.subSurface.tintColor:this.subsurfaceWeight>0?this._material.subSurface.diffusionDistance:new t.Color3(0,0,0)}set transmissionScatter(e){this._material.subSurface.diffusionDistance=e}get transmissionScatter(){return this._material.subSurface.diffusionDistance}set transmissionScatterTexture(e){}set transmissionScatterAnisotropy(e){}set transmissionDispersionAbbeNumber(e){}set transmissionDispersionScale(e){e>0?(this._material.subSurface.isDispersionEnabled=!0,this._material.subSurface.dispersion=20/e):(this._material.subSurface.isDispersionEnabled=!1,this._material.subSurface.dispersion=0)}get refractionBackgroundTexture(){return this._material.subSurface.refractionTexture}set refractionBackgroundTexture(e){this._material.subSurface.refractionTexture=e}configureTransmission(){this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.useAlbedoToTintRefraction=!0,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0}configureVolume(){}set geometryThinWalled(e){}get geometryThinWalled(){return 0===this._material.subSurface.maximumThickness}set volumeThicknessTexture(e){this._material.subSurface.thicknessTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set volumeThickness(e){this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=e,this._material.subSurface.useThicknessAsDepth=!0,e>0&&(this._material.subSurface.volumeIndexOfRefraction=this._material.indexOfRefraction)}configureSubsurface(){this._material.subSurface.useGltfStyleTextures=!0,this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0,this._material.subSurface.useAlbedoToTintTranslucency=!1}set subsurfaceWeight(e){this._material.subSurface.isTranslucencyEnabled=e>0,this._material.subSurface.translucencyIntensity=e}get subsurfaceWeight(){return this._material.subSurface.isTranslucencyEnabled?this._material.subSurface.translucencyIntensity:0}set subsurfaceWeightTexture(e){this._material.subSurface.translucencyIntensityTexture=e}set subsurfaceColor(e){const r=new t.Vector3(-Math.log(this.transmissionColor.r),-Math.log(this.transmissionColor.g),-Math.log(this.transmissionColor.b));r.scaleInPlace(1/Math.max(this.transmissionDepth,.001));const n=r,a=Math.max(n.x,Math.max(n.y,n.z)),s=a>0?1/a:1;this._material.subSurface.diffusionDistance=new t.Color3(Math.exp(-n.x*s),Math.exp(-n.y*s),Math.exp(-n.z*s))}set subsurfaceColorTexture(e){}set diffuseTransmissionTint(e){this._material.subSurface.tintColor=e}get diffuseTransmissionTint(){return this._material.subSurface.tintColor}set diffuseTransmissionTintTexture(e){this._material.subSurface.translucencyColorTexture=e}get subsurfaceRadius(){return 1}set subsurfaceRadius(e){}get subsurfaceRadiusScale(){var e;return null!==(e=this._material.subSurface.scatteringDiffusionProfile)&&void 0!==e?e:t.Color3.White()}set subsurfaceRadiusScale(e){this._material.subSurface.scatteringDiffusionProfile=e}set subsurfaceScatterAnisotropy(e){}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){this._material.sheen.isEnabled=!0,this._material.sheen.useRoughnessFromMainTexture=!1,this._material.sheen.albedoScaling=!0}set fuzzWeight(e){this._material.sheen.isEnabled=!0,this._material.sheen.intensity=e}set fuzzWeightTexture(e){this._material.sheen.texture||(this._material.sheen.texture=e)}set fuzzColor(e){this._material.sheen.isEnabled=!0,this._material.sheen.color=e}set fuzzColorTexture(e){this._material.sheen.texture=e}set fuzzRoughness(e){this._material.sheen.isEnabled=!0,this._material.sheen.roughness=e}set fuzzRoughnessTexture(e){this._material.sheen.isEnabled=!0,this._material.sheen.textureRoughness=e}set specularRoughnessAnisotropy(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.intensity=e}get specularRoughnessAnisotropy(){return this._material.anisotropy.intensity}set geometryTangentAngle(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.angle=e}set geometryTangentTexture(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.texture=e}get geometryTangentTexture(){return this._material.anisotropy.texture}configureGltfStyleAnisotropy(e=!0){}set thinFilmWeight(e){this._material.iridescence.isEnabled=e>0,this._material.iridescence.intensity=e}set thinFilmIor(e){this._material.iridescence.indexOfRefraction=e}set thinFilmThicknessMinimum(e){this._material.iridescence.minimumThickness=e}set thinFilmThicknessMaximum(e){this._material.iridescence.maximumThickness=e}set thinFilmWeightTexture(e){this._material.iridescence.texture=e}set thinFilmThicknessTexture(e){this._material.iridescence.thicknessTexture=e}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.alpha=e}get geometryOpacity(){return this._material.alpha}set geometryNormalTexture(e){this._material.bumpTexture=e,this._material.forceIrradianceInFragment=!0}get geometryNormalTexture(){return this._material.bumpTexture}setNormalMapInversions(e,t){this._material.invertNormalMapX=e,this._material.invertNormalMapY=t}set geometryCoatNormalTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.bumpTexture=e}get geometryCoatNormalTexture(){return this._material.clearCoat.bumpTexture}set geometryCoatNormalTextureScale(e){this._material.clearCoat.bumpTexture&&(this._material.clearCoat.bumpTexture.level=e)}}var ya={__proto__:null,PBRMaterialLoadingAdapter:ba},va={__proto__:null,AddObjectAccessorToKey:$,AnimationPropertyInfo:Lr,ArrayItem:q,EXT_lights_area:Ge,EXT_lights_ies:ye,EXT_lights_image_based:Z,EXT_mesh_gpu_instancing:ne,EXT_meshopt_compression:ie,EXT_texture_avif:pe,EXT_texture_webp:he,ExtrasAsMetadata:ca,FlowGraphGLTFDataProvider:ma,GLTFFileLoader:b,GLTFLoader:Y,GetMappingForKey:N,GetPathToObjectConverter:B,InteractivityGraphToFlowGraphParser:xn,KHR_animation_pointer:Cr,KHR_draco_mesh_compression:Ae,KHR_gaussian_splatting:Le,KHR_interactivity:Nn,KHR_lights:Ie,KHR_materials_anisotropy:lt,KHR_materials_clearcoat:Xe,KHR_materials_coat:et,KHR_materials_diffuse_roughness:ar,KHR_materials_diffuse_transmission:Ht,KHR_materials_dispersion:er,KHR_materials_emissive_strength:dt,KHR_materials_fuzz:vt,KHR_materials_ior:Ot,KHR_materials_iridescence:at,KHR_materials_pbrSpecularGlossiness:He,KHR_materials_sheen:gt,KHR_materials_specular:Ct,KHR_materials_transmission:Gt,KHR_materials_unlit:ze,KHR_materials_variants:St,KHR_materials_volume:zt,KHR_materials_volume_scatter:Xt,KHR_mesh_quantization:lr,KHR_node_hoverability:aa,KHR_node_selectability:Xn,KHR_node_visibility:Wn,KHR_texture_basisu:dr,KHR_texture_transform:gr,KHR_xmp_json_ld:vr,LoadBoundingInfoFromPositionAccessor:j,MSFT_audio_emitter:Yr,MSFT_lod:Zr,MSFT_minecraftMesh:nn,MSFT_sRGBFactors:ln,OpenPBRMaterialLoadingAdapter:ga,PBRMaterialLoadingAdapter:ba,RegisterEXT_lights_area:De,RegisterEXT_lights_ies:Te,RegisterEXT_lights_image_based:te,RegisterEXT_mesh_gpu_instancing:se,RegisterEXT_meshopt_compression:ue,RegisterEXT_texture_avif:fe,RegisterEXT_texture_webp:me,RegisterExtrasAsMetadata:da,RegisterGLTF2Loader:Q,RegisterGLTFLoaderAnimation:Ir,RegisterKHR_animation_pointer:wr,RegisterKHR_draco_mesh_compression:Re,RegisterKHR_gaussian_splatting:Se,RegisterKHR_interactivity:Hn,RegisterKHR_lights:Be,RegisterKHR_materials_anisotropy:ct,RegisterKHR_materials_clearcoat:Je,RegisterKHR_materials_coat:rt,RegisterKHR_materials_diffuse_roughness:or,RegisterKHR_materials_diffuse_transmission:Wt,RegisterKHR_materials_dispersion:rr,RegisterKHR_materials_emissive_strength:_t,RegisterKHR_materials_fuzz:xt,RegisterKHR_materials_ior:Lt,RegisterKHR_materials_iridescence:ot,RegisterKHR_materials_pbrSpecularGlossiness:We,RegisterKHR_materials_sheen:bt,RegisterKHR_materials_specular:wt,RegisterKHR_materials_transmission:Dt,RegisterKHR_materials_unlit:je,RegisterKHR_materials_variants:It,RegisterKHR_materials_volume:jt,RegisterKHR_materials_volume_scatter:Jt,RegisterKHR_mesh_quantization:cr,RegisterKHR_node_hoverability:la,RegisterKHR_node_selectability:ea,RegisterKHR_node_visibility:jn,RegisterKHR_texture_basisu:_r,RegisterKHR_texture_transform:br,RegisterKHR_xmp_json_ld:xr,RegisterMSFT_audio_emitter:Qr,RegisterMSFT_lod:tn,RegisterMSFT_minecraftMesh:sn,RegisterMSFT_sRGBFactors:cn,SetInterpolationForKey:G,TransformNodeAnimationPropertyInfo:Er,TransmissionHelper:Pt,WeightAnimationPropertyInfo:Sr,_AddInteractivityObjectModel:Gn,_RegisterKHRInteractivityRuntime:Dn,_RegisterKHRNodeHoverabilityRuntime:oa,_RegisterKHRNodeSelectabilityRuntime:Jn,_RegisterKHRNodeVisibilityRuntime:zn,addNewInteractivityFlowGraphMapping:mn,ensureTransmissionHelper:Bt,getAllSupportedNativeNodeTypes:vn,getMappingForDeclaration:dn,getMappingForFullOperationName:hn,getQuaternion:Or,getVector3:Mr,getWeights:Fr,gltfTypeToBabylonType:Tn,registerGLTFExtension:K,registeredGLTFExtensions:H,unregisterGLTFExtension:W};const Ta=Object.assign({},pa),xa=Object.assign(Object.assign({},{__proto__:null}),{Extensions:Ta}),Aa=Object.assign(Object.assign({},va),{Loader:xa}),Ca="undefined"!=typeof global?global:"undefined"!=typeof window?window:void 0;if(void 0!==Ca){Ca.BABYLON=Ca.BABYLON||{};const e=Ca.BABYLON;e.GLTF2=e.GLTF2||{},e.GLTF2.Loader=e.GLTF2.Loader||{},e.GLTF2.Loader.Extensions=e.GLTF2.Loader.Extensions||{};const t=["Loader"];for(const r in Ta)e.GLTF2.Loader.Extensions[r]=Ta[r],t.push(r);for(const r in xa)"Extensions"!==r&&(e.GLTF2.Loader[r]=xa[r],t.push(r));for(const r in Aa)t.indexOf(r)>-1||(e.GLTF2[r]=Aa[r])}e.GLTF2=Aa,e.GLTFFileLoader=b,e.GLTFLoaderDefaultOptions=g,e.GLTFValidation=a,e.RegisterGLTFFileLoader=v});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("babylonjs")):"function"==typeof define&&define.amd?define(["exports","babylonjs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).BABYLON=e.BABYLON||{},e.BABYLON)}(this,function(e,t){"use strict";function n(e,t,n,o){const r={externalResourceFunction:o};return n&&(r.uri="file:"===t?n:t+n),ArrayBuffer.isView(e)?GLTFValidator.validateBytes(e,r):GLTFValidator.validateString(e,r)}function o(){const e=[];onmessage=t=>{const o=t.data;switch(o.id){case"init":importScripts(o.url);break;case"validate":n(o.data,o.rootUrl,o.fileName,t=>new Promise((n,o)=>{const r=e.length;e.push({resolve:n,reject:o}),postMessage({id:"getExternalResource",index:r,uri:t})})).then(e=>{postMessage({id:"validate.resolve",value:e})},e=>{postMessage({id:"validate.reject",reason:e})});break;case"getExternalResource.resolve":e[o.index].resolve(o.value);break;case"getExternalResource.reject":e[o.index].reject(o.reason)}}}class r{static ValidateAsync(e,a,s,i){return"function"==typeof Worker?new Promise((l,u)=>{const c=`${n}(${o})()`,d=URL.createObjectURL(new Blob([c],{type:"application/javascript"})),h=new Worker(d),m=e=>{h.removeEventListener("error",m),h.removeEventListener("message",p),u(e)},p=e=>{const t=e.data;switch(t.id){case"getExternalResource":i(t.uri).then(e=>{h.postMessage({id:"getExternalResource.resolve",index:t.index,value:e},[e.buffer])},e=>{h.postMessage({id:"getExternalResource.reject",index:t.index,reason:e})});break;case"validate.resolve":h.removeEventListener("error",m),h.removeEventListener("message",p),r._LastResults=t.value,l(t.value),h.terminate();break;case"validate.reject":h.removeEventListener("error",m),h.removeEventListener("message",p),u(t.reason),h.terminate()}};if(h.addEventListener("error",m),h.addEventListener("message",p),h.postMessage({id:"init",url:t.Tools.GetBabylonScriptURL(this.Configuration.url)}),ArrayBuffer.isView(e)){const t=e.slice();h.postMessage({id:"validate",data:t,rootUrl:a,fileName:s},[t.buffer])}else h.postMessage({id:"validate",data:e,rootUrl:a,fileName:s})}):(this._LoadScriptPromise||(this._LoadScriptPromise=t.Tools.LoadBabylonScriptAsync(this.Configuration.url)),this._LoadScriptPromise.then(()=>n(e,a,s,i)))}}r.Configuration={url:`${t.Tools._DefaultCdnUrl}/gltf_validator.js`},r._LastResults=null;var a={__proto__:null,GLTFValidation:r};const s="Z2xURg",i="gltf",l={".gltf":{isBinary:!1,mimeType:"model/gltf+json"},".glb":{isBinary:!0,mimeType:"model/gltf-binary"}},u=e=>-1!==e.indexOf("asset")&&-1!==e.indexOf("version")||e.startsWith("data:base64,"+s)||e.startsWith("data:;base64,"+s)||e.startsWith("data:application/octet-stream;base64,"+s)||e.startsWith("data:model/gltf-binary;base64,"+s);function c(e,t,n){try{return Promise.resolve(new Uint8Array(e,t,n))}catch(e){return Promise.reject(e)}}var d,h,m;e.GLTFLoaderCoordinateSystemMode=void 0,(d=e.GLTFLoaderCoordinateSystemMode||(e.GLTFLoaderCoordinateSystemMode={}))[d.AUTO=0]="AUTO",d[d.FORCE_RIGHT_HANDED=1]="FORCE_RIGHT_HANDED",e.GLTFLoaderAnimationStartMode=void 0,(h=e.GLTFLoaderAnimationStartMode||(e.GLTFLoaderAnimationStartMode={}))[h.NONE=0]="NONE",h[h.FIRST=1]="FIRST",h[h.ALL=2]="ALL",e.GLTFLoaderState=void 0,(m=e.GLTFLoaderState||(e.GLTFLoaderState={}))[m.LOADING=0]="LOADING",m[m.READY=1]="READY",m[m.COMPLETE=2]="COMPLETE";const p=e=>Promise.resolve(e);class _{constructor(){this.alwaysComputeBoundingBox=!1,this.alwaysComputeSkeletonRootNode=!1,this.animationStartMode=e.GLTFLoaderAnimationStartMode.FIRST,this.compileMaterials=!1,this.compileShadowGenerators=!1,this.coordinateSystemMode=e.GLTFLoaderCoordinateSystemMode.AUTO,this.createInstances=!0,this.loadAllMaterials=!1,this.loadMorphTargets=!0,this.useMaxMorphTargetInfluencers=!0,this.loadNodeAnimations=!0,this.loadOnlyMaterials=!1,this.loadSkins=!0,this.skipMaterials=!1,this.targetFps=60,this.transparencyAsCoverage=!1,this.useClipPlane=!1,this.useGltfTextureNames=!1,this.useRangeRequests=!1,this.useSRGBBuffers=!0,this.validate=!1,this.useOpenPBR=!1,this.dontUseTransmissionHelper=!1}}const f=new _;class g extends _{constructor(){super(...arguments),this.extensionOptions={},this.preprocessUrlAsync=p}copyFrom(e){var t,n,o,r,a,s,i,l,u,c,d,h,m,p,_,f,g,v,y,b,T,x,A,w,R,C,O;e&&(this.alwaysComputeBoundingBox=null!==(t=e.alwaysComputeBoundingBox)&&void 0!==t?t:this.alwaysComputeBoundingBox,this.alwaysComputeSkeletonRootNode=null!==(n=e.alwaysComputeSkeletonRootNode)&&void 0!==n?n:this.alwaysComputeSkeletonRootNode,this.animationStartMode=null!==(o=e.animationStartMode)&&void 0!==o?o:this.animationStartMode,this.capturePerformanceCounters=null!==(r=e.capturePerformanceCounters)&&void 0!==r?r:this.capturePerformanceCounters,this.compileMaterials=null!==(a=e.compileMaterials)&&void 0!==a?a:this.compileMaterials,this.compileShadowGenerators=null!==(s=e.compileShadowGenerators)&&void 0!==s?s:this.compileShadowGenerators,this.coordinateSystemMode=null!==(i=e.coordinateSystemMode)&&void 0!==i?i:this.coordinateSystemMode,this.createInstances=null!==(l=e.createInstances)&&void 0!==l?l:this.createInstances,this.customRootNode=e.customRootNode,this.extensionOptions=null!==(u=e.extensionOptions)&&void 0!==u?u:this.extensionOptions,this.loadAllMaterials=null!==(c=e.loadAllMaterials)&&void 0!==c?c:this.loadAllMaterials,this.loadMorphTargets=null!==(d=e.loadMorphTargets)&&void 0!==d?d:this.loadMorphTargets,this.loadNodeAnimations=null!==(h=e.loadNodeAnimations)&&void 0!==h?h:this.loadNodeAnimations,this.loadOnlyMaterials=null!==(m=e.loadOnlyMaterials)&&void 0!==m?m:this.loadOnlyMaterials,this.loadSkins=null!==(p=e.loadSkins)&&void 0!==p?p:this.loadSkins,this.loggingEnabled=null!==(_=e.loggingEnabled)&&void 0!==_?_:this.loggingEnabled,this.onCameraLoaded=e.onCameraLoaded,this.onMaterialLoaded=e.onMaterialLoaded,this.onMeshLoaded=e.onMeshLoaded,this.onParsed=e.onParsed,this.onSkinLoaded=e.onSkinLoaded,this.onTextureLoaded=e.onTextureLoaded,this.onValidated=e.onValidated,this.preprocessUrlAsync=null!==(f=e.preprocessUrlAsync)&&void 0!==f?f:this.preprocessUrlAsync,this.skipMaterials=null!==(g=e.skipMaterials)&&void 0!==g?g:this.skipMaterials,this.targetFps=null!==(v=e.targetFps)&&void 0!==v?v:this.targetFps,this.transparencyAsCoverage=null!==(y=e.transparencyAsCoverage)&&void 0!==y?y:this.transparencyAsCoverage,this.useClipPlane=null!==(b=e.useClipPlane)&&void 0!==b?b:this.useClipPlane,this.useGltfTextureNames=null!==(T=e.useGltfTextureNames)&&void 0!==T?T:this.useGltfTextureNames,this.useMaxMorphTargetInfluencers=null!==(x=e.useMaxMorphTargetInfluencers)&&void 0!==x?x:this.useMaxMorphTargetInfluencers,this.useOpenPBR=null!==(A=e.useOpenPBR)&&void 0!==A?A:this.useOpenPBR,this.useRangeRequests=null!==(w=e.useRangeRequests)&&void 0!==w?w:this.useRangeRequests,this.useSRGBBuffers=null!==(R=e.useSRGBBuffers)&&void 0!==R?R:this.useSRGBBuffers,this.validate=null!==(C=e.validate)&&void 0!==C?C:this.validate,this.dontUseTransmissionHelper=null!==(O=e.dontUseTransmissionHelper)&&void 0!==O?O:this.dontUseTransmissionHelper)}}class v extends g{constructor(e){super(),this.onParsedObservable=new t.Observable,this.onMeshLoadedObservable=new t.Observable,this.onSkinLoadedObservable=new t.Observable,this.onTextureLoadedObservable=new t.Observable,this.onMaterialLoadedObservable=new t.Observable,this.onCameraLoadedObservable=new t.Observable,this.onCompleteObservable=new t.Observable,this.onErrorObservable=new t.Observable,this.onDisposeObservable=new t.Observable,this.onExtensionLoadedObservable=new t.Observable,this.onValidatedObservable=new t.Observable,this._loader=null,this._state=null,this._requests=new Array,this.name=i,this.extensions=l,this.onLoaderStateChangedObservable=new t.Observable,this._logIndentLevel=0,this._loggingEnabled=!1,this._log=this._logDisabled,this._capturePerformanceCounters=!1,this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled,this.copyFrom(Object.assign(Object.assign({},f),e))}get _isPreprocessUrlAsyncSet(){return this.preprocessUrlAsync!==p}set onParsed(e){this._onParsedObserver&&this.onParsedObservable.remove(this._onParsedObserver),e&&(this._onParsedObserver=this.onParsedObservable.add(e))}set onMeshLoaded(e){this._onMeshLoadedObserver&&this.onMeshLoadedObservable.remove(this._onMeshLoadedObserver),e&&(this._onMeshLoadedObserver=this.onMeshLoadedObservable.add(e))}set onSkinLoaded(e){this._onSkinLoadedObserver&&this.onSkinLoadedObservable.remove(this._onSkinLoadedObserver),e&&(this._onSkinLoadedObserver=this.onSkinLoadedObservable.add(t=>e(t.node,t.skinnedNode)))}set onTextureLoaded(e){this._onTextureLoadedObserver&&this.onTextureLoadedObservable.remove(this._onTextureLoadedObserver),e&&(this._onTextureLoadedObserver=this.onTextureLoadedObservable.add(e))}set onMaterialLoaded(e){this._onMaterialLoadedObserver&&this.onMaterialLoadedObservable.remove(this._onMaterialLoadedObserver),e&&(this._onMaterialLoadedObserver=this.onMaterialLoadedObservable.add(e))}set onCameraLoaded(e){this._onCameraLoadedObserver&&this.onCameraLoadedObservable.remove(this._onCameraLoadedObserver),e&&(this._onCameraLoadedObserver=this.onCameraLoadedObservable.add(e))}set onComplete(e){this._onCompleteObserver&&this.onCompleteObservable.remove(this._onCompleteObserver),this._onCompleteObserver=this.onCompleteObservable.add(e)}set onError(e){this._onErrorObserver&&this.onErrorObservable.remove(this._onErrorObserver),this._onErrorObserver=this.onErrorObservable.add(e)}set onDispose(e){this._onDisposeObserver&&this.onDisposeObservable.remove(this._onDisposeObserver),this._onDisposeObserver=this.onDisposeObservable.add(e)}set onExtensionLoaded(e){this._onExtensionLoadedObserver&&this.onExtensionLoadedObservable.remove(this._onExtensionLoadedObserver),this._onExtensionLoadedObserver=this.onExtensionLoadedObservable.add(e)}get loggingEnabled(){return this._loggingEnabled}set loggingEnabled(e){this._loggingEnabled!==e&&(this._loggingEnabled=e,this._loggingEnabled?this._log=this._logEnabled:this._log=this._logDisabled)}get capturePerformanceCounters(){return this._capturePerformanceCounters}set capturePerformanceCounters(e){this._capturePerformanceCounters!==e&&(this._capturePerformanceCounters=e,this._capturePerformanceCounters?(this._startPerformanceCounter=this._startPerformanceCounterEnabled,this._endPerformanceCounter=this._endPerformanceCounterEnabled):(this._startPerformanceCounter=this._startPerformanceCounterDisabled,this._endPerformanceCounter=this._endPerformanceCounterDisabled))}set onValidated(e){this._onValidatedObserver&&this.onValidatedObservable.remove(this._onValidatedObserver),this._onValidatedObserver=this.onValidatedObservable.add(e)}dispose(){this._loader&&(this._loader.dispose(),this._loader=null);for(const e of this._requests)e.abort();this._requests.length=0,delete this._progressCallback,this.preprocessUrlAsync=p,this.onMeshLoadedObservable.clear(),this.onSkinLoadedObservable.clear(),this.onTextureLoadedObservable.clear(),this.onMaterialLoadedObservable.clear(),this.onCameraLoadedObservable.clear(),this.onCompleteObservable.clear(),this.onExtensionLoadedObservable.clear(),this.onDisposeObservable.notifyObservers(void 0),this.onDisposeObservable.clear()}loadFile(e,n,o,r,a,s,i,l){if(ArrayBuffer.isView(n))return this._loadBinary(e,n,o,r,i,l),null;this._progressCallback=a;const u=n.name||t.Tools.GetFilename(n);if(s){if(this.useRangeRequests){this.validate&&t.Logger.Warn("glTF validation is not supported when range requests are enabled");const o={abort:()=>{},onCompleteObservable:new t.Observable},a={readAsync:(t,o)=>new Promise((r,a)=>{this._loadFile(e,n,e=>{r(new Uint8Array(e))},!0,e=>{a(e)},e=>{e.setRequestHeader("Range",`bytes=${t}-${t+o-1}`)})}),byteLength:0};return this._unpackBinaryAsync(new t.DataReader(a)).then(e=>{o.onCompleteObservable.notifyObservers(o),r(e)},i?e=>i(void 0,e):void 0),o}return this._loadFile(e,n,n=>{this._validate(e,new Uint8Array(n,0,n.byteLength),o,u),this._unpackBinaryAsync(new t.DataReader({readAsync:(e,t)=>c(n,e,t),byteLength:n.byteLength})).then(e=>{r(e)},i?e=>i(void 0,e):void 0)},!0,i)}return this._loadFile(e,n,t=>{try{this._validate(e,t,o,u),r({json:this._parseJson(t)})}catch(e){i&&i()}},!1,i)}_loadBinary(e,n,o,r,a,s){this._validate(e,new Uint8Array(n.buffer,n.byteOffset,n.byteLength),o,s),this._unpackBinaryAsync(new t.DataReader({readAsync:(e,t)=>function(e,t,n){try{if(t<0||t>=e.byteLength)throw new RangeError("Offset is out of range.");if(t+n>e.byteLength)throw new RangeError("Length is out of range.");return Promise.resolve(new Uint8Array(e.buffer,e.byteOffset+t,n))}catch(e){return Promise.reject(e)}}(n,e,t),byteLength:n.byteLength})).then(e=>{r(e)},a?e=>a(void 0,e):void 0)}importMeshAsync(e,t,n,o,r,a){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(n),this.onParsedObservable.clear(),this._log(`Loading ${a||""}`),this._loader=this._getLoader(n),this._loader.importMeshAsync(e,t,null,n,o,r,a)))}loadAsync(e,t,n,o,r){return Promise.resolve().then(()=>(this.onParsedObservable.notifyObservers(t),this.onParsedObservable.clear(),this._log(`Loading ${r||""}`),this._loader=this._getLoader(t),this._loader.loadAsync(e,t,n,o,r)))}loadAssetContainerAsync(e,n,o,r,a){return Promise.resolve().then(()=>{this.onParsedObservable.notifyObservers(n),this.onParsedObservable.clear(),this._log(`Loading ${a||""}`),this._loader=this._getLoader(n);const s=new t.AssetContainer(e),i=[];this.onMaterialLoadedObservable.add(e=>{i.push(e)});const l=[];this.onTextureLoadedObservable.add(e=>{l.push(e)});const u=[];this.onCameraLoadedObservable.add(e=>{u.push(e)});const c=[];return this.onMeshLoadedObservable.add(e=>{e.morphTargetManager&&c.push(e.morphTargetManager)}),this._loader.importMeshAsync(null,e,s,n,o,r,a).then(e=>(Array.prototype.push.apply(s.geometries,e.geometries),Array.prototype.push.apply(s.meshes,e.meshes),Array.prototype.push.apply(s.particleSystems,e.particleSystems),Array.prototype.push.apply(s.skeletons,e.skeletons),Array.prototype.push.apply(s.animationGroups,e.animationGroups),Array.prototype.push.apply(s.materials,i),Array.prototype.push.apply(s.textures,l),Array.prototype.push.apply(s.lights,e.lights),Array.prototype.push.apply(s.transformNodes,e.transformNodes),Array.prototype.push.apply(s.cameras,u),Array.prototype.push.apply(s.morphTargetManagers,c),s))})}canDirectLoad(e){return u(e)}directLoad(e,n){if(n.startsWith("base64,"+s)||n.startsWith(";base64,"+s)||n.startsWith("application/octet-stream;base64,"+s)||n.startsWith("model/gltf-binary;base64,"+s)){const o=t.DecodeBase64UrlToBinary(n);return this._validate(e,new Uint8Array(o,0,o.byteLength)),this._unpackBinaryAsync(new t.DataReader({readAsync:(e,t)=>c(o,e,t),byteLength:o.byteLength}))}return this._validate(e,n),Promise.resolve({json:this._parseJson(n)})}createPlugin(e){return new v(e[i])}get loaderState(){return this._state}whenCompleteAsync(){return new Promise((e,t)=>{this.onCompleteObservable.addOnce(()=>{e()}),this.onErrorObservable.addOnce(e=>{t(e)})})}_setState(t){this._state!==t&&(this._state=t,this.onLoaderStateChangedObservable.notifyObservers(this._state),this._log(e.GLTFLoaderState[this._state]))}_loadFile(e,t,n,o,r,a){const s=e._loadFile(t,n,e=>{this._onProgress(e,s)},!0,o,r,a);return s.onCompleteObservable.add(()=>{s._lengthComputable=!0,s._total=s._loaded}),this._requests.push(s),s}_onProgress(e,t){if(!this._progressCallback)return;t._lengthComputable=e.lengthComputable,t._loaded=e.loaded,t._total=e.total;let n=!0,o=0,r=0;for(const e of this._requests){if(void 0===e._lengthComputable||void 0===e._loaded||void 0===e._total)return;n=n&&e._lengthComputable,o+=e._loaded,r+=e._total}this._progressCallback({lengthComputable:n,loaded:o,total:n?r:0})}_validate(e,n,o="",a=""){this.validate&&(this._startPerformanceCounter("Validate JSON"),r.ValidateAsync(n,o,a,t=>this.preprocessUrlAsync(o+t,o).then(t=>e._loadFileAsync(t,void 0,!0,!0).then(e=>new Uint8Array(e,0,e.byteLength)))).then(e=>{this._endPerformanceCounter("Validate JSON"),this.onValidatedObservable.notifyObservers(e),this.onValidatedObservable.clear()},e=>{this._endPerformanceCounter("Validate JSON"),t.Tools.Warn(`Failed to validate: ${e.message}`),this.onValidatedObservable.clear()}))}_getLoader(e){const t=e.json.asset||{};this._log(`Asset version: ${t.version}`),t.minVersion&&this._log(`Asset minimum version: ${t.minVersion}`),t.generator&&this._log(`Asset generator: ${t.generator}`);const n=v._parseVersion(t.version);if(!n)throw new Error("Invalid version: "+t.version);if(void 0!==t.minVersion){const e=v._parseVersion(t.minVersion);if(!e)throw new Error("Invalid minimum version: "+t.minVersion);if(v._compareVersion(e,{major:2,minor:0})>0)throw new Error("Incompatible minimum version: "+t.minVersion)}const o={1:v._CreateGLTF1Loader,2:v._CreateGLTF2Loader}[n.major];if(!o)throw new Error("Unsupported version: "+t.version);return o(this)}_parseJson(e){this._startPerformanceCounter("Parse JSON"),this._log(`JSON length: ${e.length}`);const t=JSON.parse(e);return this._endPerformanceCounter("Parse JSON"),t}_unpackBinaryAsync(e){return this._startPerformanceCounter("Unpack Binary"),e.loadAsync(20).then(()=>{const n=e.readUint32();if(1179937895!==n)throw new t.RuntimeError("Unexpected magic: "+n,t.ErrorCodes.GLTFLoaderUnexpectedMagicError);const o=e.readUint32();this.loggingEnabled&&this._log(`Binary version: ${o}`);const r=e.readUint32();let a;switch(this.useRangeRequests||r===e.buffer.byteLength||t.Logger.Warn(`Length in header does not match actual data length: ${r} != ${e.buffer.byteLength}`),o){case 1:a=this._unpackBinaryV1Async(e,r);break;case 2:a=this._unpackBinaryV2Async(e,r);break;default:throw new Error("Unsupported version: "+o)}return this._endPerformanceCounter("Unpack Binary"),a})}_unpackBinaryV1Async(e,t){const n=e.readUint32(),o=e.readUint32();if(0!==o)throw new Error(`Unexpected content format: ${o}`);const r=t-e.byteOffset,a={json:this._parseJson(e.readString(n)),bin:null};if(0!==r){const t=e.byteOffset;a.bin={readAsync:(n,o)=>e.buffer.readAsync(t+n,o),byteLength:r}}return Promise.resolve(a)}_unpackBinaryV2Async(e,t){const n=1313821514,o=e.readUint32();if(e.readUint32()!==n)throw new Error("First chunk format is not JSON");return e.byteOffset+o===t?e.loadAsync(o).then(()=>({json:this._parseJson(e.readString(o)),bin:null})):e.loadAsync(o+8).then(()=>{const r={json:this._parseJson(e.readString(o)),bin:null},a=()=>{const o=e.readUint32();switch(e.readUint32()){case n:throw new Error("Unexpected JSON chunk");case 5130562:{const t=e.byteOffset;r.bin={readAsync:(n,o)=>e.buffer.readAsync(t+n,o),byteLength:o},e.skipBytes(o);break}default:e.skipBytes(o)}return e.byteOffset!==t?e.loadAsync(8).then(a):Promise.resolve(r)};return a()})}static _parseVersion(e){if("1.0"===e||"1.0.1"===e)return{major:1,minor:0};const t=(e+"").match(/^(\d+)\.(\d+)/);return t?{major:parseInt(t[1]),minor:parseInt(t[2])}:null}static _compareVersion(e,t){return e.major>t.major?1:e.major<t.major?-1:e.minor>t.minor?1:e.minor<t.minor?-1:0}_logOpen(e){this._log(e),this._logIndentLevel++}_logClose(){--this._logIndentLevel}_logEnabled(e){const n=v._logSpaces.substring(0,2*this._logIndentLevel);t.Logger.Log(`${n}${e}`)}_logDisabled(e){}_startPerformanceCounterEnabled(e){t.Tools.StartPerformanceCounter(e)}_startPerformanceCounterDisabled(e){}_endPerformanceCounterEnabled(e){t.Tools.EndPerformanceCounter(e)}_endPerformanceCounterDisabled(e){}}v.IncrementalLoading=!0,v.HomogeneousCoordinates=!1,v._logSpaces=" ";let y=!1;function b(){y||(y=!0,t.RegisterSceneLoaderPlugin(new v))}b();var T={__proto__:null,GLTFFileLoader:v,get GLTFLoaderAnimationStartMode(){return e.GLTFLoaderAnimationStartMode},get GLTFLoaderCoordinateSystemMode(){return e.GLTFLoaderCoordinateSystemMode},GLTFLoaderDefaultOptions:f,get GLTFLoaderState(){return e.GLTFLoaderState},RegisterGLTFFileLoader:b};const x="undefined"!=typeof global?global:"undefined"!=typeof window?window:void 0;if(void 0!==x){x.BABYLON=x.BABYLON||{};for(const e in T)x.BABYLON[e]=T[e];for(const e in a)x.BABYLON[e]=a[e]}const A=[{regex:new RegExp("^/nodes/\\d+/extensions/")},{regex:new RegExp("^/animations/\\d+/extensions/")},{regex:new RegExp("^/nodes/\\d+/weights")},{regex:new RegExp("^/meshes/\\d+/weights")},{regex:new RegExp("/extensions/KHR_texture_transform/")}];class w{constructor(e,t){this._gltf=e,this._infoTree=t}convert(e){let t,n=this._gltf,o=this._infoTree;if(!e.startsWith("/"))throw new Error("Path must start with a /");const r=e.split("/");if(r.shift(),r[r.length-1].includes(".length")){const e=r[r.length-1].split(".");r.pop(),r.push(...e)}let a=!1;for(const s of r)if("length"===s){if(!o.length)throw o.__array__?new Error(`Path ${e} is invalid - no length accessor`):new Error(`Path ${e} is invalid`);o=o.length,void 0!==n&&(t=n)}else{if(o.__ignoreObjectTree__&&(a=!0),o.__array__)o=o.__array__;else if(o=o[s],!o)throw new Error(`Path ${e} is invalid`);if(o.__passThroughTarget__)a=!0;else if(a){const e=/^\d+$/.test(s)?parseInt(s,10):NaN;if(!isNaN(e)&&"function"==typeof o.get){const t=o;o=Object.assign({},t),o.get=(n,o,...r)=>t.get(n,e,...r),"function"==typeof t.set&&(o.set=(n,o,r,...a)=>t.set(n,o,e,...a)),"function"==typeof t.getTarget&&(o.getTarget=(n,o,...r)=>t.getTarget(n,e,...r))}}else if(void 0===n){if(!A.find(t=>t.regex.test(e)))throw new Error(`Path ${e} is invalid`)}else n=null==n?void 0:n[s];o.__target__&&void 0!==n&&(t=n)}return{object:t,info:o}}}function R(e,n){return{type:"FlowGraphInteger",get:n=>{const o=e(n);return void 0===o?void 0:t.FlowGraphInteger.FromValue(o)},getTarget:n,getPropertyName:[()=>"length"]}}const C={length:R(e=>e.length,e=>e.map(e=>e._babylonTransformNode)),__array__:{__target__:!0,translation:{type:"Vector3",get:e=>{var t;return null===(t=e._babylonTransformNode)||void 0===t?void 0:t.position},set:(e,t)=>{var n;return null===(n=t._babylonTransformNode)||void 0===n?void 0:n.position.copyFrom(e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"position"]},rotation:{type:"Quaternion",get:e=>{var t;return null===(t=e._babylonTransformNode)||void 0===t?void 0:t.rotationQuaternion},set:(e,t)=>{var n,o;return null===(o=null===(n=t._babylonTransformNode)||void 0===n?void 0:n.rotationQuaternion)||void 0===o?void 0:o.copyFrom(e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"rotationQuaternion"]},scale:{type:"Vector3",get:e=>{var t;return null===(t=e._babylonTransformNode)||void 0===t?void 0:t.scaling},set:(e,t)=>{var n;return null===(n=t._babylonTransformNode)||void 0===n?void 0:n.scaling.copyFrom(e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"scaling"]},weights:{__passThroughTarget__:!0,length:R(e=>{const t=S(e);return t?t.mtm.numTargets:void 0!==(null==e?void 0:e.mesh)?0:void 0},e=>null==e?void 0:e._babylonTransformNode),__array__:{__target__:!0,type:"number",get:(e,t)=>{const n=S(e);if(n&&void 0!==t&&t>=0&&t<n.mtm.numTargets)return F(n.mtm.getTarget(t).influence)},set:(e,t,n)=>{var o;const r="number"==typeof e?e:"number"==typeof(null==e?void 0:e.value)?e.value:e,a=S(t);if(!(!a||void 0===n||n<0||n>=a.mtm.numTargets))for(const e of a.meshes){const t=null===(o=e.morphTargetManager)||void 0===o?void 0:o.getTarget(n);t&&(t.influence=r)}},getTarget:(e,t)=>{const n=S(e);return n&&void 0!==t&&t>=0&&t<n.mtm.numTargets?n.mtm.getTarget(t):null==e?void 0:e._babylonTransformNode},getPropertyName:[()=>"influence"]},type:"number[]",get:e=>{const t=S(e);if(!t)return[];const n=[];for(let e=0;e<t.mtm.numTargets;e++)n.push(F(t.mtm.getTarget(e).influence));return n},getTarget:e=>null==e?void 0:e._babylonTransformNode,getPropertyName:[()=>"influence"]},matrix:{type:"Matrix",get:e=>{var n,o,r;return t.Matrix.Compose(null===(n=e._babylonTransformNode)||void 0===n?void 0:n.scaling,null===(o=e._babylonTransformNode)||void 0===o?void 0:o.rotationQuaternion,null===(r=e._babylonTransformNode)||void 0===r?void 0:r.position)},getTarget:e=>e._babylonTransformNode,isReadOnly:!0},globalMatrix:{type:"Matrix",get:e=>{var n,o,r,a,s,i,l;const u=t.Matrix.Identity();let c=e.parent;for(;c&&c.parent;)c=c.parent;const d=(null===(n=e._babylonTransformNode)||void 0===n?void 0:n.position._isDirty)||(null===(r=null===(o=e._babylonTransformNode)||void 0===o?void 0:o.rotationQuaternion)||void 0===r?void 0:r._isDirty)||(null===(a=e._babylonTransformNode)||void 0===a?void 0:a.scaling._isDirty);if(c){const t=null===(s=c._babylonTransformNode)||void 0===s?void 0:s.computeWorldMatrix(!0).invert();t&&(null===(l=null===(i=e._babylonTransformNode)||void 0===i?void 0:i.computeWorldMatrix(d))||void 0===l||l.multiplyToRef(t,u))}else e._babylonTransformNode&&u.copyFrom(e._babylonTransformNode.computeWorldMatrix(d));return u},getTarget:e=>e._babylonTransformNode,isReadOnly:!0},camera:{type:"string",get:e=>void 0!==e.camera?`/cameras/${e.camera}`:"",getTarget:e=>e,isReadOnly:!0},mesh:{type:"string",get:e=>void 0!==e.mesh?`/meshes/${e.mesh}`:"",getTarget:e=>e,isReadOnly:!0},skin:{type:"string",get:e=>void 0!==e.skin?`/skins/${e.skin}`:"",getTarget:e=>e,isReadOnly:!0},parent:{type:"string",get:e=>e.parent&&void 0!==e.parent.index?`/nodes/${e.parent.index}`:"",getTarget:e=>e,isReadOnly:!0},children:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"string",get:e=>"number"==typeof e?`/nodes/${e}`:"",getTarget:()=>({__nodeIndex:!0}),isReadOnly:!0}},extensions:{EXT_lights_ies:{multiplier:{type:"number",get:e=>{var n,o;return null===(o=null===(n=e._babylonTransformNode)||void 0===n?void 0:n.getChildren(e=>e instanceof t.SpotLight,!0)[0])||void 0===o?void 0:o.intensity},getTarget:e=>{var n;return null===(n=e._babylonTransformNode)||void 0===n?void 0:n.getChildren(e=>e instanceof t.SpotLight,!0)[0]},set:(e,n)=>{if(n._babylonTransformNode){const o=n._babylonTransformNode.getChildren(e=>e instanceof t.SpotLight,!0)[0];o&&(o.intensity=e)}}},color:{type:"Color3",get:e=>{var n,o;return null===(o=null===(n=e._babylonTransformNode)||void 0===n?void 0:n.getChildren(e=>e instanceof t.SpotLight,!0)[0])||void 0===o?void 0:o.diffuse},getTarget:e=>{var n;return null===(n=e._babylonTransformNode)||void 0===n?void 0:n.getChildren(e=>e instanceof t.SpotLight,!0)[0]},set:(e,n)=>{if(n._babylonTransformNode){const o=n._babylonTransformNode.getChildren(e=>e instanceof t.SpotLight,!0)[0];o&&(o.diffuse=e)}}}},KHR_node_visibility:{visible:{type:"boolean",get:e=>!!e._primitiveBabylonMeshes&&e._primitiveBabylonMeshes[0].isVisible,getTarget:()=>{},set:(e,t)=>{t._primitiveBabylonMeshes&&t._primitiveBabylonMeshes.forEach(t=>t.isVisible=e)}}}}}},O={length:R(e=>e.length,e=>e.map(e=>e._babylonAnimationGroup)),__array__:{__target__:!0,type:"string",get:e=>e&&"number"==typeof e.index?`/animations/${e.index}`:"",getTarget:e=>e._babylonAnimationGroup,isReadOnly:!0}},M={length:R(e=>e.length,e=>e.map(e=>{var t;return null===(t=e.primitives[0]._instanceData)||void 0===t?void 0:t.babylonSourceMesh})),__array__:{__target__:!0,primitives:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,material:{type:"string",get:e=>void 0!==e.material?`/materials/${e.material}`:"",getTarget:e=>e,isReadOnly:!0}}},weights:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"number",get:e=>e,getTarget:()=>({__weightValue:!0}),isReadOnly:!0}}}};function k(e,t,n,o){const r=I(e);return o?r[n][o]:r[n]}function I(e,n,o){var r,a,s;return null===(s=null===(r=e._data)||void 0===r?void 0:r[null!==(a=null==o?void 0:o.fillMode)&&void 0!==a?a:t.Constants.MATERIAL_TriangleFillMode])||void 0===s?void 0:s.babylonMaterial}function S(e){var t,n,o,r;const a=null==e?void 0:e._babylonTransformNode;if(!a)return;const s=function(e){var t;const n=null==e?void 0:e._babylonTransformNode;if(!n)return;if(n.morphTargetManager)return n.morphTargetManager;const o=e._primitiveBabylonMeshes;if(o)for(const e of o){if(null==e?void 0:e.morphTargetManager)return e.morphTargetManager;if(null===(t=null==e?void 0:e.sourceMesh)||void 0===t?void 0:t.morphTargetManager)return e.sourceMesh.morphTargetManager}}(e);if(s&&e._primitiveBabylonMeshes&&e._primitiveBabylonMeshes.length>0)return{mtm:s,meshes:e._primitiveBabylonMeshes};const i=a.getDescendants(!1);for(const e of i){const a=e,s=null!==(t=a.morphTargetManager)&&void 0!==t?t:null===(n=a.sourceMesh)||void 0===n?void 0:n.morphTargetManager;if(!s)continue;const i=[],l=a.parent;if(l)for(const e of l.getChildMeshes(!0))(null!==(o=e.morphTargetManager)&&void 0!==o?o:null===(r=e.sourceMesh)||void 0===r?void 0:r.morphTargetManager)===s&&i.push(e);return 0===i.length&&i.push(a),{mtm:s,meshes:i}}}function F(e){return Number.isFinite(e)?parseFloat(e.toPrecision(7)):e}function L(e,t,n){if(!e)return;let o=e.extensions;if(!o){if(!n)return;o={},e.extensions=o}let r=o[t.extensionKey];if(!r){if(!n)return;r={},o[t.extensionKey]=r}for(const e of t.texturePath){let t=r[e];if(!t){if(!n)return;t={},r[e]=t}r=t}if(!r.extensions){if(!n)return;r.extensions={}}let a=r.extensions.KHR_texture_transform;if(!a){if(!n)return;a={},r.extensions.KHR_texture_transform=a}return a}function E(e,n,o){return{offset:{componentsCount:2,type:"Vector2",get:(r,a,s)=>{var i,l;const u=k(r,0,e,n);if(u)return new t.Vector2(u.uOffset,u.vOffset);if(o){const e=L(r,o,!1),n=null==e?void 0:e.offset;return new t.Vector2(null!==(i=null==n?void 0:n[0])&&void 0!==i?i:0,null!==(l=null==n?void 0:n[1])&&void 0!==l?l:0)}return new t.Vector2(0,0)},getTarget:I,set:(t,r,a,s)=>{const i=k(r,0,e,n);if(i&&(i.uOffset=t.x,i.vOffset=t.y),o){const e=L(r,o,!0);e&&(e.offset=[t.x,t.y])}},getPropertyName:[()=>`${e}${n?"."+n:""}.uOffset`,()=>`${e}${n?"."+n:""}.vOffset`]},rotation:{type:"number",get:(t,r,a)=>{var s;const i=k(t,0,e,n);if(i)return i.wAng;if(o){const e=L(t,o,!1);return null!==(s=null==e?void 0:e.rotation)&&void 0!==s?s:0}return 0},getTarget:I,set:(t,r,a,s)=>{const i=k(r,0,e,n);if(i&&(i.wAng=t),o){const e=L(r,o,!0);e&&(e.rotation=t)}},getPropertyName:[()=>`${e}${n?"."+n:""}.wAng`]},scale:{componentsCount:2,type:"Vector2",get:(r,a,s)=>{var i,l;const u=k(r,0,e,n);if(u)return new t.Vector2(u.uScale,u.vScale);if(o){const e=L(r,o,!1),n=null==e?void 0:e.scale;return new t.Vector2(null!==(i=null==n?void 0:n[0])&&void 0!==i?i:1,null!==(l=null==n?void 0:n[1])&&void 0!==l?l:1)}return new t.Vector2(1,1)},getTarget:I,set:(t,r,a,s)=>{const i=k(r,0,e,n);if(i&&(i.uScale=t.x,i.vScale=t.y),o){const e=L(r,o,!0);e&&(e.scale=[t.x,t.y])}},getPropertyName:[()=>`${e}${n?"."+n:""}.uScale`,()=>`${e}${n?"."+n:""}.vScale`]}}}const N={scene:{__target__:!0,type:"number",get:e=>null!=e?e:0,getTarget:()=>({__gltfRoot:!0}),isReadOnly:!0,getPropertyName:[()=>"scene"]},cameras:{length:R(e=>e.length,e=>e.map(e=>e._babylonCamera)),__array__:{__target__:!0,orthographic:{xmag:{componentsCount:2,type:"Vector2",get:e=>{var n,o,r,a;return new t.Vector2(null!==(o=null===(n=e._babylonCamera)||void 0===n?void 0:n.orthoLeft)&&void 0!==o?o:0,null!==(a=null===(r=e._babylonCamera)||void 0===r?void 0:r.orthoRight)&&void 0!==a?a:0)},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.orthoLeft=e.x,t._babylonCamera.orthoRight=e.y)},getTarget:e=>e,getPropertyName:[()=>"orthoLeft",()=>"orthoRight"]},ymag:{componentsCount:2,type:"Vector2",get:e=>{var n,o,r,a;return new t.Vector2(null!==(o=null===(n=e._babylonCamera)||void 0===n?void 0:n.orthoBottom)&&void 0!==o?o:0,null!==(a=null===(r=e._babylonCamera)||void 0===r?void 0:r.orthoTop)&&void 0!==a?a:0)},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.orthoBottom=e.x,t._babylonCamera.orthoTop=e.y)},getTarget:e=>e,getPropertyName:[()=>"orthoBottom",()=>"orthoTop"]},zfar:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.maxZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.maxZ=e)},getTarget:e=>e,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.minZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.minZ=e)},getTarget:e=>e,getPropertyName:[()=>"minZ"]}},perspective:{aspectRatio:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.getEngine().getAspectRatio(e._babylonCamera)},getTarget:e=>e,getPropertyName:[()=>"aspectRatio"],isReadOnly:!0},yfov:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.fov},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.fov=e)},getTarget:e=>e,getPropertyName:[()=>"fov"]},zfar:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.maxZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.maxZ=e)},getTarget:e=>e,getPropertyName:[()=>"maxZ"]},znear:{type:"number",get:e=>{var t;return null===(t=e._babylonCamera)||void 0===t?void 0:t.minZ},set:(e,t)=>{t._babylonCamera&&(t._babylonCamera.minZ=e)},getTarget:e=>e,getPropertyName:[()=>"minZ"]}}}},nodes:C,materials:{length:R(e=>e.length,e=>e.map(e=>{var n,o;return null===(o=null===(n=e._data)||void 0===n?void 0:n[t.Constants.MATERIAL_TriangleFillMode])||void 0===o?void 0:o.babylonMaterial})),__array__:{__target__:!0,doubleSided:{type:"boolean",get:(e,t,n)=>{var o;return!(null===(o=I(e,0,n))||void 0===o?void 0:o.backFaceCulling)},set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.backFaceCulling=!e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"backFaceCulling"]},alphaCutoff:{type:"number",get:(e,t,n)=>{var o;return null===(o=I(e,0,n))||void 0===o?void 0:o.alphaCutOff},set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.alphaCutOff=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"alphaCutOff"]},emissiveFactor:{type:"Color3",get:(e,t,n)=>I(e,0,n).emissiveColor,set:(e,t,n,o)=>I(t,0,o).emissiveColor.copyFrom(e),getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"emissiveColor"]},emissiveTexture:{extensions:{KHR_texture_transform:E("emissiveTexture")}},normalTexture:{scale:{type:"number",get:(e,t,n)=>{var o;return null===(o=k(e,0,"bumpTexture"))||void 0===o?void 0:o.level},set:(e,t,n,o)=>{const r=k(t,0,"bumpTexture");r&&(r.level=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"level"]},extensions:{KHR_texture_transform:E("bumpTexture")}},occlusionTexture:{strength:{type:"number",get:(e,t,n)=>I(e,0,n).ambientTextureStrength,set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.ambientTextureStrength=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"ambientTextureStrength"]},extensions:{KHR_texture_transform:E("ambientTexture")}},pbrMetallicRoughness:{baseColorFactor:{type:"Color4",get:(e,n,o)=>{const r=I(e,0,o);return t.Color4.FromColor3(r.albedoColor,r.alpha)},set:(e,t,n,o)=>{const r=I(t,0,o);r.albedoColor.set(e.r,e.g,e.b),r.alpha=e.a},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"albedoColor",()=>"alpha"]},baseColorTexture:{extensions:{KHR_texture_transform:E("albedoTexture")}},metallicFactor:{type:"number",get:(e,t,n)=>I(e,0,n).metallic,set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.metallic=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"metallic"]},roughnessFactor:{type:"number",get:(e,t,n)=>I(e,0,n).roughness,set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.roughness=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"roughness"]},metallicRoughnessTexture:{extensions:{KHR_texture_transform:E("metallicTexture")}}},extensions:{KHR_materials_anisotropy:{anisotropyStrength:{type:"number",get:(e,t,n)=>{var o,r;return null===(r=null===(o=I(e,0,n))||void 0===o?void 0:o.anisotropy)||void 0===r?void 0:r.intensity},set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.anisotropy.intensity=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"anisotropy.intensity"]},anisotropyRotation:{type:"number",get:(e,t,n)=>{var o,r;return null===(r=null===(o=I(e,0,n))||void 0===o?void 0:o.anisotropy)||void 0===r?void 0:r.angle},set:(e,t,n,o)=>{const r=I(t,0,o);r&&(r.anisotropy.angle=e)},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"anisotropy.angle"]},anisotropyTexture:{extensions:{KHR_texture_transform:E("anisotropy","texture")}}},KHR_materials_clearcoat:{clearcoatFactor:{type:"number",get:(e,t,n)=>I(e,0,n).clearCoat.intensity,set:(e,t,n,o)=>{I(t,0,o).clearCoat.intensity=e},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"clearCoat.intensity"]},clearcoatRoughnessFactor:{type:"number",get:(e,t,n)=>I(e,0,n).clearCoat.roughness,set:(e,t,n,o)=>{I(t,0,o).clearCoat.roughness=e},getTarget:(e,t,n)=>I(e,0,n),getPropertyName:[()=>"clearCoat.roughness"]},clearcoatTexture:{extensions:{KHR_texture_transform:E("clearCoat","texture")}},clearcoatNormalTexture:{scale:{type:"number",get:(e,t,n)=>{var o;return null===(o=I(e,0,n).clearCoat.bumpTexture)||void 0===o?void 0:o.level},getTarget:I,set:(e,t,n,o)=>I(t,0,o).clearCoat.bumpTexture.level=e},extensions:{KHR_texture_transform:E("clearCoat","bumpTexture")}},clearcoatRoughnessTexture:{extensions:{KHR_texture_transform:E("clearCoat","textureRoughness")}}},KHR_materials_dispersion:{dispersion:{type:"number",get:(e,t,n)=>I(e,0,n).subSurface.dispersion,getTarget:I,set:(e,t,n,o)=>I(t,0,o).subSurface.dispersion=e}},KHR_materials_emissive_strength:{emissiveStrength:{type:"number",get:(e,t,n)=>I(e,0,n).emissiveIntensity,getTarget:I,set:(e,t,n,o)=>I(t,0,o).emissiveIntensity=e}},KHR_materials_ior:{ior:{type:"number",get:(e,t,n)=>I(e,0,n).indexOfRefraction,getTarget:I,set:(e,t,n,o)=>I(t,0,o).indexOfRefraction=e}},KHR_materials_iridescence:{iridescenceFactor:{type:"number",get:(e,t,n)=>I(e,0,n).iridescence.intensity,getTarget:I,set:(e,t,n,o)=>I(t,0,o).iridescence.intensity=e},iridescenceIor:{type:"number",get:(e,t,n)=>I(e,0,n).iridescence.indexOfRefraction,getTarget:I,set:(e,t,n,o)=>I(t,0,o).iridescence.indexOfRefraction=e},iridescenceTexture:{extensions:{KHR_texture_transform:E("iridescence","texture")}},iridescenceThicknessMaximum:{type:"number",get:(e,t,n)=>I(e,0,n).iridescence.maximumThickness,getTarget:I,set:(e,t,n,o)=>I(t,0,o).iridescence.maximumThickness=e},iridescenceThicknessMinimum:{type:"number",get:(e,t,n)=>I(e,0,n).iridescence.minimumThickness,getTarget:I,set:(e,t,n,o)=>I(t,0,o).iridescence.minimumThickness=e},iridescenceThicknessTexture:{extensions:{KHR_texture_transform:E("iridescence","thicknessTexture")}}},KHR_materials_sheen:{sheenColorFactor:{type:"Color3",get:(e,t,n)=>I(e,0,n).sheen.color,getTarget:I,set:(e,t,n,o)=>I(t,0,o).sheen.color.copyFrom(e)},sheenColorTexture:{extensions:{KHR_texture_transform:E("sheen","texture")}},sheenRoughnessFactor:{type:"number",get:(e,t,n)=>I(e,0,n).sheen.intensity,getTarget:I,set:(e,t,n,o)=>I(t,0,o).sheen.intensity=e},sheenRoughnessTexture:{extensions:{KHR_texture_transform:E("sheen","textureRoughness")}}},KHR_materials_specular:{specularFactor:{type:"number",get:(e,t,n)=>I(e,0,n).metallicF0Factor,getTarget:I,set:(e,t,n,o)=>I(t,0,o).metallicF0Factor=e,getPropertyName:[()=>"metallicF0Factor"]},specularColorFactor:{type:"Color3",get:(e,t,n)=>I(e,0,n).metallicReflectanceColor,getTarget:I,set:(e,t,n,o)=>I(t,0,o).metallicReflectanceColor.copyFrom(e),getPropertyName:[()=>"metallicReflectanceColor"]},specularTexture:{extensions:{KHR_texture_transform:E("metallicReflectanceTexture")}},specularColorTexture:{extensions:{KHR_texture_transform:E("reflectanceTexture")}}},KHR_materials_transmission:{transmissionFactor:{type:"number",get:(e,t,n)=>I(e,0,n).subSurface.refractionIntensity,getTarget:I,set:(e,t,n,o)=>I(t,0,o).subSurface.refractionIntensity=e,getPropertyName:[()=>"subSurface.refractionIntensity"]},transmissionTexture:{extensions:{KHR_texture_transform:E("subSurface","refractionIntensityTexture",{extensionKey:"KHR_materials_transmission",texturePath:["transmissionTexture"]})}}},KHR_materials_diffuse_transmission:{diffuseTransmissionFactor:{type:"number",get:(e,t,n)=>I(e,0,n).subSurface.translucencyIntensity,getTarget:I,set:(e,t,n,o)=>I(t,0,o).subSurface.translucencyIntensity=e},diffuseTransmissionTexture:{extensions:{KHR_texture_transform:E("subSurface","translucencyIntensityTexture",{extensionKey:"KHR_materials_diffuse_transmission",texturePath:["diffuseTransmissionTexture"]})}},diffuseTransmissionColorFactor:{type:"Color3",get:(e,t,n)=>I(e,0,n).subSurface.translucencyColor,getTarget:I,set:(e,t,n,o)=>{var r;return e&&(null===(r=I(t,0,o).subSurface.translucencyColor)||void 0===r?void 0:r.copyFrom(e))}},diffuseTransmissionColorTexture:{extensions:{KHR_texture_transform:E("subSurface","translucencyColorTexture",{extensionKey:"KHR_materials_diffuse_transmission",texturePath:["diffuseTransmissionColorTexture"]})}}},KHR_materials_volume:{attenuationColor:{type:"Color3",get:(e,t,n)=>I(e,0,n).subSurface.tintColor,getTarget:I,set:(e,t,n,o)=>I(t,0,o).subSurface.tintColor.copyFrom(e)},attenuationDistance:{type:"number",get:(e,t,n)=>I(e,0,n).subSurface.tintColorAtDistance,getTarget:I,set:(e,t,n,o)=>I(t,0,o).subSurface.tintColorAtDistance=e},thicknessFactor:{type:"number",get:(e,t,n)=>I(e,0,n).subSurface.maximumThickness,getTarget:I,set:(e,t,n,o)=>I(t,0,o).subSurface.maximumThickness=e},thicknessTexture:{extensions:{KHR_texture_transform:E("subSurface","thicknessTexture",{extensionKey:"KHR_materials_volume",texturePath:["thicknessTexture"]})}}}}}},extensions:{KHR_lights_punctual:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonLight)),__array__:{__target__:!0,color:{type:"Color3",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.diffuse},set:(e,t)=>{var n;return null===(n=t._babylonLight)||void 0===n?void 0:n.diffuse.copyFrom(e)},getTarget:e=>e._babylonLight,getPropertyName:[e=>"diffuse"]},intensity:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.intensity},set:(e,t)=>t._babylonLight?t._babylonLight.intensity=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"intensity"]},range:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.range},set:(e,t)=>t._babylonLight?t._babylonLight.range=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"range"]},spot:{innerConeAngle:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.innerAngle},set:(e,t)=>t._babylonLight?t._babylonLight.innerAngle=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"innerConeAngle"]},outerConeAngle:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.angle},set:(e,t)=>t._babylonLight?t._babylonLight.angle=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"outerConeAngle"]}}}}},EXT_lights_area:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonLight)),__array__:{__target__:!0,color:{type:"Color3",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.diffuse},set:(e,t)=>{var n;return null===(n=t._babylonLight)||void 0===n?void 0:n.diffuse.copyFrom(e)},getTarget:e=>e._babylonLight,getPropertyName:[e=>"diffuse"]},intensity:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.intensity},set:(e,t)=>t._babylonLight?t._babylonLight.intensity=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"intensity"]},size:{type:"number",get:e=>{var t;return null===(t=e._babylonLight)||void 0===t?void 0:t.height},set:(e,t)=>t._babylonLight?t._babylonLight.height=e:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"size"]},rect:{aspect:{type:"number",get:e=>{var t,n;return(null===(t=e._babylonLight)||void 0===t?void 0:t.width)/(null===(n=e._babylonLight)||void 0===n?void 0:n.height)},set:(e,t)=>t._babylonLight?t._babylonLight.width=e*t._babylonLight.height:void 0,getTarget:e=>e._babylonLight,getPropertyName:[e=>"aspect"]}}}}},EXT_lights_ies:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonLight))}},EXT_lights_image_based:{lights:{length:R(e=>e.length,e=>e.map(e=>e._babylonTexture)),__array__:{__target__:!0,intensity:{type:"number",get:e=>{var t;return null===(t=e._babylonTexture)||void 0===t?void 0:t.level},set:(e,t)=>{t._babylonTexture&&(t._babylonTexture.level=e)},getTarget:e=>e._babylonTexture},rotation:{type:"Quaternion",get:e=>{var n;return e._babylonTexture&&t.Quaternion.FromRotationMatrix(null===(n=e._babylonTexture)||void 0===n?void 0:n.getReflectionTextureMatrix())},set:(e,n)=>{var o;n._babylonTexture&&((null===(o=n._babylonTexture.getScene())||void 0===o?void 0:o.useRightHandedSystem)||(e=t.Quaternion.Inverse(e)),t.Matrix.FromQuaternionToRef(e,n._babylonTexture.getReflectionTextureMatrix()))},getTarget:e=>e._babylonTexture}}}}},animations:O,meshes:M,scenes:{length:R(e=>e.length,e=>e),__array__:{__target__:!0,nodes:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"string",get:e=>"number"==typeof e?`/nodes/${e}`:"",getTarget:()=>({__nodeIndex:!0}),isReadOnly:!0}}}},skins:{length:R(e=>e.length,e=>e.map(e=>{var t;return null===(t=e._data)||void 0===t?void 0:t.babylonSkeleton})),__array__:{__target__:!0,joints:{length:R(e=>{var t;return null!==(t=null==e?void 0:e.length)&&void 0!==t?t:0},e=>null!=e?e:[]),__array__:{__target__:!0,type:"string",get:e=>"number"==typeof e?`/nodes/${e}`:"",getTarget:()=>({__nodeIndex:!0}),isReadOnly:!0}},skeleton:{type:"string",get:e=>{const t=e.skeleton;return"number"==typeof t?`/nodes/${t}`:""},getTarget:e=>e,isReadOnly:!0}}}};function B(e){if(Array.isArray(e))return e.map(e=>B(e));if(null!==e&&"object"==typeof e){const t=Object.getPrototypeOf(e);if(t!==Object.prototype&&null!==t)return e;const n={};for(const[t,o]of Object.entries(e))n[t]=B(o);return n}return e}function G(e,t){if(!t)return new w(e,N);const n=B(N);return t(n),new w(e,n)}function P(e){const t=e.split("/").map(e=>e.replace(/{}/g,"__array__"));let n=N;for(const e of t)e&&(n=n[e]);if(n&&n.type&&n.get)return n}function $(e,t){const n=e.split("/").map(e=>e.replace(/{}/g,"__array__"));let o=N;for(const e of n)e&&(o=o[e]);o&&o.type&&o.get&&(o.interpolation=t)}function V(e,t,n=N){const o=e.split("/").map(e=>e.replace(/{}/g,"__array__"));let r=n;for(const e of o)if(e){if(!r[e]){if("?"===e){r.__ignoreObjectTree__=!0;continue}r[e]={},"__array__"===e&&(r[e].__target__=!0)}r=r[e]}Object.assign(r,t)}function D(e,t,n,o){return new(n||(n=Promise))(function(r,a){function s(e){try{l(o.next(e))}catch(e){a(e)}}function i(e){try{l(o.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(s,i)}l((o=o.apply(e,t||[])).next())})}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;const H=new Map,K=H;function W(e,n,o){U(e)&&t.Logger.Warn(`Extension with the name '${e}' already exists`),H.set(e,{isGLTFExtension:n,factory:o})}function U(e){return H.delete(e)}const j=new t.Lazy(()=>Promise.resolve(BABYLON)),z=new t.Lazy(()=>Promise.resolve().then(function(){return Gn}));class q{static Get(e,t,n){if(!t||null==n||!t[n])throw new Error(`${e}: Failed to find index (${n})`);return t[n]}static TryGet(e,t){return e&&null!=t&&e[t]?e[t]:null}static Assign(e){if(e)for(let t=0;t<e.length;t++)e[t].index=t}}function Y(e){if(e.min&&e.max){const n=e.min,o=e.max,r=t.TmpVectors.Vector3[0].copyFromFloats(n[0],n[1],n[2]),a=t.TmpVectors.Vector3[1].copyFromFloats(o[0],o[1],o[2]);if(e.normalized&&5126!==e.componentType){let t=1;switch(e.componentType){case 5120:t=127;break;case 5121:t=255;break;case 5122:t=32767;break;case 5123:t=65535}const n=1/t;r.scaleInPlace(n),a.scaleInPlace(n)}return new t.BoundingInfo(r,a)}return null}class X{isMatchingMaterialType(e){if(!e)return!1;const t=Array.from(this._pbrMaterialImpls.values());for(const n of t)if(e instanceof n.materialClass)return!0;return!1}static RegisterExtension(e,t){W(e,!1,t)}static UnregisterExtension(e){return U(e)}get gltf(){if(!this._gltf)throw new Error("glTF JSON is not available");return this._gltf}get bin(){return this._bin}get parent(){return this._parent}get babylonScene(){if(!this._babylonScene)throw new Error("Scene is not available");return this._babylonScene}get rootBabylonMesh(){return this._rootBabylonMesh}get rootUrl(){return this._rootUrl}constructor(e){this._completePromises=new Array,this._assetContainer=null,this._babylonLights=[],this._disableInstancedMesh=0,this._allMaterialsDirtyRequired=!1,this._skipStartAnimationStep=!1,this._extensions=new Array,this._disposed=!1,this._rootUrl=null,this._fileName=null,this._uniqueRootUrl=null,this._bin=null,this._rootBabylonMesh=null,this._defaultBabylonMaterialData={},this._postSceneLoadActions=new Array,this._materialAdapterCache=new WeakMap,this._materialAdapters=new Set,this._pbrMaterialImpls=new Map,this._parent=e}_getOrCreateMaterialAdapter(e){let t=this._materialAdapterCache.get(e);if(!t){const n=Array.from(this._pbrMaterialImpls.values());for(const o of n)if(e instanceof o.materialClass){t=new o.adapterClass(e);break}if(!t)throw new Error("Appropriate material adapter class not found");const o=t;this._materialAdapterCache.set(e,o),this._materialAdapters.add(o)}return t}dispose(){this._disposed||(this._disposed=!0,this._completePromises.length=0,this._extensions.forEach(e=>e.dispose&&e.dispose()),this._extensions.length=0,this._materialAdapters.clear(),this._gltf=null,this._bin=null,this._babylonScene=null,this._rootBabylonMesh=null,this._defaultBabylonMaterialData={},this._postSceneLoadActions.length=0,this._parent.dispose())}importMeshAsync(e,t,n,o,r,a){return D(this,arguments,void 0,function*(e,t,n,o,r,a,s=""){return yield Promise.resolve().then(()=>D(this,void 0,void 0,function*(){this._babylonScene=t,this._assetContainer=n,this._loadData(o);let a=null;if(e){const t={};if(this._gltf.nodes)for(const e of this._gltf.nodes)e.name&&(t[e.name]=e.index);a=(e instanceof Array?e:[e]).map(e=>{const n=t[e];if(void 0===n)throw new Error(`Failed to find node '${e}'`);return n})}return yield this._loadAsync(r,s,a,()=>({meshes:this._getMeshes(),particleSystems:[],skeletons:this._getSkeletons(),animationGroups:this._getAnimationGroups(),lights:this._babylonLights,transformNodes:this._getTransformNodes(),geometries:this._getGeometries(),spriteManagers:[]}))}))})}loadAsync(e,t,n,o){return D(this,arguments,void 0,function*(e,t,n,o,r=""){return this._babylonScene=e,this._loadData(t),yield this._loadAsync(n,r,null,()=>{})})}_loadAsync(n,o,r,a){return D(this,void 0,void 0,function*(){return yield Promise.resolve().then(()=>D(this,void 0,void 0,function*(){var s;if(this._rootUrl=n,this._uniqueRootUrl=!n.startsWith("file:")&&o?n:`${n}${t.RandomGUID()}/`,this._fileName=o,this._allMaterialsDirtyRequired=!1,yield this._loadExtensionsAsync(),!this.parent.skipMaterials){const e=this.parent.useOpenPBR||this.isExtensionUsed("KHR_materials_openpbr");let t=!1;this.parent.useOpenPBR?(null===(s=this._gltf.materials)||void 0===s?void 0:s.length)&&this._gltf.materials.some(e=>{var t;return!(null===(t=e.extensions)||void 0===t?void 0:t.KHR_materials_openpbr)})&&(t=!0):t=!0;const n=[];e&&!this._pbrMaterialImpls.has("openpbr")&&n.push(Promise.all([Promise.resolve(BABYLON),Promise.resolve().then(function(){return ha})]).then(([{OpenPBRMaterial:e,RegisterOpenpbrMaterial:t},{OpenPBRMaterialLoadingAdapter:n}])=>{t(),this._pbrMaterialImpls.set("openpbr",{materialClass:e,adapterClass:n})})),t&&!this._pbrMaterialImpls.has("pbr")&&n.push(Promise.all([Promise.resolve(BABYLON),Promise.resolve().then(function(){return pa})]).then(([{PBRMaterial:e,RegisterPbrMaterial:t},{PBRMaterialLoadingAdapter:n}])=>{t(),this._pbrMaterialImpls.set("pbr",{materialClass:e,adapterClass:n})})),yield Promise.all(n)}const i=`${e.GLTFLoaderState[e.GLTFLoaderState.LOADING]} => ${e.GLTFLoaderState[e.GLTFLoaderState.READY]}`,l=`${e.GLTFLoaderState[e.GLTFLoaderState.LOADING]} => ${e.GLTFLoaderState[e.GLTFLoaderState.COMPLETE]}`;this._parent._startPerformanceCounter(i),this._parent._startPerformanceCounter(l),this._parent._setState(e.GLTFLoaderState.LOADING),this._extensionsOnLoading();const u=new Array,c=this._babylonScene.blockMaterialDirtyMechanism;if(this._babylonScene.blockMaterialDirtyMechanism=!0,!this.parent.loadOnlyMaterials)if(r)u.push(this.loadSceneAsync("/nodes",{nodes:r,index:-1}));else if(null!=this._gltf.scene||this._gltf.scenes&&this._gltf.scenes[0]){const e=q.Get("/scene",this._gltf.scenes,this._gltf.scene||0);u.push(this.loadSceneAsync(`/scenes/${e.index}`,e))}if(!this.parent.skipMaterials&&this.parent.loadAllMaterials&&this._gltf.materials)for(let e=0;e<this._gltf.materials.length;++e){const n=this._gltf.materials[e],o="/materials/"+e,r=t.Material.TriangleFillMode;u.push(this._loadMaterialAsync(o,n,null,r,()=>{}))}this._allMaterialsDirtyRequired?this._babylonScene.blockMaterialDirtyMechanism=c:this._babylonScene._forceBlockMaterialDirtyMechanism(c),this._parent.compileMaterials&&u.push(this._compileMaterialsAsync()),this._parent.compileShadowGenerators&&u.push(this._compileShadowGeneratorsAsync());const d=Promise.all(u).then(()=>D(this,void 0,void 0,function*(){this._rootBabylonMesh&&this._rootBabylonMesh!==this._parent.customRootNode&&this._rootBabylonMesh.setEnabled(!0);for(const e of this._babylonScene.materials){const t=e;void 0!==t.maxSimultaneousLights&&(t.maxSimultaneousLights=Math.max(t.maxSimultaneousLights,this._babylonScene.lights.length))}for(const e of Array.from(this._materialAdapters))this._completePromises.push(e.finalizeAsync(this));return yield this._extensionsOnReadyAsync(),this._parent._setState(e.GLTFLoaderState.READY),this._skipStartAnimationStep||this._startAnimations(),a()}));return yield d.then(n=>(this._parent._endPerformanceCounter(i),t.Tools.SetImmediate(()=>{this._disposed||Promise.all(this._completePromises).then(()=>{this._parent._endPerformanceCounter(l),this._parent._setState(e.GLTFLoaderState.COMPLETE),this._parent.onCompleteObservable.notifyObservers(void 0),this._parent.onCompleteObservable.clear(),this.dispose()},e=>{this._parent.onErrorObservable.notifyObservers(e),this._parent.onErrorObservable.clear(),this.dispose()})}),n))})).catch(e=>{throw this._disposed||(this._parent.onErrorObservable.notifyObservers(e),this._parent.onErrorObservable.clear(),this.dispose()),e})})}_loadData(e){if(this._gltf=e.json,this._setupData(),e.bin){const n=this._gltf.buffers;if(n&&n[0]&&!n[0].uri){const o=n[0];(o.byteLength<e.bin.byteLength-3||o.byteLength>e.bin.byteLength)&&t.Logger.Warn(`Binary buffer length (${o.byteLength}) from JSON does not match chunk length (${e.bin.byteLength})`),this._bin=e.bin}else t.Logger.Warn("Unexpected BIN chunk")}}_setupData(){if(q.Assign(this._gltf.accessors),q.Assign(this._gltf.animations),q.Assign(this._gltf.buffers),q.Assign(this._gltf.bufferViews),q.Assign(this._gltf.cameras),q.Assign(this._gltf.images),q.Assign(this._gltf.materials),q.Assign(this._gltf.meshes),q.Assign(this._gltf.nodes),q.Assign(this._gltf.samplers),q.Assign(this._gltf.scenes),q.Assign(this._gltf.skins),q.Assign(this._gltf.textures),this._gltf.nodes){const e={};for(const t of this._gltf.nodes)if(t.children)for(const n of t.children)e[n]=t.index;const t=this._createRootNode();for(const n of this._gltf.nodes){const o=e[n.index];n.parent=void 0===o?t:this._gltf.nodes[o]}}}_loadExtensionsAsync(){return D(this,void 0,void 0,function*(){var e;const n=[];if(K.forEach((e,o)=>{var r;!1===(null===(r=this.parent.extensionOptions[o])||void 0===r?void 0:r.enabled)?e.isGLTFExtension&&this.isExtensionUsed(o)&&t.Logger.Warn(`Extension ${o} is used but has been explicitly disabled.`):e.isGLTFExtension&&!this.isExtensionUsed(o)||n.push((()=>D(this,void 0,void 0,function*(){const n=yield e.factory(this);return n.name!==o&&t.Logger.Warn(`The name of the glTF loader extension instance does not match the registered name: ${n.name} !== ${o}`),this._parent.onExtensionLoadedObservable.notifyObservers(n),n}))())}),this._extensions.push(...yield Promise.all(n)),this._extensions.sort((e,t)=>(e.order||Number.MAX_VALUE)-(t.order||Number.MAX_VALUE)),this._parent.onExtensionLoadedObservable.clear(),this._gltf.extensionsRequired)for(const t of this._gltf.extensionsRequired)if(!this._extensions.some(e=>e.name===t&&e.enabled)){if(!1===(null===(e=this.parent.extensionOptions[t])||void 0===e?void 0:e.enabled))throw new Error(`Required extension ${t} is disabled`);throw new Error(`Required extension ${t} is not available`)}})}_createRootNode(){if(void 0!==this._parent.customRootNode)return this._rootBabylonMesh=this._parent.customRootNode,{_babylonTransformNode:null===this._rootBabylonMesh?void 0:this._rootBabylonMesh,index:-1};this._babylonScene._blockEntityCollection=!!this._assetContainer;const n=new t.Mesh("__root__",this._babylonScene);this._rootBabylonMesh=n,this._rootBabylonMesh._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._rootBabylonMesh.setEnabled(!1);const o={_babylonTransformNode:this._rootBabylonMesh,index:-1};switch(this._parent.coordinateSystemMode){case e.GLTFLoaderCoordinateSystemMode.AUTO:this._babylonScene.useRightHandedSystem||(o.rotation=[0,1,0,0],o.scale=[1,1,-1],X._LoadTransform(o,this._rootBabylonMesh));break;case e.GLTFLoaderCoordinateSystemMode.FORCE_RIGHT_HANDED:this._babylonScene.useRightHandedSystem=!0;break;default:throw new Error(`Invalid coordinate system mode (${this._parent.coordinateSystemMode})`)}return this._parent.onMeshLoadedObservable.notifyObservers(n),o}loadSceneAsync(e,t){const n=this._extensionsLoadSceneAsync(e,t);if(n)return n;const o=new Array;if(this.logOpen(`${e} ${t.name||""}`),t.nodes)for(const n of t.nodes){const t=q.Get(`${e}/nodes/${n}`,this._gltf.nodes,n);o.push(this.loadNodeAsync(`/nodes/${t.index}`,t,e=>{e.parent=this._rootBabylonMesh}))}for(const e of this._postSceneLoadActions)e();return o.push(this._loadAnimationsAsync()),this.logClose(),Promise.all(o).then(()=>{})}_forEachPrimitive(e,t){if(e._primitiveBabylonMeshes)for(const n of e._primitiveBabylonMeshes)t(n)}_getGeometries(){const e=[],t=this._gltf.nodes;if(t)for(const n of t)this._forEachPrimitive(n,t=>{const n=t.geometry;n&&-1===e.indexOf(n)&&e.push(n)});return e}_getMeshes(){const e=[];this._rootBabylonMesh instanceof t.AbstractMesh&&e.push(this._rootBabylonMesh);const n=this._gltf.nodes;if(n)for(const t of n)this._forEachPrimitive(t,t=>{e.push(t)});return e}_getTransformNodes(){const e=[],t=this._gltf.nodes;if(t)for(const n of t)n._babylonTransformNode&&"TransformNode"===n._babylonTransformNode.getClassName()&&e.push(n._babylonTransformNode),n._babylonTransformNodeForSkin&&e.push(n._babylonTransformNodeForSkin);return e}_getSkeletons(){const e=[],t=this._gltf.skins;if(t)for(const n of t)n._data&&e.push(n._data.babylonSkeleton);return e}_getAnimationGroups(){const e=[],t=this._gltf.animations;if(t)for(const n of t)n._babylonAnimationGroup&&e.push(n._babylonAnimationGroup);return e}_startAnimations(){switch(this._parent.animationStartMode){case e.GLTFLoaderAnimationStartMode.NONE:break;case e.GLTFLoaderAnimationStartMode.FIRST:{const e=this._getAnimationGroups();0!==e.length&&e[0].start(!0);break}case e.GLTFLoaderAnimationStartMode.ALL:{const e=this._getAnimationGroups();for(const t of e)t.start(!0);break}default:return void t.Logger.Error(`Invalid animation start mode (${this._parent.animationStartMode})`)}}loadNodeAsync(e,n,o=()=>{}){const r=this._extensionsLoadNodeAsync(e,n,o);if(r)return r;if(n._babylonTransformNode)throw new Error(`${e}: Invalid recursive node hierarchy`);const a=new Array;this.logOpen(`${e} ${n.name||""}`);const s=t=>{if(X.AddPointerMetadata(t,e),X._LoadTransform(n,t),null!=n.camera){const o=q.Get(`${e}/camera`,this._gltf.cameras,n.camera);a.push(this.loadCameraAsync(`/cameras/${o.index}`,o,e=>{e.parent=t,this._babylonScene.useRightHandedSystem||(t.scaling.x=-1)}))}if(n.children)for(const o of n.children){const n=q.Get(`${e}/children/${o}`,this._gltf.nodes,o);a.push(this.loadNodeAsync(`/nodes/${n.index}`,n,e=>{e.parent=t}))}o(t)},i=null!=n.mesh,l=this._parent.loadSkins&&null!=n.skin;if(!i||l){const e=n.name||`node${n.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;const o=new t.TransformNode(e,this._babylonScene);o._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,null==n.mesh?n._babylonTransformNode=o:n._babylonTransformNodeForSkin=o,s(o)}if(i)if(l){const o=q.Get(`${e}/mesh`,this._gltf.meshes,n.mesh);a.push(this._loadMeshAsync(`/meshes/${o.index}`,n,o,o=>{const r=n._babylonTransformNodeForSkin;o.metadata=t.deepMerge(r.metadata,o.metadata||{});const s=q.Get(`${e}/skin`,this._gltf.skins,n.skin);a.push(this._loadSkinAsync(`/skins/${s.index}`,n,s,e=>{this._forEachPrimitive(n,t=>{t.skeleton=e}),this._postSceneLoadActions.push(()=>{if(null!=s.skeleton){const e=q.Get(`/skins/${s.index}/skeleton`,this._gltf.nodes,s.skeleton).parent;n.index===e.index?o.parent=r.parent:o.parent=e._babylonTransformNode}else o.parent=this._rootBabylonMesh;this._parent.onSkinLoadedObservable.notifyObservers({node:r,skinnedNode:o})})}))}))}else{const t=q.Get(`${e}/mesh`,this._gltf.meshes,n.mesh);a.push(this._loadMeshAsync(`/meshes/${t.index}`,n,t,s))}return this.logClose(),Promise.all(a).then(()=>(this._forEachPrimitive(n,e=>{const t=e;!t.isAnInstance&&t.geometry&&t.geometry.useBoundingInfoFromGeometry?e._updateBoundingInfo():e.refreshBoundingInfo(!0,!0)}),n._babylonTransformNode))}_loadMeshAsync(e,n,o,r){const a=o.primitives;if(!a||!a.length)throw new Error(`${e}: Primitives are missing`);null==a[0].index&&q.Assign(a);const s=new Array;this.logOpen(`${e} ${o.name||""}`);const i=n.name||`node${n.index}`;if(1===a.length){const t=o.primitives[0];s.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${t.index}`,i,n,o,t,e=>{n._babylonTransformNode=e,n._primitiveBabylonMeshes=[e]}))}else{this._babylonScene._blockEntityCollection=!!this._assetContainer,n._babylonTransformNode=new t.TransformNode(i,this._babylonScene),n._babylonTransformNode._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,n._primitiveBabylonMeshes=[];for(const t of a)s.push(this._loadMeshPrimitiveAsync(`${e}/primitives/${t.index}`,`${i}_primitive${t.index}`,n,o,t,e=>{e.parent=n._babylonTransformNode,n._primitiveBabylonMeshes.push(e)}))}return r(n._babylonTransformNode),this.logClose(),Promise.all(s).then(()=>n._babylonTransformNode)}_loadMeshPrimitiveAsync(e,n,o,r,a,s){const i=this._extensionsLoadMeshPrimitiveAsync(e,n,o,r,a,s);if(i)return i;this.logOpen(`${e}`);const l=0===this._disableInstancedMesh&&this._parent.createInstances&&null==o.skin&&!r.primitives[0].targets;let u,c;if(l&&a._instanceData)this._babylonScene._blockEntityCollection=!!this._assetContainer,u=a._instanceData.babylonSourceMesh.createInstance(n),u._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,c=a._instanceData.promise;else{const s=new Array;this._babylonScene._blockEntityCollection=!!this._assetContainer;const i=new t.Mesh(n,this._babylonScene);if(i._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,i.sideOrientation=this._babylonScene.useRightHandedSystem?t.Material.CounterClockWiseSideOrientation:t.Material.ClockWiseSideOrientation,this._createMorphTargets(e,o,r,a,i),s.push(this._loadVertexDataAsync(e,a,i).then(t=>D(this,void 0,void 0,function*(){return yield this._loadMorphTargetsAsync(e,a,i,t).then(()=>{this._disposed||(this._babylonScene._blockEntityCollection=!!this._assetContainer,t.applyToMesh(i),t._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1)})}))),!this.parent.skipMaterials){const t=X._GetDrawMode(e,a.mode);if(null==a.material){let e=this._defaultBabylonMaterialData[t];e||(e=this._createDefaultMaterial("__GLTFLoader._default",t,this._getDefaultImpl()),this._parent.onMaterialLoadedObservable.notifyObservers(e),this._defaultBabylonMaterialData[t]=e),i.material=e}else{const n=q.Get(`${e}/material`,this._gltf.materials,a.material);s.push(this._loadMaterialAsync(`/materials/${n.index}`,n,i,t,e=>{i.material=e}))}}c=Promise.all(s),l&&(a._instanceData={babylonSourceMesh:i,promise:c}),u=i}return X.AddPointerMetadata(u,e),this._parent.onMeshLoadedObservable.notifyObservers(u),s(u),this.logClose(),c.then(()=>u)}_loadVertexDataAsync(e,n,o){const r=this._extensionsLoadVertexDataAsync(e,n,o);if(r)return r;const a=n.attributes;if(!a)throw new Error(`${e}: Attributes are missing`);const s=new Array,i=new t.Geometry(o.name,this._babylonScene);if(null==n.indices)o.isUnIndexed=!0;else{const t=q.Get(`${e}/indices`,this._gltf.accessors,n.indices);s.push(this._loadIndicesAccessorAsync(`/accessors/${t.index}`,t).then(e=>{i.setIndices(e)}))}const l=(n,r,l)=>{if(null==a[n])return;o._delayInfo=o._delayInfo||[],-1===o._delayInfo.indexOf(r)&&o._delayInfo.push(r);const u=q.Get(`${e}/attributes/${n}`,this._gltf.accessors,a[n]);s.push(this._loadVertexAccessorAsync(`/accessors/${u.index}`,u,r).then(e=>{if(e.getKind()===t.VertexBuffer.PositionKind&&!this.parent.alwaysComputeBoundingBox&&!o.skeleton){const e=Y(u);e&&(i._boundingInfo=e,i.useBoundingInfoFromGeometry=!0)}i.setVerticesBuffer(e,u.count)})),r==t.VertexBuffer.MatricesIndicesExtraKind&&(o.numBoneInfluencers=8),l&&l(u)};return l("POSITION",t.VertexBuffer.PositionKind),l("NORMAL",t.VertexBuffer.NormalKind),l("TANGENT",t.VertexBuffer.TangentKind),l("TEXCOORD_0",t.VertexBuffer.UVKind),l("TEXCOORD_1",t.VertexBuffer.UV2Kind),l("TEXCOORD_2",t.VertexBuffer.UV3Kind),l("TEXCOORD_3",t.VertexBuffer.UV4Kind),l("TEXCOORD_4",t.VertexBuffer.UV5Kind),l("TEXCOORD_5",t.VertexBuffer.UV6Kind),l("JOINTS_0",t.VertexBuffer.MatricesIndicesKind),l("WEIGHTS_0",t.VertexBuffer.MatricesWeightsKind),l("JOINTS_1",t.VertexBuffer.MatricesIndicesExtraKind),l("WEIGHTS_1",t.VertexBuffer.MatricesWeightsExtraKind),l("COLOR_0",t.VertexBuffer.ColorKind,e=>{"VEC4"===e.type&&(o.hasVertexAlpha=!0)}),Promise.all(s).then(()=>i)}_createMorphTargets(e,n,o,r,a){if(!r.targets||!this._parent.loadMorphTargets)return;if(null==n._numMorphTargets)n._numMorphTargets=r.targets.length;else if(r.targets.length!==n._numMorphTargets)throw new Error(`${e}: Primitives do not have the same number of targets`);const s=o.extras?o.extras.targetNames:null;this._babylonScene._blockEntityCollection=!!this._assetContainer,a.morphTargetManager=new t.MorphTargetManager(this._babylonScene),a.morphTargetManager._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,a.morphTargetManager.areUpdatesFrozen=!0;for(let e=0;e<r.targets.length;e++){const r=n.weights?n.weights[e]:o.weights?o.weights[e]:0,i=s?s[e]:`morphTarget${e}`;a.morphTargetManager.addTarget(new t.MorphTarget(i,r,a.getScene()))}}_loadMorphTargetsAsync(e,n,o,r){if(!n.targets||!this._parent.loadMorphTargets)return Promise.resolve();const a=new Array,s=o.morphTargetManager;for(let t=0;t<s.numTargets;t++){const o=s.getTarget(t);a.push(this._loadMorphTargetVertexDataAsync(`${e}/targets/${t}`,r,n.targets[t],o))}return Promise.all(a).then(()=>{s.areUpdatesFrozen=!1,this._parent.useMaxMorphTargetInfluencers&&(s.isUsingTextureForTargets||s.numTargets<=t.MorphTargetManager.MaxActiveMorphTargetsInVertexAttributeMode)&&(s.optimizeInfluencers=!1,s.numMaxInfluencers=s.numTargets)})}_loadMorphTargetVertexDataAsync(e,n,o,r){return D(this,void 0,void 0,function*(){const a=new Array,s=(t,r,s)=>{if(null==o[t])return;const i=n.getVertexBuffer(r);if(!i)return;const l=q.Get(`${e}/${t}`,this._gltf.accessors,o[t]);a.push(this._loadFloatAccessorAsync(`/accessors/${l.index}`,l).then(e=>{s(i,e)}))};return s("POSITION",t.VertexBuffer.PositionKind,(e,t)=>{const n=new Float32Array(t.length);e.forEach(t.length,(e,o)=>{n[o]=t[o]+e}),r.setPositions(n)}),s("NORMAL",t.VertexBuffer.NormalKind,(e,t)=>{const n=new Float32Array(t.length);e.forEach(n.length,(e,o)=>{n[o]=t[o]+e}),r.setNormals(n)}),s("TANGENT",t.VertexBuffer.TangentKind,(e,t)=>{const n=new Float32Array(t.length/3*4);let o=0;e.forEach(t.length/3*4,(e,r)=>{(r+1)%4!=0&&(n[o]=t[o]+e,o++)}),r.setTangents(n)}),s("TEXCOORD_0",t.VertexBuffer.UVKind,(e,t)=>{const n=new Float32Array(t.length);e.forEach(t.length,(e,o)=>{n[o]=t[o]+e}),r.setUVs(n)}),s("TEXCOORD_1",t.VertexBuffer.UV2Kind,(e,t)=>{const n=new Float32Array(t.length);e.forEach(t.length,(e,o)=>{n[o]=t[o]+e}),r.setUV2s(n)}),s("COLOR_0",t.VertexBuffer.ColorKind,(t,n)=>{let o=null;const a=t.getSize();if(3===a){o=new Float32Array(n.length/3*4),t.forEach(n.length,(e,t)=>{const r=Math.floor(t/3),a=t%3;o[4*r+a]=n[3*r+a]+e});for(let e=0;e<n.length/3;++e)o[4*e+3]=1}else{if(4!==a)throw new Error(`${e}: Invalid number of components (${a}) for COLOR_0 attribute`);o=new Float32Array(n.length),t.forEach(n.length,(e,t)=>{o[t]=n[t]+e})}r.setColors(o)}),yield Promise.all(a).then(()=>{})})}static _LoadTransform(e,n){if(null!=e.skin)return;let o=t.Vector3.Zero(),r=t.Quaternion.Identity(),a=t.Vector3.One();e.matrix?t.Matrix.FromArray(e.matrix).decompose(a,r,o):(e.translation&&(o=t.Vector3.FromArray(e.translation)),e.rotation&&(r=t.Quaternion.FromArray(e.rotation)),e.scale&&(a=t.Vector3.FromArray(e.scale))),n.position=o,n.rotationQuaternion=r,n.scaling=a}_loadSkinAsync(e,n,o,r){if(!this._parent.loadSkins)return Promise.resolve();const a=this._extensionsLoadSkinAsync(e,n,o);if(a)return a;if(o._data)return r(o._data.babylonSkeleton),o._data.promise;const s=`skeleton${o.index}`;this._babylonScene._blockEntityCollection=!!this._assetContainer;const i=new t.Skeleton(o.name||s,s,this._babylonScene);i._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,this._loadBones(e,o,i);const l=this._loadSkinInverseBindMatricesDataAsync(e,o).then(e=>{this._updateBoneMatrices(i,e)});return o._data={babylonSkeleton:i,promise:l},r(i),l}_loadBones(e,n,o){if(null==n.skeleton||this._parent.alwaysComputeSkeletonRootNode){const o=this._findSkeletonRootNode(`${e}/joints`,n.joints);if(o)if(void 0===n.skeleton)n.skeleton=o.index;else{const r=(e,t)=>{for(;t.parent;t=t.parent)if(t.parent===e)return!0;return!1},a=q.Get(`${e}/skeleton`,this._gltf.nodes,n.skeleton);a===o||r(a,o)||(t.Logger.Warn(`${e}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`),n.skeleton=o.index)}else t.Logger.Warn(`${e}: Failed to find common root`)}const r={};for(const t of n.joints){const a=q.Get(`${e}/joints/${t}`,this._gltf.nodes,t);this._loadBone(a,n,o,r)}}_findSkeletonRootNode(e,t){if(0===t.length)return null;const n={};for(const o of t){const t=[];let r=q.Get(`${e}/${o}`,this._gltf.nodes,o);for(;-1!==r.index;)t.unshift(r),r=r.parent;n[o]=t}let o=null;for(let e=0;;++e){let r=n[t[0]];if(e>=r.length)return o;const a=r[e];for(let s=1;s<t.length;++s)if(r=n[t[s]],e>=r.length||a!==r[e])return o;o=a}}_loadBone(e,n,o,r){e._isJoint=!0;let a=r[e.index];if(a)return a;let s=null;e.index!==n.skeleton&&(e.parent&&-1!==e.parent.index?s=this._loadBone(e.parent,n,o,r):void 0!==n.skeleton&&t.Logger.Warn(`/skins/${n.index}/skeleton: Skeleton node is not a common root`));const i=n.joints.indexOf(e.index);return a=new t.Bone(e.name||`joint${e.index}`,o,s,this._getNodeMatrix(e),null,null,i),r[e.index]=a,this._postSceneLoadActions.push(()=>{a.linkTransformNode(e._babylonTransformNode)}),a}_loadSkinInverseBindMatricesDataAsync(e,t){if(null==t.inverseBindMatrices)return Promise.resolve(null);const n=q.Get(`${e}/inverseBindMatrices`,this._gltf.accessors,t.inverseBindMatrices);return this._loadFloatAccessorAsync(`/accessors/${n.index}`,n)}_updateBoneMatrices(e,n){for(const o of e.bones){const e=t.Matrix.Identity(),r=o._index;n&&-1!==r&&(t.Matrix.FromArrayToRef(n,16*r,e),e.invertToRef(e));const a=o.getParent();a&&e.multiplyToRef(a.getAbsoluteInverseBindMatrix(),e),o.updateMatrix(e,!1,!1),o._updateAbsoluteBindMatrices(void 0,!1)}}_getNodeMatrix(e){return e.matrix?t.Matrix.FromArray(e.matrix):t.Matrix.Compose(e.scale?t.Vector3.FromArray(e.scale):t.Vector3.One(),e.rotation?t.Quaternion.FromArray(e.rotation):t.Quaternion.Identity(),e.translation?t.Vector3.FromArray(e.translation):t.Vector3.Zero())}loadCameraAsync(e,n,o=()=>{}){const r=this._extensionsLoadCameraAsync(e,n,o);if(r)return r;const a=new Array;this.logOpen(`${e} ${n.name||""}`),this._babylonScene._blockEntityCollection=!!this._assetContainer;const s=new t.FreeCamera(n.name||`camera${n.index}`,t.Vector3.Zero(),this._babylonScene,!1);switch(s._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,n._babylonCamera=s,s.setTarget(new t.Vector3(0,0,-1)),n.type){case"perspective":{const t=n.perspective;if(!t)throw new Error(`${e}: Camera perspective properties are missing`);s.fov=t.yfov,s.minZ=t.znear,s.maxZ=t.zfar||0;break}case"orthographic":if(!n.orthographic)throw new Error(`${e}: Camera orthographic properties are missing`);s.mode=t.Camera.ORTHOGRAPHIC_CAMERA,s.orthoLeft=-n.orthographic.xmag,s.orthoRight=n.orthographic.xmag,s.orthoBottom=-n.orthographic.ymag,s.orthoTop=n.orthographic.ymag,s.minZ=n.orthographic.znear,s.maxZ=n.orthographic.zfar;break;default:throw new Error(`${e}: Invalid camera type (${n.type})`)}return X.AddPointerMetadata(s,e),this._parent.onCameraLoadedObservable.notifyObservers(s),o(s),this.logClose(),Promise.all(a).then(()=>s)}_loadAnimationsAsync(){this._parent._startPerformanceCounter("Load animations");const e=this._gltf.animations;if(!e)return Promise.resolve();const t=new Array;for(let n=0;n<e.length;n++){const o=e[n];t.push(this.loadAnimationAsync(`/animations/${o.index}`,o).then(e=>{0===e.targetedAnimations.length&&e.dispose()}))}return Promise.all(t).then(()=>{this._parent._endPerformanceCounter("Load animations")})}loadAnimationAsync(e,t){this._parent._startPerformanceCounter("Load animation");return this._extensionsLoadAnimationAsync(e,t)||j.value.then(({AnimationGroup:n})=>{this._babylonScene._blockEntityCollection=!!this._assetContainer;const o=new n(t.name||`animation${t.index}`,this._babylonScene);o._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,t._babylonAnimationGroup=o;const r=new Array;q.Assign(t.channels),q.Assign(t.samplers);for(const n of t.channels)r.push(this._loadAnimationChannelAsync(`${e}/channels/${n.index}`,e,t,n,(e,t)=>{e.animations=e.animations||[],e.animations.push(t),o.addTargetedAnimation(t,e)}));return this._parent._endPerformanceCounter("Load animation"),Promise.all(r).then(()=>(o.normalize(0),o))})}_loadAnimationChannelAsync(e,t,n,o,r){const a=this._extensionsLoadAnimationChannelAsync(e,t,n,o,r);if(a)return a;if(null==o.target.node)return Promise.resolve();const s=q.Get(`${e}/target/node`,this._gltf.nodes,o.target.node),i=o.target.path,l="weights"===i;return l&&!s._numMorphTargets||!l&&!s._babylonTransformNode?Promise.resolve():this._parent.loadNodeAnimations||l||s._isJoint?z.value.then(({RegisterGLTFLoaderAnimation:a})=>{var l,u,c,d;let h;switch(a(),i){case"translation":h=null===(l=P("/nodes/{}/translation"))||void 0===l?void 0:l.interpolation;break;case"rotation":h=null===(u=P("/nodes/{}/rotation"))||void 0===u?void 0:u.interpolation;break;case"scale":h=null===(c=P("/nodes/{}/scale"))||void 0===c?void 0:c.interpolation;break;case"weights":h=null===(d=P("/nodes/{}/weights"))||void 0===d?void 0:d.interpolation;break;default:throw new Error(`${e}/target/path: Invalid value (${o.target.path})`)}if(!h)throw new Error(`${e}/target/path: Could not find interpolation properties for target path (${o.target.path})`);const m={object:s,info:h};return this._loadAnimationChannelFromTargetInfoAsync(e,t,n,o,m,r)}):Promise.resolve()}_loadAnimationChannelFromTargetInfoAsync(e,t,n,o,r,a){const s=this.parent.targetFps,i=1/s,l=q.Get(`${e}/sampler`,n.samplers,o.sampler);return this._loadAnimationSamplerAsync(`${t}/samplers/${o.sampler}`,l).then(e=>{let t=0;const l=r.object,u=r.info;for(const r of u){const u=r.getStride(l),c=e.input,d=e.output,h=new Array(c.length);let m=0;switch(e.interpolation){case"STEP":for(let e=0;e<c.length;e++){const t=r.getValue(l,d,m,1);m+=u,h[e]={frame:c[e]*s,value:t,interpolation:1}}break;case"CUBICSPLINE":for(let e=0;e<c.length;e++){const t=r.getValue(l,d,m,i);m+=u;const n=r.getValue(l,d,m,1);m+=u;const o=r.getValue(l,d,m,i);m+=u,h[e]={frame:c[e]*s,inTangent:t,value:n,outTangent:o}}break;case"LINEAR":for(let e=0;e<c.length;e++){const t=r.getValue(l,d,m,1);m+=u,h[e]={frame:c[e]*s,value:t}}}if(m>0){const e=`${n.name||`animation${n.index}`}_channel${o.index}_${t}`,i=r.buildAnimations(l,e,s,h);for(const e of i)t++,a(e.babylonAnimatable,e.babylonAnimation)}}})}_loadAnimationSamplerAsync(e,t){if(t._data)return t._data;const n=t.interpolation||"LINEAR";switch(n){case"STEP":case"LINEAR":case"CUBICSPLINE":break;default:throw new Error(`${e}/interpolation: Invalid value (${t.interpolation})`)}const o=q.Get(`${e}/input`,this._gltf.accessors,t.input),r=q.Get(`${e}/output`,this._gltf.accessors,t.output);return t._data=Promise.all([this._loadFloatAccessorAsync(`/accessors/${o.index}`,o),this._loadFloatAccessorAsync(`/accessors/${r.index}`,r)]).then(([e,t])=>({input:e,interpolation:n,output:t})),t._data}loadBufferAsync(e,t,n,o){const r=this._extensionsLoadBufferAsync(e,t,n,o);if(r)return r;if(!t._data)if(t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{if(!this._bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);t._data=this._bin.readAsync(0,t.byteLength)}return t._data.then(t=>{try{return new Uint8Array(t.buffer,t.byteOffset+n,o)}catch(t){throw new Error(`${e}: ${t.message}`,{cause:t})}})}loadBufferViewAsync(e,t){const n=this._extensionsLoadBufferViewAsync(e,t);if(n)return n;if(t._data)return t._data;const o=q.Get(`${e}/buffer`,this._gltf.buffers,t.buffer);return t._data=this.loadBufferAsync(`/buffers/${o.index}`,o,t.byteOffset||0,t.byteLength),t._data}_loadAccessorAsync(e,n,o){if(n._data)return n._data;const r=X._GetNumComponents(e,n.type),a=r*t.VertexBufferGetTypeByteLength(n.componentType),s=r*n.count;if(null==n.bufferView)n._data=Promise.resolve(new o(s));else{const i=q.Get(`${e}/bufferView`,this._gltf.bufferViews,n.bufferView);n._data=this.loadBufferViewAsync(`/bufferViews/${i.index}`,i).then(l=>{if(5126!==n.componentType||n.normalized||i.byteStride&&i.byteStride!==a){const e=new o(s);return t.VertexBufferForEach(l,n.byteOffset||0,i.byteStride||a,r,n.componentType,e.length,n.normalized||!1,(t,n)=>{e[n]=t}),e}return X._GetTypedArray(e,n.componentType,l,n.byteOffset,s)})}if(n.sparse){const s=n.sparse;n._data=n._data.then(i=>{const l=i,u=q.Get(`${e}/sparse/indices/bufferView`,this._gltf.bufferViews,s.indices.bufferView),c=q.Get(`${e}/sparse/values/bufferView`,this._gltf.bufferViews,s.values.bufferView);return Promise.all([this.loadBufferViewAsync(`/bufferViews/${u.index}`,u),this.loadBufferViewAsync(`/bufferViews/${c.index}`,c)]).then(([i,u])=>{const c=X._GetTypedArray(`${e}/sparse/indices`,s.indices.componentType,i,s.indices.byteOffset,s.count),d=r*s.count;let h;if(5126!==n.componentType||n.normalized){const i=X._GetTypedArray(`${e}/sparse/values`,n.componentType,u,s.values.byteOffset,d);h=new o(d),t.VertexBufferForEach(i,0,a,r,n.componentType,h.length,n.normalized||!1,(e,t)=>{h[t]=e})}else h=X._GetTypedArray(`${e}/sparse/values`,n.componentType,u,s.values.byteOffset,d);let m=0;for(let e=0;e<c.length;e++){let t=c[e]*r;for(let e=0;e<r;e++)l[t++]=h[m++]}return l})})}return n._data}_loadFloatAccessorAsync(e,t){return this._loadAccessorAsync(e,t,Float32Array)}_loadIndicesAccessorAsync(e,t){if("SCALAR"!==t.type)throw new Error(`${e}/type: Invalid value ${t.type}`);if(5121!==t.componentType&&5123!==t.componentType&&5125!==t.componentType)throw new Error(`${e}/componentType: Invalid value ${t.componentType}`);if(t._data)return t._data;if(t.sparse){const n=X._GetTypedArrayConstructor(`${e}/componentType`,t.componentType);t._data=this._loadAccessorAsync(e,t,n)}else{const n=q.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${n.index}`,n).then(n=>X._GetTypedArray(e,t.componentType,n,t.byteOffset,t.count))}return t._data}_loadVertexBufferViewAsync(e){if(e._babylonBuffer)return e._babylonBuffer;const n=this._babylonScene.getEngine();return e._babylonBuffer=this.loadBufferViewAsync(`/bufferViews/${e.index}`,e).then(e=>new t.Buffer(n,e,!1)),e._babylonBuffer}_loadVertexAccessorAsync(e,n,o){var r;if(null===(r=n._babylonVertexBuffer)||void 0===r?void 0:r[o])return n._babylonVertexBuffer[o];n._babylonVertexBuffer||(n._babylonVertexBuffer={});const a=this._babylonScene.getEngine();if(n.sparse||null==n.bufferView)n._babylonVertexBuffer[o]=this._loadFloatAccessorAsync(e,n).then(e=>new t.VertexBuffer(a,e,o,!1));else{const r=q.Get(`${e}/bufferView`,this._gltf.bufferViews,n.bufferView);n._babylonVertexBuffer[o]=this._loadVertexBufferViewAsync(r).then(s=>{const i=X._GetNumComponents(e,n.type);return new t.VertexBuffer(a,s,o,!1,void 0,r.byteStride,void 0,n.byteOffset,i,n.componentType,n.normalized,!0,void 0,!0)})}return n._babylonVertexBuffer[o]}_loadMaterialMetallicRoughnessPropertiesAsync(e,n,o){const r=new Array,a=this._getOrCreateMaterialAdapter(o);return n&&(n.baseColorFactor?(a.baseColor=t.Color3.FromArray(n.baseColorFactor),a.geometryOpacity=n.baseColorFactor[3]):a.baseColor=t.Color3.White(),a.baseMetalness=null==n.metallicFactor?1:n.metallicFactor,a.specularRoughness=null==n.roughnessFactor?1:n.roughnessFactor,n.baseColorTexture&&r.push(this.loadTextureInfoAsync(`${e}/baseColorTexture`,n.baseColorTexture,e=>{e.name=`${o.name} (Base Color)`,a.baseColorTexture=e})),n.metallicRoughnessTexture&&(n.metallicRoughnessTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/metallicRoughnessTexture`,n.metallicRoughnessTexture,e=>{e.name=`${o.name} (Metallic Roughness)`,a.baseMetalnessTexture=e,a.specularRoughnessTexture=e})),a.useRoughnessFromMetallicTextureGreen=!0,a.useMetallicFromMetallicTextureBlue=!0)),Promise.all(r).then(()=>{})}_loadMaterialAsync(e,t,n,o,r=()=>{}){const a=this._extensionsLoadMaterialAsync(e,t,n,o,r);if(a)return a;t._data=t._data||{};let s=t._data[o];if(!s){this.logOpen(`${e} ${t.name||""}`);const n=this.createMaterial(e,t,o);s={babylonMaterial:n,babylonMeshes:[],promise:this.loadMaterialPropertiesAsync(e,t,n)},t._data[o]=s,X.AddPointerMetadata(n,e),this._parent.onMaterialLoadedObservable.notifyObservers(n),this.logClose()}return n&&(s.babylonMeshes.push(n),n.onDisposeObservable.addOnce(()=>{const e=s.babylonMeshes.indexOf(n);-1!==e&&s.babylonMeshes.splice(e,1)})),r(s.babylonMaterial),s.promise.then(()=>s.babylonMaterial)}_selectImplForGltfMaterial(e){var t;if(this.parent.useOpenPBR||(null===(t=e.extensions)||void 0===t?void 0:t.KHR_materials_openpbr)){const e=this._pbrMaterialImpls.get("openpbr");if(e)return e}const n=this._pbrMaterialImpls.get("pbr");if(n)return n;throw new Error("No PBR material implementation loaded")}_getDefaultImpl(){var e;if(this.parent.useOpenPBR){const e=this._pbrMaterialImpls.get("openpbr");if(e)return e}const t=null!==(e=this._pbrMaterialImpls.get("pbr"))&&void 0!==e?e:this._pbrMaterialImpls.values().next().value;if(t)return t;throw new Error("No PBR material implementation loaded")}_createDefaultMaterial(e,t,n){this._babylonScene._blockEntityCollection=!!this._assetContainer;const o=new n.materialClass(e,this._babylonScene);o._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,o.fillMode=t,o.transparencyMode=n.materialClass.MATERIAL_OPAQUE;const r=this._getOrCreateMaterialAdapter(o);return r.transparencyAsAlphaCoverage=this._parent.transparencyAsCoverage,r.baseMetalness=1,r.specularRoughness=1,o}createMaterial(e,t,n){const o=this._extensionsCreateMaterial(e,t,n);if(o)return o;const r=t.name||`material${t.index}`;return this._createDefaultMaterial(r,n,this._selectImplForGltfMaterial(t))}loadMaterialPropertiesAsync(e,t,n){const o=this._extensionsLoadMaterialPropertiesAsync(e,t,n);if(o)return o;const r=new Array;return r.push(this.loadMaterialBasePropertiesAsync(e,t,n)),t.pbrMetallicRoughness&&r.push(this._loadMaterialMetallicRoughnessPropertiesAsync(`${e}/pbrMetallicRoughness`,t.pbrMetallicRoughness,n)),this.loadMaterialAlphaProperties(e,t,n),Promise.all(r).then(()=>{})}loadMaterialBasePropertiesAsync(e,n,o){const r=new Array,a=this._getOrCreateMaterialAdapter(o);let s;a.emissionColor=n.emissiveFactor?t.Color3.FromArray(n.emissiveFactor):new t.Color3(0,0,0),n.doubleSided&&(a.backFaceCulling=!1,a.twoSidedLighting=!0),n.normalTexture&&(n.normalTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/normalTexture`,n.normalTexture,e=>{var t;e.name=`${o.name} (Normal)`,a.geometryNormalTexture=e,null!=(null===(t=n.normalTexture)||void 0===t?void 0:t.scale)&&(e.level=n.normalTexture.scale)})),a.setNormalMapInversions(!this._babylonScene.useRightHandedSystem,this._babylonScene.useRightHandedSystem));let i,l=1;return n.occlusionTexture&&(n.occlusionTexture.nonColorData=!0,r.push(this.loadTextureInfoAsync(`${e}/occlusionTexture`,n.occlusionTexture,e=>{e.name=`${o.name} (Occlusion)`,s=e})),null!=n.occlusionTexture.strength&&(l=n.occlusionTexture.strength)),n.emissiveTexture&&r.push(this.loadTextureInfoAsync(`${e}/emissiveTexture`,n.emissiveTexture,e=>{e.name=`${o.name} (Emissive)`,i=e})),Promise.all(r).then(()=>{s&&(a.ambientOcclusionTexture=s,a.ambientOcclusionTextureStrength=l),i&&(a.emissionColorTexture=i)})}loadMaterialAlphaProperties(e,n,o){if(0===this._pbrMaterialImpls.size)throw new Error(`${e}: Material type not supported`);const r=this._getOrCreateMaterialAdapter(o),a=r.baseColorTexture;switch(n.alphaMode||"OPAQUE"){case"OPAQUE":o.transparencyMode=t.Material.MATERIAL_OPAQUE,o.alpha=1;break;case"MASK":o.transparencyMode=t.Material.MATERIAL_ALPHATEST,r.alphaCutOff=null==n.alphaCutoff?.5:n.alphaCutoff,a&&(a.hasAlpha=!0,r.useAlphaFromBaseColorTexture=!0);break;case"BLEND":o.transparencyMode=t.Material.MATERIAL_ALPHABLEND,a&&(a.hasAlpha=!0,r.useAlphaFromBaseColorTexture=!0);break;default:throw new Error(`${e}/alphaMode: Invalid value (${n.alphaMode})`)}}loadTextureInfoAsync(e,t,n=()=>{}){const o=this._extensionsLoadTextureInfoAsync(e,t,n);if(o)return o;if(this.logOpen(`${e}`),t.texCoord>=6)throw new Error(`${e}/texCoord: Invalid value (${t.texCoord})`);const r=q.Get(`${e}/index`,this._gltf.textures,t.index);r._textureInfo=t;const a=this._loadTextureAsync(`/textures/${t.index}`,r,o=>{o.coordinatesIndex=t.texCoord||0,X.AddPointerMetadata(o,e),this._parent.onTextureLoadedObservable.notifyObservers(o),n(o)});return this.logClose(),a}_loadTextureAsync(e,t,n=()=>{}){const o=this._extensionsLoadTextureAsync(e,t,n);if(o)return o;this.logOpen(`${e} ${t.name||""}`);const r=null==t.sampler?X.DefaultSampler:q.Get(`${e}/sampler`,this._gltf.samplers,t.sampler),a=q.Get(`${e}/source`,this._gltf.images,t.source),s=this._createTextureAsync(e,r,a,n,void 0,!t._textureInfo.nonColorData);return this.logClose(),s}_createTextureAsync(e,n,o,r=()=>{},a,s){var i,l;const u=this._loadSampler(`/samplers/${n.index}`,n),c=new Array,d=new t.Deferred;this._babylonScene._blockEntityCollection=!!this._assetContainer;const h={noMipmap:u.noMipMaps,invertY:!1,samplingMode:u.samplingMode,onLoad:()=>{this._disposed||d.resolve()},onError:(t,n)=>{this._disposed||d.reject(new Error(`${e}: ${n&&n.message?n.message:t||"Failed to load texture"}`))},mimeType:null!==(i=o.mimeType)&&void 0!==i?i:t.GetMimeType(null!==(l=o.uri)&&void 0!==l?l:""),loaderOptions:a,useSRGBBuffer:!!s&&this._parent.useSRGBBuffers},m=new t.Texture(null,this._babylonScene,h);m._parentContainer=this._assetContainer,this._babylonScene._blockEntityCollection=!1,c.push(d.promise);const p=o.uri&&!t.IsBase64DataUrl(o.uri)?o.uri:void 0,_=null!=p?p:`${this._fileName}#image${o.index}`;if(c.push(this.loadImageAsync(`/images/${o.index}`,o).then(e=>{const t=`data:${this._uniqueRootUrl}${_}`;m.updateURL(t,e);const n=m.getInternalTexture();n&&(n.label=o.name)})),m.wrapU=u.wrapU,m.wrapV=u.wrapV,r(m),this._parent.useGltfTextureNames){const e=o.name||p||`image${o.index}`;m.name=e}return Promise.all(c).then(()=>m)}_loadSampler(e,t){return t._data||(t._data={noMipMaps:9728===t.minFilter||9729===t.minFilter,samplingMode:X._GetTextureSamplingMode(e,t),wrapU:X._GetTextureWrapMode(`${e}/wrapS`,t.wrapS),wrapV:X._GetTextureWrapMode(`${e}/wrapT`,t.wrapT)}),t._data}loadImageAsync(e,t){if(!t._data){if(this.logOpen(`${e} ${t.name||""}`),t.uri)t._data=this.loadUriAsync(`${e}/uri`,t,t.uri);else{const n=q.Get(`${e}/bufferView`,this._gltf.bufferViews,t.bufferView);t._data=this.loadBufferViewAsync(`/bufferViews/${n.index}`,n)}this.logClose()}return t._data}loadUriAsync(e,n,o){var r;const a=this._extensionsLoadUriAsync(e,n,o);if(a)return a;if(!this._parent._isPreprocessUrlAsyncSet&&!X._ValidateUri(o))throw new Error(`${e}: '${o}' is invalid`);if(t.IsBase64DataUrl(o)){const n=new Uint8Array(t.DecodeBase64UrlToBinary(o));return this.log(`${e}: Decoded ${o.substring(0,64)}... (${n.length} bytes)`),Promise.resolve(n)}return this.log(`${e}: Loading ${o}`),this._parent.preprocessUrlAsync(this._rootUrl+o,null!==(r=this._rootUrl)&&void 0!==r?r:void 0).then(n=>new Promise((r,a)=>{this._parent._loadFile(this._babylonScene,n,t=>{this._disposed||(this.log(`${e}: Loaded ${o} (${t.byteLength} bytes)`),r(new Uint8Array(t)))},!0,n=>{a(new t.LoadFileError(`${e}: Failed to load '${o}'${n?": "+n.status+" "+n.statusText:""}`,n))})}))}static AddPointerMetadata(e,t){e.metadata=e.metadata||{};const n=e._internalMetadata=e._internalMetadata||{},o=n.gltf=n.gltf||{};(o.pointers=o.pointers||[]).push(t)}static _GetTextureWrapMode(e,n){switch(n=null==n?10497:n){case 33071:return t.Texture.CLAMP_ADDRESSMODE;case 33648:return t.Texture.MIRROR_ADDRESSMODE;case 10497:return t.Texture.WRAP_ADDRESSMODE;default:return t.Logger.Warn(`${e}: Invalid value (${n})`),t.Texture.WRAP_ADDRESSMODE}}static _GetTextureSamplingMode(e,n){const o=null==n.magFilter?9729:n.magFilter,r=null==n.minFilter?9987:n.minFilter;if(9729===o)switch(r){case 9728:return t.Texture.LINEAR_NEAREST;case 9729:return t.Texture.LINEAR_LINEAR;case 9984:return t.Texture.LINEAR_NEAREST_MIPNEAREST;case 9985:return t.Texture.LINEAR_LINEAR_MIPNEAREST;case 9986:return t.Texture.LINEAR_NEAREST_MIPLINEAR;case 9987:return t.Texture.LINEAR_LINEAR_MIPLINEAR;default:return t.Logger.Warn(`${e}/minFilter: Invalid value (${r})`),t.Texture.LINEAR_LINEAR_MIPLINEAR}else switch(9728!==o&&t.Logger.Warn(`${e}/magFilter: Invalid value (${o})`),r){case 9728:return t.Texture.NEAREST_NEAREST;case 9729:return t.Texture.NEAREST_LINEAR;case 9984:return t.Texture.NEAREST_NEAREST_MIPNEAREST;case 9985:return t.Texture.NEAREST_LINEAR_MIPNEAREST;case 9986:return t.Texture.NEAREST_NEAREST_MIPLINEAR;case 9987:return t.Texture.NEAREST_LINEAR_MIPLINEAR;default:return t.Logger.Warn(`${e}/minFilter: Invalid value (${r})`),t.Texture.NEAREST_NEAREST_MIPNEAREST}}static _GetTypedArrayConstructor(e,n){try{return t.GetTypedArrayConstructor(n)}catch(t){throw new Error(`${e}: ${t.message}`,{cause:t})}}static _GetTypedArray(e,n,o,r,a){const s=o.buffer;r=o.byteOffset+(r||0);const i=X._GetTypedArrayConstructor(`${e}/componentType`,n),l=t.VertexBufferGetTypeByteLength(n);return r%l!==0?(t.Logger.Warn(`${e}: Copying buffer as byte offset (${r}) is not a multiple of component type byte length (${l})`),new i(s.slice(r,r+a*l),0)):new i(s,r,a)}static _GetNumComponents(e,t){switch(t){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}throw new Error(`${e}: Invalid type (${t})`)}static _ValidateUri(e){return t.Tools.IsBase64(e)||-1===e.indexOf("..")}static _GetDrawMode(e,n){switch(null==n&&(n=4),n){case 0:return t.Material.PointListDrawMode;case 1:return t.Material.LineListDrawMode;case 2:return t.Material.LineLoopDrawMode;case 3:return t.Material.LineStripDrawMode;case 4:return t.Material.TriangleFillMode;case 5:return t.Material.TriangleStripDrawMode;case 6:return t.Material.TriangleFanDrawMode}throw new Error(`${e}: Invalid mesh primitive mode (${n})`)}_compileMaterialsAsync(){this._parent._startPerformanceCounter("Compile materials");const e=new Array;if(this._gltf.materials)for(const t of this._gltf.materials)if(t._data)for(const n in t._data){const o=t._data[n];for(const t of o.babylonMeshes){t.computeWorldMatrix(!0);const n=o.babylonMaterial;e.push(n.forceCompilationAsync(t)),e.push(n.forceCompilationAsync(t,{useInstances:!0})),this._parent.useClipPlane&&(e.push(n.forceCompilationAsync(t,{clipPlane:!0})),e.push(n.forceCompilationAsync(t,{clipPlane:!0,useInstances:!0})))}}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile materials")})}_compileShadowGeneratorsAsync(){this._parent._startPerformanceCounter("Compile shadow generators");const e=new Array,t=this._babylonScene.lights;for(const n of t){const t=n.getShadowGenerator();t&&e.push(t.forceCompilationAsync())}return Promise.all(e).then(()=>{this._parent._endPerformanceCounter("Compile shadow generators")})}_forEachExtensions(e){for(const t of this._extensions)t.enabled&&e(t)}_applyExtensions(e,t,n){for(const o of this._extensions)if(o.enabled){const r=`${o.name}.${t}`,a=e;a._activeLoaderExtensionFunctions=a._activeLoaderExtensionFunctions||{};const s=a._activeLoaderExtensionFunctions;if(!s[r]){s[r]=!0;try{const e=n(o);if(e)return e}finally{delete s[r]}}}return null}_extensionsOnLoading(){this._forEachExtensions(e=>e.onLoading&&e.onLoading())}_extensionsOnReadyAsync(){return D(this,void 0,void 0,function*(){for(const e of this._extensions)e.enabled&&e.onReady&&(yield e.onReady())})}_extensionsLoadSceneAsync(e,t){return this._applyExtensions(t,"loadScene",n=>n.loadSceneAsync&&n.loadSceneAsync(e,t))}_extensionsLoadNodeAsync(e,t,n){return this._applyExtensions(t,"loadNode",o=>o.loadNodeAsync&&o.loadNodeAsync(e,t,n))}_extensionsLoadCameraAsync(e,t,n){return this._applyExtensions(t,"loadCamera",o=>o.loadCameraAsync&&o.loadCameraAsync(e,t,n))}_extensionsLoadVertexDataAsync(e,t,n){return this._applyExtensions(t,"loadVertexData",o=>o._loadVertexDataAsync&&o._loadVertexDataAsync(e,t,n))}_extensionsLoadMeshPrimitiveAsync(e,t,n,o,r,a){return this._applyExtensions(r,"loadMeshPrimitive",s=>s._loadMeshPrimitiveAsync&&s._loadMeshPrimitiveAsync(e,t,n,o,r,a))}_extensionsLoadMaterialAsync(e,t,n,o,r){return this._applyExtensions(t,"loadMaterial",a=>a._loadMaterialAsync&&a._loadMaterialAsync(e,t,n,o,r))}_extensionsCreateMaterial(e,t,n){return this._applyExtensions(t,"createMaterial",o=>o.createMaterial&&o.createMaterial(e,t,n))}_extensionsLoadMaterialPropertiesAsync(e,t,n){return this._applyExtensions(t,"loadMaterialProperties",o=>o.loadMaterialPropertiesAsync&&o.loadMaterialPropertiesAsync(e,t,n))}_extensionsLoadTextureInfoAsync(e,t,n){return this._applyExtensions(t,"loadTextureInfo",o=>o.loadTextureInfoAsync&&o.loadTextureInfoAsync(e,t,n))}_extensionsLoadTextureAsync(e,t,n){return this._applyExtensions(t,"loadTexture",o=>o._loadTextureAsync&&o._loadTextureAsync(e,t,n))}_extensionsLoadAnimationAsync(e,t){return this._applyExtensions(t,"loadAnimation",n=>n.loadAnimationAsync&&n.loadAnimationAsync(e,t))}_extensionsLoadAnimationChannelAsync(e,t,n,o,r){return this._applyExtensions(n,"loadAnimationChannel",a=>a._loadAnimationChannelAsync&&a._loadAnimationChannelAsync(e,t,n,o,r))}_extensionsLoadSkinAsync(e,t,n){return this._applyExtensions(n,"loadSkin",o=>o._loadSkinAsync&&o._loadSkinAsync(e,t,n))}_extensionsLoadUriAsync(e,t,n){return this._applyExtensions(t,"loadUri",o=>o._loadUriAsync&&o._loadUriAsync(e,t,n))}_extensionsLoadBufferViewAsync(e,t){return this._applyExtensions(t,"loadBufferView",n=>n.loadBufferViewAsync&&n.loadBufferViewAsync(e,t))}_extensionsLoadBufferAsync(e,t,n,o){return this._applyExtensions(t,"loadBuffer",r=>r.loadBufferAsync&&r.loadBufferAsync(e,t,n,o))}static LoadExtensionAsync(e,t,n,o){if(!t.extensions)return null;const r=t.extensions[n];return r?o(`${e}/extensions/${n}`,r):null}static LoadExtraAsync(e,t,n,o){if(!t.extras)return null;const r=t.extras[n];return r?o(`${e}/extras/${n}`,r):null}isExtensionUsed(e){return!!this._gltf.extensionsUsed&&-1!==this._gltf.extensionsUsed.indexOf(e)}logOpen(e){this._parent._logOpen(e)}logClose(){this._parent._logClose()}log(e){this._parent._log(e)}startPerformanceCounter(e){this._parent._startPerformanceCounter(e)}endPerformanceCounter(e){this._parent._endPerformanceCounter(e)}}X.DefaultSampler={index:-1};let Q=!1;function J(){Q||(Q=!0,v._CreateGLTF2Loader=e=>new X(e))}const Z="EXT_lights_image_based";class ee{constructor(e){this.name=Z,this._loader=e,this.enabled=this._loader.isExtensionUsed(Z)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights}}loadSceneAsync(e,t){return X.LoadExtensionAsync(e,t,this.name,(n,o)=>D(this,void 0,void 0,function*(){this._loader._allMaterialsDirtyRequired=!0;const r=new Array;r.push(this._loader.loadSceneAsync(e,t)),this._loader.logOpen(`${n}`);const a=q.Get(`${n}/light`,this._lights,o.light);return r.push(this._loadLightAsync(`/extensions/${this.name}/lights/${o.light}`,a).then(e=>{this._loader.babylonScene.environmentTexture=e})),this._loader.logClose(),yield Promise.all(r).then(()=>{})}))}_loadLightAsync(e,n){if(!n._loaded){const o=new Array;this._loader.logOpen(`${e}`);const r=new Array(n.specularImages.length);for(let t=0;t<n.specularImages.length;t++){const a=n.specularImages[t];r[t]=new Array(a.length);for(let n=0;n<a.length;n++){const s=`${e}/specularImages/${t}/${n}`;this._loader.logOpen(`${s}`);const i=a[n],l=q.Get(s,this._loader.gltf.images,i);o.push(this._loader.loadImageAsync(`/images/${i}`,l).then(e=>{r[t][n]=e})),this._loader.logClose()}}this._loader.logClose(),n._loaded=Promise.all(o).then(()=>D(this,void 0,void 0,function*(){const o=new t.RawCubeTexture(this._loader.babylonScene,null,n.specularImageSize);if(o.name=n.name||"environment",n._babylonTexture=o,null!=n.intensity&&(o.level=n.intensity),n.rotation){let e=t.Quaternion.FromArray(n.rotation);this._loader.babylonScene.useRightHandedSystem||(e=t.Quaternion.Inverse(e)),t.Matrix.FromQuaternionToRef(e,o.getReflectionTextureMatrix())}if(!n.irradianceCoefficients)throw new Error(`${e}: Irradiance coefficients are missing`);const a=t.SphericalHarmonics.FromArray(n.irradianceCoefficients);a.scaleInPlace(n.intensity),a.convertIrradianceToLambertianRadiance();const s=t.SphericalPolynomial.FromHarmonics(a),i=(r.length-1)/Math.log2(n.specularImageSize);return yield o.updateRGBDAsync(r,s,i)}))}return n._loaded.then(()=>n._babylonTexture)}}let te=!1;function ne(){te||(te=!0,U(Z),W(Z,!0,e=>new ee(e)))}ne();const oe="EXT_mesh_gpu_instancing";class re{constructor(e){this.name=oe,this._loader=e,this.enabled=this._loader.isExtensionUsed(oe)}dispose(){this._loader=null}loadNodeAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(e,r)=>D(this,void 0,void 0,function*(){this._loader._disableInstancedMesh++;const a=this._loader.loadNodeAsync(`/nodes/${n.index}`,n,o);if(this._loader._disableInstancedMesh--,!n._primitiveBabylonMeshes)return yield a;const s=new Array;let i=0;const l=t=>{if(null==r.attributes[t])return void s.push(Promise.resolve(null));const n=q.Get(`${e}/attributes/${t}`,this._loader.gltf.accessors,r.attributes[t]);if(s.push(this._loader._loadFloatAccessorAsync(`/accessors/${n.bufferView}`,n)),0===i)i=n.count;else if(i!==n.count)throw new Error(`${e}/attributes: Instance buffer accessors do not have the same count.`)};return l("TRANSLATION"),l("ROTATION"),l("SCALE"),l("_COLOR_0"),yield a.then(e=>D(this,void 0,void 0,function*(){const[o,r,a,l]=yield Promise.all(s),u=new Float32Array(16*i);t.TmpVectors.Vector3[0].copyFromFloats(0,0,0),t.TmpVectors.Quaternion[0].copyFromFloats(0,0,0,1),t.TmpVectors.Vector3[1].copyFromFloats(1,1,1);for(let e=0;e<i;++e)o&&t.Vector3.FromArrayToRef(o,3*e,t.TmpVectors.Vector3[0]),r&&t.Quaternion.FromArrayToRef(r,4*e,t.TmpVectors.Quaternion[0]),a&&t.Vector3.FromArrayToRef(a,3*e,t.TmpVectors.Vector3[1]),t.Matrix.ComposeToRef(t.TmpVectors.Vector3[1],t.TmpVectors.Quaternion[0],t.TmpVectors.Vector3[0],t.TmpVectors.Matrix[0]),t.TmpVectors.Matrix[0].copyToArray(u,16*e);for(const e of n._primitiveBabylonMeshes)e.thinInstanceSetBuffer("matrix",u,16,!0),l&&(l.length===3*i?e.thinInstanceSetBuffer("color",l,3,!0):l.length===4*i?e.thinInstanceSetBuffer("color",l,4,!0):t.Logger.Warn("Unexpected size of _COLOR_0 attribute for mesh "+e.name));return e}))}))}}let ae=!1;function se(){ae||(ae=!0,U(oe),W(oe,!0,e=>new re(e)))}se();const ie="EXT_meshopt_compression";class le{constructor(e){this.name=ie,this.enabled=e.isExtensionUsed(ie),this._loader=e}dispose(){this._loader=null}loadBufferViewAsync(e,n){return X.LoadExtensionAsync(e,n,this.name,(o,r)=>D(this,void 0,void 0,function*(){const o=n;if(o._meshOptData)return yield o._meshOptData;const a=q.Get(`${e}/buffer`,this._loader.gltf.buffers,r.buffer);return o._meshOptData=this._loader.loadBufferAsync(`/buffers/${a.index}`,a,r.byteOffset||0,r.byteLength).then(e=>D(this,void 0,void 0,function*(){return yield t.MeshoptCompression.Default.decodeGltfBufferAsync(e,r.count,r.byteStride,r.mode,r.filter)})),yield o._meshOptData}))}}let ue=!1;function ce(){ue||(ue=!0,U(ie),W(ie,!0,e=>new le(e)))}ce();const de="EXT_texture_webp";class he{constructor(e){this.name=de,this._loader=e,this.enabled=e.isExtensionUsed(de)}dispose(){this._loader=null}_loadTextureAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=null==t.sampler?X.DefaultSampler:q.Get(`${e}/sampler`,this._loader.gltf.samplers,t.sampler),s=q.Get(`${o}/source`,this._loader.gltf.images,r.source);return yield this._loader._createTextureAsync(e,a,s,e=>{n(e)},void 0,!t._textureInfo.nonColorData)}))}}let me=!1;function pe(){me||(me=!0,U(de),W(de,!0,e=>new he(e)))}pe();const _e="EXT_texture_avif";class fe{constructor(e){this.name=_e,this._loader=e,this.enabled=e.isExtensionUsed(_e)}dispose(){this._loader=null}_loadTextureAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=null==t.sampler?X.DefaultSampler:q.Get(`${e}/sampler`,this._loader.gltf.samplers,t.sampler),s=q.Get(`${o}/source`,this._loader.gltf.images,r.source);return yield this._loader._createTextureAsync(e,a,s,e=>{n(e)},void 0,!t._textureInfo.nonColorData)}))}}let ge=!1;function ve(){ge||(ge=!0,U(_e),W(_e,!0,e=>new fe(e)))}ve();const ye="EXT_lights_ies";class be{constructor(e){this.name=ye,this._loader=e,this.enabled=this._loader.isExtensionUsed(ye)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,q.Assign(this._lights)}}loadNodeAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(r,a)=>D(this,void 0,void 0,function*(){let s,i;this._loader._allMaterialsDirtyRequired=!0;const l=yield this._loader.loadNodeAsync(e,n,e=>{i=q.Get(r,this._lights,a.light);const n=i.name||e.name;this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer,s=new t.SpotLight(n,t.Vector3.Zero(),t.Vector3.Backward(),0,1,this._loader.babylonScene),s.angle=Math.PI/2,s.innerAngle=0,s._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,i._babylonLight=s,s.falloffType=t.Light.FALLOFF_GLTF,s.diffuse=a.color?t.Color3.FromArray(a.color):t.Color3.White(),s.intensity=a.multiplier||1,s.range=Number.MAX_VALUE,s.parent=e,this._loader._babylonLights.push(s),X.AddPointerMetadata(s,r),o(e)});let u;if(i.uri)u=yield this._loader.loadUriAsync(e,i,i.uri);else{const t=q.Get(`${e}/bufferView`,this._loader.gltf.bufferViews,i.bufferView);u=yield this._loader.loadBufferViewAsync(`/bufferViews/${t.index}`,t)}return s.iesProfileTexture=new t.Texture(s.name+"_iesProfile",this._loader.babylonScene,!0,!1,void 0,null,null,u,!0,void 0,void 0,void 0,void 0,".ies"),l}))}}let Te=!1;function xe(){Te||(Te=!0,U(ye),W(ye,!0,e=>new be(e)))}xe();const Ae="KHR_draco_mesh_compression";class we{constructor(e){this.name=Ae,this.useNormalizedFlagFromAccessor=!0,this._loader=e,this.enabled=t.DracoDecoder.DefaultAvailable&&this._loader.isExtensionUsed(Ae)}dispose(){delete this.dracoDecoder,this._loader=null}_loadVertexDataAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(r,a)=>D(this,void 0,void 0,function*(){if(null!=n.mode&&4!==n.mode&&5!==n.mode)throw new Error(`${e}: Unsupported mode ${n.mode}`);const s={},i={},l=(e,t)=>{const r=a.attributes[e];if(null!=r&&(o._delayInfo=o._delayInfo||[],-1===o._delayInfo.indexOf(t)&&o._delayInfo.push(t),s[t]=r,this.useNormalizedFlagFromAccessor)){const o=q.TryGet(this._loader.gltf.accessors,n.attributes[e]);o&&(i[t]=o.normalized||!1)}};l("POSITION",t.VertexBuffer.PositionKind),l("NORMAL",t.VertexBuffer.NormalKind),l("TANGENT",t.VertexBuffer.TangentKind),l("TEXCOORD_0",t.VertexBuffer.UVKind),l("TEXCOORD_1",t.VertexBuffer.UV2Kind),l("TEXCOORD_2",t.VertexBuffer.UV3Kind),l("TEXCOORD_3",t.VertexBuffer.UV4Kind),l("TEXCOORD_4",t.VertexBuffer.UV5Kind),l("TEXCOORD_5",t.VertexBuffer.UV6Kind),l("JOINTS_0",t.VertexBuffer.MatricesIndicesKind),l("WEIGHTS_0",t.VertexBuffer.MatricesWeightsKind),l("COLOR_0",t.VertexBuffer.ColorKind);const u=q.Get(r,this._loader.gltf.bufferViews,a.bufferView);return u._dracoBabylonGeometry||(u._dracoBabylonGeometry=this._loader.loadBufferViewAsync(`/bufferViews/${u.index}`,u).then(r=>D(this,void 0,void 0,function*(){const a=this.dracoDecoder||t.DracoDecoder.Default,l=q.TryGet(this._loader.gltf.accessors,n.attributes.POSITION),u=this._loader.parent.alwaysComputeBoundingBox||o.skeleton||!l?null:Y(l);return yield a._decodeMeshToGeometryForGltfAsync(o.name,this._loader.babylonScene,r,s,i,u).catch(t=>{throw new Error(`${e}: ${t.message}`)})}))),yield u._dracoBabylonGeometry}))}}let Re=!1;function Ce(){Re||(Re=!0,U(Ae),W(Ae,!0,e=>new we(e)))}Ce();const Oe="KHR_gaussian_splatting",Me=.28209479177387814,ke=[0,3,5,7];function Ie(e){return e<=0?0:e>=255?255:e+.5|0}class Se{constructor(e){this.name=Oe,this._loader=e,this.enabled=this._loader.isExtensionUsed(Oe)}dispose(){this._loader=null}_loadMeshPrimitiveAsync(e,n,o,r,a,s){return X.LoadExtensionAsync(e,a,this.name,o=>D(this,void 0,void 0,function*(){if(null!=a.mode&&0!==a.mode)throw new Error(`${o}: Gaussian splatting primitives must use POINTS mode`);const r=this._loader,i=t=>{const n=a.attributes[t];if(null==n)return null;const o=q.Get(`${e}/attributes/${t}`,r.gltf.accessors,n);return r._loadFloatAccessorAsync(`/accessors/${o.index}`,o)},l=i("POSITION");if(!l)throw new Error(`${o}: Gaussian splatting primitive is missing the POSITION attribute`);let u=0;const c=[];for(let e=1;e<=3&&null!=a.attributes[`KHR_gaussian_splatting:SH_DEGREE_${e}_COEF_0`];e++){u=e;for(let t=0;t<ke[e];t++)c.push(`KHR_gaussian_splatting:SH_DEGREE_${e}_COEF_${t}`)}const d=r.babylonScene;d._blockEntityCollection=!!r._assetContainer;const h=new t.GaussianSplattingMesh(n,null,d);h._parentContainer=r._assetContainer,d._blockEntityCollection=!1,X.AddPointerMetadata(h,e),r.parent.onMeshLoadedObservable.notifyObservers(h),s(h);const m=d.getEngine().getCaps(),[p,_,f,g,v,y,...b]=yield Promise.all([l,i("KHR_gaussian_splatting:ROTATION"),i("KHR_gaussian_splatting:SCALE"),i("KHR_gaussian_splatting:OPACITY"),i("KHR_gaussian_splatting:SH_DEGREE_0_COEF_0"),i("COLOR_0"),...c.map(e=>i(e))]),T=p.length/3,x=y?y.length/T:0,A=new ArrayBuffer(32*T),w=new Float32Array(A),R=new Uint8Array(A);let C=null;if(u>0){const e=3*((u+1)*(u+1)-1),n=Math.ceil(e/16),o=m.maxTextureSize,r=Math.ceil(T/o);C=t.AllocateShBuffers(n,r*o*4*4)}for(let e=0;e<T;e++){const t=8*e,n=32*e,o=3*e;if(w[t+0]=p[o+0],w[t+1]=p[o+1],w[t+2]=p[o+2],w[t+3]=f?f[o+0]:1,w[t+4]=f?f[o+1]:1,w[t+5]=f?f[o+2]:1,v)R[n+24]=Ie(255*(.5+Me*v[o+0])),R[n+25]=Ie(255*(.5+Me*v[o+1])),R[n+26]=Ie(255*(.5+Me*v[o+2]));else if(y){const t=e*x;R[n+24]=Ie(255*y[t+0]),R[n+25]=Ie(255*y[t+1]),R[n+26]=Ie(255*y[t+2])}else R[n+24]=255,R[n+25]=255,R[n+26]=255;R[n+27]=g?Ie(255*g[e]):y&&x>=4?Ie(255*y[e*x+3]):255;const r=4*e,a=_?_[r+0]:0,s=_?_[r+1]:0,i=_?_[r+2]:0,l=_?_[r+3]:1;if(R[n+28]=Ie(127.5*l+127.5),R[n+29]=Ie(127.5*a+127.5),R[n+30]=Ie(127.5*s+127.5),R[n+31]=Ie(127.5*i+127.5),C){const t=16*e;for(let e=0;e<b.length;e++){const n=b[e];if(n)for(let r=0;r<3;r++){const a=3*e+r,s=15&a;C[a>>4][t+s]=Ie(128*n[o+r]+128)}}}}return yield h.updateDataAsync(A,null!=C?C:void 0,void 0,u||void 0),h}))}}let Fe=!1;function Le(){Fe||(Fe=!0,U(Oe),W(Oe,!0,e=>new Se(e)))}Le();const Ee="KHR_lights_punctual";class Ne{constructor(e){this.name=Ee,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ee)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,q.Assign(this._lights)}}loadNodeAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(r,a)=>D(this,void 0,void 0,function*(){return this._loader._allMaterialsDirtyRequired=!0,yield this._loader.loadNodeAsync(e,n,e=>{let n;const s=q.Get(r,this._lights,a.light),i=s.name||e.name;switch(this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer,s.type){case"directional":{const e=new t.DirectionalLight(i,t.Vector3.Backward(),this._loader.babylonScene);e.position.setAll(0),n=e;break}case"point":n=new t.PointLight(i,t.Vector3.Zero(),this._loader.babylonScene);break;case"spot":{const e=new t.SpotLight(i,t.Vector3.Zero(),t.Vector3.Backward(),0,1,this._loader.babylonScene);e.angle=2*(s.spot&&s.spot.outerConeAngle||Math.PI/4),e.innerAngle=2*(s.spot&&s.spot.innerConeAngle||0),n=e;break}default:throw this._loader.babylonScene._blockEntityCollection=!1,new Error(`${r}: Invalid light type (${s.type})`)}n._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,s._babylonLight=n,n.falloffType=t.Light.FALLOFF_GLTF,n.diffuse=s.color?t.Color3.FromArray(s.color):t.Color3.White(),n.intensity=null==s.intensity?1:s.intensity,n.range=null==s.range?Number.MAX_VALUE:s.range,n.parent=e,this._loader._babylonLights.push(n),X.AddPointerMetadata(n,r),o(e)})}))}}let Be=!1;function Ge(){Be||(Be=!0,U(Ee),W(Ee,!0,e=>new Ne(e)))}Ge();const Pe="EXT_lights_area";class $e{constructor(e){this.name=Pe,this._loader=e,this.enabled=this._loader.isExtensionUsed(Pe)}dispose(){this._loader=null,delete this._lights}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._lights=t.lights,q.Assign(this._lights)}}loadNodeAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(r,a)=>D(this,void 0,void 0,function*(){return this._loader._allMaterialsDirtyRequired=!0,yield this._loader.loadNodeAsync(e,n,e=>{var n;let s;const i=q.Get(r,this._lights,a.light),l=i.name||e.name;this._loader.babylonScene._blockEntityCollection=!!this._loader._assetContainer;const u=void 0!==i.size?i.size:1;switch(i.type){case"rect":{const e=void 0!==(null===(n=i.rect)||void 0===n?void 0:n.aspect)?i.rect.aspect*u:u,o=u;s=new t.RectAreaLight(l,t.Vector3.Zero(),e,o,this._loader.babylonScene);break}case"disk":{const e=Math.sqrt(u*u*.25*Math.PI);s=new t.RectAreaLight(l,t.Vector3.Zero(),e,e,this._loader.babylonScene);break}default:throw this._loader.babylonScene._blockEntityCollection=!1,new Error(`${r}: Invalid area light type (${i.type})`)}s._parentContainer=this._loader._assetContainer,this._loader.babylonScene._blockEntityCollection=!1,i._babylonLight=s,s.falloffType=t.Light.FALLOFF_GLTF,s.diffuse=i.color?t.Color3.FromArray(i.color):t.Color3.White(),s.intensity=null==i.intensity?1:i.intensity;const c=new t.TransformNode(`${l}_orientation`,this._loader.babylonScene);c.rotationQuaternion=t.Quaternion.RotationAxis(t.Vector3.Up(),Math.PI),c.parent=e,s.parent=c,this._loader._babylonLights.push(s),X.AddPointerMetadata(s,r),o(e)})}))}}let Ve=!1;function De(){Ve||(Ve=!0,U(Pe),W(Pe,!0,e=>new $e(e)))}De();const He="KHR_materials_pbrSpecularGlossiness";class Ke{constructor(e){this.name=He,this.order=200,this._loader=e,this.enabled=this._loader.isExtensionUsed(He)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialBasePropertiesAsync(e,t,n)),a.push(this._loadSpecularGlossinessPropertiesAsync(o,r,n)),this._loader.loadMaterialAlphaProperties(e,t,n),yield Promise.all(a).then(()=>{})}))}_loadSpecularGlossinessPropertiesAsync(e,n,o){const r=this._loader._getOrCreateMaterialAdapter(o),a=new Array;return r.configureSpecularGlossiness(),n.diffuseFactor?(r.baseColor=t.Color3.FromArray(n.diffuseFactor),o.alpha=n.diffuseFactor[3]):r.baseColor=t.Color3.White(),r.specularColor=n.specularFactor?t.Color3.FromArray(n.specularFactor):t.Color3.White(),r.glossiness=null==n.glossinessFactor?1:n.glossinessFactor,n.diffuseTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/diffuseTexture`,n.diffuseTexture,e=>{e.name=`${o.name} (Diffuse)`,r.baseColorTexture=e})),n.specularGlossinessTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/specularGlossinessTexture`,n.specularGlossinessTexture,e=>{e.name=`${o.name} (Specular Glossiness)`,r.specularColorTexture=e})),Promise.all(a).then(()=>{})}}let We=!1;function Ue(){We||(We=!0,U(He),W(He,!0,e=>new Ke(e)))}Ue();const je="KHR_materials_unlit";class ze{constructor(e){this.name=je,this.order=210,this._loader=e,this.enabled=this._loader.isExtensionUsed(je)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,()=>D(this,void 0,void 0,function*(){return yield this._loadUnlitPropertiesAsync(e,t,n)}))}_loadUnlitPropertiesAsync(e,n,o){const r=this._loader._getOrCreateMaterialAdapter(o),a=new Array,s=n.pbrMetallicRoughness;return s&&(s.baseColorFactor&&(r.baseColor=t.Color3.FromArray(s.baseColorFactor),r.geometryOpacity=s.baseColorFactor[3]),s.baseColorTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/baseColorTexture`,s.baseColorTexture,e=>{e.name=`${o.name} (Base Color)`,r.baseColorTexture=e}))),r.isUnlit=!0,n.doubleSided&&(r.backFaceCulling=!1,r.twoSidedLighting=!0),this._loader.loadMaterialAlphaProperties(e,n,o),Promise.all(a).then(()=>{})}}let qe=!1;function Ye(){qe||(qe=!0,U(je),W(je,!0,e=>new ze(e)))}Ye();const Xe="KHR_materials_clearcoat";class Qe{constructor(e){this.name=Xe,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(Xe)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadClearCoatPropertiesAsync(o,r,n)),yield Promise.all(a)}))}_loadClearCoatPropertiesAsync(e,t,n){const o=this._loader._getOrCreateMaterialAdapter(n),r=new Array;return o.configureCoat(),o.coatWeight=void 0!==t.clearcoatFactor?t.clearcoatFactor:0,o.coatRoughness=void 0!==t.clearcoatRoughnessFactor?t.clearcoatRoughnessFactor:0,t.clearcoatTexture&&r.push(this._loader.loadTextureInfoAsync(`${e}/clearcoatTexture`,t.clearcoatTexture,e=>{e.name=`${n.name} (ClearCoat)`,o.coatWeightTexture=e})),t.clearcoatRoughnessTexture&&(t.clearcoatRoughnessTexture.nonColorData=!0,r.push(this._loader.loadTextureInfoAsync(`${e}/clearcoatRoughnessTexture`,t.clearcoatRoughnessTexture,e=>{e.name=`${n.name} (ClearCoat Roughness)`,o.coatRoughnessTexture=e}))),t.clearcoatNormalTexture&&(t.clearcoatNormalTexture.nonColorData=!0,r.push(this._loader.loadTextureInfoAsync(`${e}/clearcoatNormalTexture`,t.clearcoatNormalTexture,e=>{var r;e.name=`${n.name} (ClearCoat Normal)`,o.geometryCoatNormalTexture=e,null!=(null===(r=t.clearcoatNormalTexture)||void 0===r?void 0:r.scale)&&(o.geometryCoatNormalTextureScale=t.clearcoatNormalTexture.scale)})),o.setNormalMapInversions(!n.getScene().useRightHandedSystem,n.getScene().useRightHandedSystem)),Promise.all(r).then(()=>{})}}let Je=!1;function Ze(){Je||(Je=!0,U(Xe),W(Xe,!0,e=>new Qe(e)))}Ze();const et="KHR_materials_coat";class tt{constructor(e){this.name=et,this.order=191,this.useOpenPBR=!1,this._loader=e,this.enabled=this._loader.isExtensionUsed(et)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),t.extensions&&t.extensions.KHR_materials_openpbr&&(this.useOpenPBR=!0),a.push(this._loadCoatPropertiesAsync(o,r,n)),yield Promise.all(a)}))}_loadCoatPropertiesAsync(e,n,o){var r,a;const s=this._loader._getOrCreateMaterialAdapter(o),i=new Array;s.configureCoat(),s.coatWeight=void 0!==n.coatFactor?n.coatFactor:0,s.coatRoughness=void 0!==n.coatRoughnessFactor?n.coatRoughnessFactor:0,n.coatTexture&&i.push(this._loader.loadTextureInfoAsync(`${e}/coatTexture`,n.coatTexture,e=>{e.name=`${o.name} (Coat)`,s.coatWeightTexture=e})),n.coatRoughnessTexture&&(n.coatRoughnessTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/coatRoughnessTexture`,n.coatRoughnessTexture,e=>{e.name=`${o.name} (Coat Roughness)`,s.coatRoughnessTexture=e}))),n.coatNormalTexture&&(n.coatNormalTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/coatNormalTexture`,n.coatNormalTexture,e=>{var t;e.name=`${o.name} (Coat Normal)`,s.geometryCoatNormalTexture=e,null!=(null===(t=n.coatNormalTexture)||void 0===t?void 0:t.scale)&&(s.geometryCoatNormalTextureScale=n.coatNormalTexture.scale)})),s.setNormalMapInversions(!o.getScene().useRightHandedSystem,o.getScene().useRightHandedSystem)),s.coatDarkening=void 0!==n.coatDarkeningFactor?n.coatDarkeningFactor:1,s.coatIor=void 0!==n.coatIor?n.coatIor:1.5;const l=t.Color3.White();void 0!==n.coatColorFactor&&l.fromArray(n.coatColorFactor),s.coatColor=l,n.coatColorTexture&&i.push(this._loader.loadTextureInfoAsync(`${e}/coatColorTexture`,n.coatColorTexture,e=>{e.name=`${o.name} (Coat Color)`,s.coatColorTexture=e}));const u=null!==(r=n.coatAnisotropyStrength)&&void 0!==r?r:0,c=null!==(a=n.coatAnisotropyRotation)&&void 0!==a?a:0;return s.coatRoughnessAnisotropy=u,s.geometryCoatTangentAngle=c,this.useOpenPBR||s.configureGltfStyleAnisotropy(!0),n.coatAnisotropyTexture&&(n.coatAnisotropyTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/coatAnisotropyTexture`,n.coatAnisotropyTexture,e=>{e.name=`${o.name} (Coat Anisotropy)`,s.geometryCoatTangentTexture=e}))),Promise.all(i).then(()=>{})}}let nt=!1;function ot(){nt||(nt=!0,U(et),W(et,!0,e=>new tt(e)))}ot();const rt="KHR_materials_iridescence";class at{constructor(e){this.name=rt,this.order=195,this._loader=e,this.enabled=this._loader.isExtensionUsed(rt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadIridescencePropertiesAsync(o,r,n)),yield Promise.all(a).then(()=>{})}))}_loadIridescencePropertiesAsync(e,t,n){var o,r,a,s,i;const l=this._loader._getOrCreateMaterialAdapter(n),u=new Array;return l.thinFilmWeight=null!==(o=t.iridescenceFactor)&&void 0!==o?o:0,l.thinFilmIor=null!==(a=null!==(r=t.iridescenceIor)&&void 0!==r?r:t.iridescenceIOR)&&void 0!==a?a:1.3,l.thinFilmThicknessMinimum=null!==(s=t.iridescenceThicknessMinimum)&&void 0!==s?s:100,l.thinFilmThicknessMaximum=null!==(i=t.iridescenceThicknessMaximum)&&void 0!==i?i:400,t.iridescenceTexture&&u.push(this._loader.loadTextureInfoAsync(`${e}/iridescenceTexture`,t.iridescenceTexture,e=>{e.name=`${n.name} (Iridescence)`,l.thinFilmWeightTexture=e})),t.iridescenceThicknessTexture&&u.push(this._loader.loadTextureInfoAsync(`${e}/iridescenceThicknessTexture`,t.iridescenceThicknessTexture,e=>{e.name=`${n.name} (Iridescence Thickness)`,l.thinFilmThicknessTexture=e})),Promise.all(u).then(()=>{})}}let st=!1;function it(){st||(st=!0,U(rt),W(rt,!0,e=>new at(e)))}it();const lt="KHR_materials_anisotropy";class ut{constructor(e){this.name=lt,this.order=195,this._loader=e,this.enabled=this._loader.isExtensionUsed(lt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadAnisotropyPropertiesAsync(o,r,n)),yield Promise.all(a)}))}_loadAnisotropyPropertiesAsync(e,t,n){return D(this,void 0,void 0,function*(){var o,r,a;const s=this._loader._getOrCreateMaterialAdapter(n),i=new Array,l=null!==(o=t.anisotropyStrength)&&void 0!==o?o:0,u=null!==(r=t.anisotropyRotation)&&void 0!==r?r:0;s.specularRoughnessAnisotropy=l,s.geometryTangentAngle=u;const c=null!==(a=t.extensions)&&void 0!==a?a:{};c.EXT_materials_anisotropy_openpbr&&c.EXT_materials_anisotropy_openpbr.openPbrAnisotropyEnabled||s.configureGltfStyleAnisotropy(!0),t.anisotropyTexture&&(t.anisotropyTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/anisotropyTexture`,t.anisotropyTexture,e=>{e.name=`${n.name} (Anisotropy Intensity)`,s.geometryTangentTexture=e}))),yield Promise.all(i)})}}let ct=!1;function dt(){ct||(ct=!0,U(lt),W(lt,!0,e=>new ut(e)))}dt();const ht="KHR_materials_emissive_strength";class mt{constructor(e){this.name=ht,this.order=170,this._loader=e,this.enabled=this._loader.isExtensionUsed(ht)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){return yield this._loader.loadMaterialPropertiesAsync(e,t,n),this._loadEmissiveProperties(o,r,n),yield Promise.resolve()}))}_loadEmissiveProperties(e,t,n){void 0!==t.emissiveStrength&&(this._loader._getOrCreateMaterialAdapter(n).emissionLuminance=t.emissiveStrength)}}let pt=!1;function _t(){pt||(pt=!0,U(ht),W(ht,!0,e=>new mt(e)))}_t();const ft="KHR_materials_sheen";class gt{constructor(e){this.name=ft,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(ft)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadSheenPropertiesAsync(o,r,n)),yield Promise.all(a).then(()=>{})}))}_loadSheenPropertiesAsync(e,n,o){const r=this._loader._getOrCreateMaterialAdapter(o),a=new Array;r.configureFuzz();const s=void 0!==n.sheenColorFactor?t.Color3.FromArray(n.sheenColorFactor):t.Color3.Black(),i=void 0!==n.sheenRoughnessFactor?n.sheenRoughnessFactor:0;return r.fuzzWeight=1,r.fuzzColor=s,r.fuzzRoughness=i,n.sheenColorTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/sheenColorTexture`,n.sheenColorTexture,e=>{e.name=`${o.name} (Sheen Color)`,r.fuzzColorTexture=e})),n.sheenRoughnessTexture&&(n.sheenRoughnessTexture.nonColorData=!0,a.push(this._loader.loadTextureInfoAsync(`${e}/sheenRoughnessTexture`,n.sheenRoughnessTexture,e=>{e.name=`${o.name} (Sheen Roughness)`,r.fuzzRoughnessTexture=e}))),Promise.all(a).then(()=>{})}}let vt=!1;function yt(){vt||(vt=!0,U(ft),W(ft,!0,e=>new gt(e)))}yt();const bt="KHR_materials_fuzz";class Tt{constructor(e){this.name=bt,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(bt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadFuzzPropertiesAsync(o,r,n)),yield Promise.all(a).then(()=>{})}))}_loadFuzzPropertiesAsync(e,n,o){const r=this._loader._getOrCreateMaterialAdapter(o),a=new Array;return r.configureFuzz(),r.fuzzWeight=void 0!==n.fuzzFactor?n.fuzzFactor:0,r.fuzzColor=void 0!==n.fuzzColorFactor?t.Color3.FromArray(n.fuzzColorFactor):t.Color3.White(),r.fuzzRoughness=void 0!==n.fuzzRoughnessFactor?n.fuzzRoughnessFactor:.5,n.fuzzTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/fuzzTexture`,n.fuzzTexture,e=>{e.name=`${o.name} (Fuzz)`,r.fuzzWeightTexture=e})),n.fuzzColorTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/fuzzColorTexture`,n.fuzzColorTexture,e=>{e.name=`${o.name} (Fuzz Color)`,r.fuzzColorTexture=e})),n.fuzzRoughnessTexture&&(n.fuzzRoughnessTexture.nonColorData=!0,a.push(this._loader.loadTextureInfoAsync(`${e}/fuzzRoughnessTexture`,n.fuzzRoughnessTexture,e=>{e.name=`${o.name} (Fuzz Roughness)`,r.fuzzRoughnessTexture=e}))),Promise.all(a).then(()=>{})}}let xt=!1;function At(){xt||(xt=!0,U(bt),W(bt,!0,e=>new Tt(e)))}At();const wt="KHR_materials_specular";class Rt{constructor(e){this.name=wt,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(wt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadSpecularPropertiesAsync(o,r,n));const s=this._loader._getOrCreateMaterialAdapter(n);return r.extensions&&r.extensions.EXT_materials_specular_edge_color&&r.extensions.EXT_materials_specular_edge_color.specularEdgeColorEnabled&&s.enableSpecularEdgeColor(!0),yield Promise.all(a).then(()=>{})}))}_loadSpecularPropertiesAsync(e,n,o){var r;const a=this._loader._getOrCreateMaterialAdapter(o),s=new Array;return a.specularWeight=null!==(r=n.specularFactor)&&void 0!==r?r:1,a.specularColor=void 0!==n.specularColorFactor?t.Color3.FromArray(n.specularColorFactor):new t.Color3(1,1,1),n.specularTexture&&(n.specularTexture.nonColorData=!0,s.push(this._loader.loadTextureInfoAsync(`${e}/specularTexture`,n.specularTexture,e=>{e.name=`${o.name} (Specular)`,a.specularWeightTexture=e}))),n.specularColorTexture&&s.push(this._loader.loadTextureInfoAsync(`${e}/specularColorTexture`,n.specularColorTexture,e=>{e.name=`${o.name} (Specular Color)`,a.specularColorTexture=e})),Promise.all(s).then(()=>{})}}let Ct=!1;function Ot(){Ct||(Ct=!0,U(wt),W(wt,!0,e=>new Rt(e)))}Ot();const Mt="KHR_materials_ior";class kt{constructor(e){this.name=Mt,this.order=180,this._loader=e,this.enabled=this._loader.isExtensionUsed(Mt)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadIorPropertiesAsync(o,r,n)),yield Promise.all(a).then(()=>{})}))}_loadIorPropertiesAsync(e,t,n){const o=this._loader._getOrCreateMaterialAdapter(n),r=void 0!==t.ior?t.ior:kt._DEFAULT_IOR;return o.specularIor=r,Promise.resolve()}}kt._DEFAULT_IOR=1.5;let It=!1;function St(){It||(It=!0,U(Mt),W(Mt,!0,e=>new kt(e)))}St();const Ft="KHR_materials_variants";class Lt{constructor(e){this.name=Ft,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ft)&&!this._loader.parent.skipMaterials}dispose(){this._loader=null}static GetAvailableVariants(e){const t=this._GetExtensionMetadata(e);return t?Object.keys(t.variants):[]}getAvailableVariants(e){return Lt.GetAvailableVariants(e)}static SelectVariant(e,t){const n=this._GetExtensionMetadata(e);if(!n)throw new Error(`Cannot select variant on a glTF mesh that does not have the ${Ft} extension`);const o=e=>{const t=n.variants[e];if(t)for(const e of t)e.mesh.material=e.material};if(t instanceof Array)for(const e of t)o(e);else o(t);n.lastSelected=t}selectVariant(e,t){Lt.SelectVariant(e,t)}static Reset(e){const t=this._GetExtensionMetadata(e);if(!t)throw new Error(`Cannot reset on a glTF mesh that does not have the ${Ft} extension`);for(const e of t.original)e.mesh.material=e.material;t.lastSelected=null}reset(e){Lt.Reset(e)}static GetLastSelectedVariant(e){const t=this._GetExtensionMetadata(e);if(!t)throw new Error(`Cannot get the last selected variant on a glTF mesh that does not have the ${Ft} extension`);return t.lastSelected}getLastSelectedVariant(e){return Lt.GetLastSelectedVariant(e)}static _GetExtensionMetadata(e){var t,n;return(null===(n=null===(t=null==e?void 0:e._internalMetadata)||void 0===t?void 0:t.gltf)||void 0===n?void 0:n[Ft])||null}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._variants=t.variants}}onReady(){var e;const t=this._loader.rootBabylonMesh;if(t){const n=this._loader.parent.extensionOptions[Ft];(null==n?void 0:n.defaultVariant)&&Lt.SelectVariant(t,n.defaultVariant),null===(e=null==n?void 0:n.onLoaded)||void 0===e||e.call(n,{get variants(){return Lt.GetAvailableVariants(t)},get selectedVariant(){const e=Lt.GetLastSelectedVariant(t);return e?Array.isArray(e)?e[0]:e:Lt.GetAvailableVariants(t)[0]},set selectedVariant(e){Lt.SelectVariant(t,e)}})}}_loadMeshPrimitiveAsync(e,n,o,r,a,s){return X.LoadExtensionAsync(e,a,this.name,(i,l)=>D(this,void 0,void 0,function*(){const u=new Array;return u.push(this._loader._loadMeshPrimitiveAsync(e,n,o,r,a,n=>{if(s(n),n instanceof t.Mesh){const t=X._GetDrawMode(e,a.mode),o=this._loader.rootBabylonMesh,r=o?o._internalMetadata=o._internalMetadata||{}:{},s=r.gltf=r.gltf||{},c=s[Ft]=s[Ft]||{lastSelected:null,original:[],variants:{}};c.original.push({mesh:n,material:n.material});for(let e=0;e<l.mappings.length;++e){const r=l.mappings[e],a=q.Get(`${i}/mappings/${e}/material`,this._loader.gltf.materials,r.material);u.push(this._loader._loadMaterialAsync(`#/materials/${r.material}`,a,n,t,e=>{for(let t=0;t<r.variants.length;++t){const a=r.variants[t],s=q.Get(`/extensions/${Ft}/variants/${a}`,this._variants,a);c.variants[s.name]=c.variants[s.name]||[],c.variants[s.name].push({mesh:n,material:e}),n.onClonedObservable.add(e=>{const t=e;let r,a=t;do{if(a=a.parent,!a)return;r=Lt._GetExtensionMetadata(a)}while(null===r);if(o&&r===Lt._GetExtensionMetadata(o)){a._internalMetadata={};for(const e in o._internalMetadata)a._internalMetadata[e]=o._internalMetadata[e];a._internalMetadata.gltf=[];for(const e in o._internalMetadata.gltf)a._internalMetadata.gltf[e]=o._internalMetadata.gltf[e];a._internalMetadata.gltf[Ft]={lastSelected:null,original:[],variants:{}};for(const e of r.original)a._internalMetadata.gltf[Ft].original.push({mesh:e.mesh,material:e.material});for(const e in r.variants)if(Object.prototype.hasOwnProperty.call(r.variants,e)){a._internalMetadata.gltf[Ft].variants[e]=[];for(const t of r.variants[e])a._internalMetadata.gltf[Ft].variants[e].push({mesh:t.mesh,material:t.material})}r=a._internalMetadata.gltf[Ft]}for(const e of r.original)e.mesh===n&&(e.mesh=t);for(const e of r.variants[s.name])e.mesh===n&&(e.mesh=t)})}}))}}})),yield Promise.all(u).then(([e])=>e)}))}}let Et=!1;function Nt(){Et||(Et=!0,U(Ft),W(Ft,!0,e=>new Lt(e)))}Nt();class Bt{static _GetDefaultOptions(){return{renderSize:1024,samples:4,lodGenerationScale:1,lodGenerationOffset:-4,renderTargetTextureType:t.Constants.TEXTURETYPE_HALF_FLOAT,generateMipmaps:!0}}constructor(e,n){this._opaqueRenderTarget=null,this._opaqueMeshesCache=[],this._transparentMeshesCache=[],this._materialObservers={},this._newMeshObserver=null,this._removedMeshObserver=null,this._disposed=!1,this._materialImpls=[],this._adapterCache=new WeakMap,this._translucentMaterialIndices=new Map,this._opaqueOnlySubMeshes=new Map,this._savedSubMeshes=new Map,this._options=Object.assign(Object.assign({},Bt._GetDefaultOptions()),e),this._scene=n,this._scene._transmissionHelper=this,this.onErrorObservable=new t.Observable,this._scene.onDisposeObservable.addOnce(()=>{this.dispose()}),this._parseScene(),this._setupRenderTargets()}addMaterialImpl(e){this._materialImpls.some(t=>t.materialClass===e.materialClass)||this._materialImpls.push(e)}updateOptions(e){if(!Object.keys(e).filter(t=>this._options[t]!==e[t]).length)return;const t=Object.assign(Object.assign({},this._options),e),n=this._options;this._options=t,t.renderSize===n.renderSize&&t.renderTargetTextureType===n.renderTargetTextureType&&t.generateMipmaps===n.generateMipmaps&&this._opaqueRenderTarget?(this._opaqueRenderTarget.samples=t.samples,this._opaqueRenderTarget.lodGenerationScale=t.lodGenerationScale,this._opaqueRenderTarget.lodGenerationOffset=t.lodGenerationOffset):this._setupRenderTargets()}getOpaqueTarget(){return this._opaqueRenderTarget}_getOrCreateAdapter(e){let t=this._adapterCache.get(e);if(!t)for(const n of this._materialImpls)if(e instanceof n.materialClass){t=new n.adapterClass(e),this._adapterCache.set(e,t);break}return t}_classifyMeshMaterials(e){const n=e.material;if(!n)return"opaque";if(!(n instanceof t.MultiMaterial)){const e=this._getOrCreateAdapter(n);return e&&e.isTranslucent()?(e.refractionBackgroundTexture=this._opaqueRenderTarget,"transparent"):"opaque"}let o=!1,r=!1;const a=new Set;for(let e=0;e<n.subMaterials.length;e++){const t=n.subMaterials[e];if(!t){r=!0;continue}const s=this._getOrCreateAdapter(t);s&&s.isTranslucent()?(s.refractionBackgroundTexture=this._opaqueRenderTarget,o=!0,a.add(e)):r=!0}return o&&r?(this._translucentMaterialIndices.set(e,a),this._rebuildOpaqueOnlySubMeshes(e,a),"mixed"):(this._translucentMaterialIndices.delete(e),this._opaqueOnlySubMeshes.delete(e),o?"transparent":"opaque")}_rebuildOpaqueOnlySubMeshes(e,t){e.subMeshes&&this._opaqueOnlySubMeshes.set(e,e.subMeshes.filter(e=>!t.has(e.materialIndex)))}_addMesh(e){this._materialObservers[e.uniqueId]=e.onMaterialChangedObservable.add(this._onMeshMaterialChanged.bind(this)),t.Tools.SetImmediate(()=>{!this._disposed&&e.material&&("transparent"===this._classifyMeshMaterials(e)?-1===this._transparentMeshesCache.indexOf(e)&&this._transparentMeshesCache.push(e):-1===this._opaqueMeshesCache.indexOf(e)&&this._opaqueMeshesCache.push(e))})}_removeMesh(e){e.onMaterialChangedObservable.remove(this._materialObservers[e.uniqueId]),delete this._materialObservers[e.uniqueId];let t=this._transparentMeshesCache.indexOf(e);-1!==t&&this._transparentMeshesCache.splice(t,1),t=this._opaqueMeshesCache.indexOf(e),-1!==t&&this._opaqueMeshesCache.splice(t,1),this._translucentMaterialIndices.delete(e),this._opaqueOnlySubMeshes.delete(e)}_parseScene(){this._scene.meshes.forEach(this._addMesh.bind(this)),this._newMeshObserver=this._scene.onNewMeshAddedObservable.add(this._addMesh.bind(this)),this._removedMeshObserver=this._scene.onMeshRemovedObservable.add(this._removeMesh.bind(this))}_onMeshMaterialChanged(e){const t=this._transparentMeshesCache.indexOf(e),n=this._opaqueMeshesCache.indexOf(e);"transparent"===this._classifyMeshMaterials(e)?-1!==n?(this._opaqueMeshesCache.splice(n,1),this._transparentMeshesCache.push(e)):-1===t&&this._transparentMeshesCache.push(e):-1!==t?(this._transparentMeshesCache.splice(t,1),this._opaqueMeshesCache.push(e)):-1===n&&this._opaqueMeshesCache.push(e)}_isRenderTargetValid(){var e;return null!==(null===(e=this._opaqueRenderTarget)||void 0===e?void 0:e.getInternalTexture())}_setupRenderTargets(){var e,n;let o;this._opaqueRenderTarget&&this._opaqueRenderTarget.dispose(),this._opaqueRenderTarget=new t.RenderTargetTexture("opaqueSceneTexture",this._options.renderSize,this._scene,this._options.generateMipmaps,void 0,this._options.renderTargetTextureType),this._opaqueRenderTarget.ignoreCameraViewport=!0,this._opaqueRenderTarget.renderList=this._opaqueMeshesCache,this._opaqueRenderTarget.forceLayerMaskCheck=!0,this._opaqueRenderTarget.clearColor=null!==(n=null===(e=this._options.clearColor)||void 0===e?void 0:e.clone())&&void 0!==n?n:this._scene.clearColor.clone(),this._opaqueRenderTarget.clearColor.a=0,this._opaqueRenderTarget.gammaSpace=!1,this._opaqueRenderTarget.lodGenerationScale=this._options.lodGenerationScale,this._opaqueRenderTarget.lodGenerationOffset=this._options.lodGenerationOffset,this._opaqueRenderTarget.samples=this._options.samples,this._opaqueRenderTarget.renderSprites=!0,this._opaqueRenderTarget.renderParticles=!0,this._opaqueRenderTarget.disableImageProcessing=!0,this._opaqueRenderTarget.onBeforeBindObservable.add(e=>{o=this._scene.environmentIntensity,this._scene.environmentIntensity=1,this._options.clearColor?e.clearColor.copyFrom(this._options.clearColor):this._scene.clearColor.toLinearSpaceToRef(e.clearColor,this._scene.getEngine().useExactSrgbConversions),e.clearColor.a=0;const t=this._opaqueOnlySubMeshes.entries();for(let e=t.next();!e.done;e=t.next()){const t=e.value[0],n=e.value[1];t.subMeshes&&(this._savedSubMeshes.set(t,t.subMeshes),t.subMeshes=n)}}),this._opaqueRenderTarget.onAfterUnbindObservable.add(()=>{this._scene.environmentIntensity=o;const e=this._savedSubMeshes.entries();for(let t=e.next();!t.done;t=e.next())t.value[0].subMeshes=t.value[1];this._savedSubMeshes.clear()});for(const e of this._transparentMeshesCache)e.material&&this._classifyMeshMaterials(e);const r=this._translucentMaterialIndices.entries();for(let e=r.next();!e.done;e=r.next()){const t=e.value[0];t.material&&this._classifyMeshMaterials(t)}}dispose(){var e,t;this._disposed=!0,null===(e=this._newMeshObserver)||void 0===e||e.remove(),null===(t=this._removedMeshObserver)||void 0===t||t.remove(),this._newMeshObserver=null,this._removedMeshObserver=null;const n=[...this._transparentMeshesCache,...this._opaqueMeshesCache];for(const e of n){const t=this._materialObservers[e.uniqueId];t&&(t.remove(),delete this._materialObservers[e.uniqueId])}for(const e of this._scene.meshes){const t=this._materialObservers[e.uniqueId];t&&(t.remove(),delete this._materialObservers[e.uniqueId])}this._materialObservers={},this._scene._transmissionHelper=void 0,this._opaqueRenderTarget&&(this._opaqueRenderTarget.dispose(),this._opaqueRenderTarget=null),this._transparentMeshesCache=[],this._opaqueMeshesCache=[],this._translucentMaterialIndices.clear(),this._opaqueOnlySubMeshes.clear(),this._savedSubMeshes.clear()}}function Gt(e,t){if(e.parent.dontUseTransmissionHelper)return;const n=t.getScene()._transmissionHelper,o=null!=n?n:new Bt({},t.getScene());for(const t of Array.from(e._pbrMaterialImpls.values()))o.addMaterialImpl(t);n&&!n._isRenderTargetValid()&&n._setupRenderTargets()}const Pt="KHR_materials_transmission";class $t{constructor(e){this.name=Pt,this.order=175,this._loader=e,this.enabled=this._loader.isExtensionUsed(Pt),this.enabled&&(e.parent.transparencyAsCoverage=!0)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadTransparentPropertiesAsync(o,t,n,r)),yield Promise.all(a).then(()=>{})}))}_loadTransparentPropertiesAsync(e,t,n,o){const r=this._loader._getOrCreateMaterialAdapter(n),a=void 0!==o.transmissionFactor?o.transmissionFactor:0;if(0===a||!r)return Promise.resolve();r.configureTransmission(),r.transmissionWeight=a,a>0&&Gt(this._loader,n);let s=Promise.resolve(null);return o.transmissionTexture&&(o.transmissionTexture.nonColorData=!0,s=this._loader.loadTextureInfoAsync(`${e}/transmissionTexture`,o.transmissionTexture,e=>{e.name=`${n.name} (Transmission)`,r.transmissionWeightTexture=e})),s.then(()=>{})}}let Vt=!1;function Dt(){Vt||(Vt=!0,U(Pt),W(Pt,!0,e=>new $t(e)))}Dt();const Ht="KHR_materials_diffuse_transmission";class Kt{constructor(e){this.name=Ht,this.order=174,this._loader=e,this.enabled=this._loader.isExtensionUsed(Ht),this.enabled&&(e.parent.transparencyAsCoverage=!0)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadTranslucentPropertiesAsync(o,t,n,r)),yield Promise.all(a).then(()=>{})}))}_loadTranslucentPropertiesAsync(e,n,o,r){var a;const s=this._loader._getOrCreateMaterialAdapter(o);s.configureSubsurface(),s.subsurfaceWeight=null!==(a=r.diffuseTransmissionFactor)&&void 0!==a?a:0,s.subsurfaceWeight>0&&Gt(this._loader,o),s.diffuseTransmissionTint=void 0!==r.diffuseTransmissionColorFactor?t.Color3.FromArray(r.diffuseTransmissionColorFactor):t.Color3.White();const i=new Array;return r.diffuseTransmissionTexture&&(r.diffuseTransmissionTexture.nonColorData=!0,i.push(this._loader.loadTextureInfoAsync(`${e}/diffuseTransmissionTexture`,r.diffuseTransmissionTexture).then(e=>{e.name=`${o.name} (Diffuse Transmission)`,s.subsurfaceWeightTexture=e}))),r.diffuseTransmissionColorTexture&&i.push(this._loader.loadTextureInfoAsync(`${e}/diffuseTransmissionColorTexture`,r.diffuseTransmissionColorTexture).then(e=>{e.name=`${o.name} (Diffuse Transmission Color)`,s.diffuseTransmissionTintTexture=e})),Promise.all(i).then(()=>{})}}let Wt=!1;function Ut(){Wt||(Wt=!0,U(Ht),W(Ht,!0,e=>new Kt(e)))}Ut();const jt="KHR_materials_volume";class zt{constructor(e){this.name=jt,this.order=173,this._loader=e,this.enabled=this._loader.isExtensionUsed(jt),this.enabled&&this._loader._disableInstancedMesh++}dispose(){this.enabled&&this._loader._disableInstancedMesh--,this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadVolumePropertiesAsync(o,t,n,r)),yield Promise.all(a).then(()=>{})}))}_loadVolumePropertiesAsync(e,n,o,r){var a;const s=this._loader._getOrCreateMaterialAdapter(o);if(0===s.transmissionWeight&&0===s.subsurfaceWeight||!r.thicknessFactor)return Promise.resolve();s.geometryThinWalled=!1;const i=void 0!==r.attenuationDistance?r.attenuationDistance:Number.MAX_VALUE,l=void 0!==r.attenuationColor&&3==r.attenuationColor.length?t.Color3.FromArray(r.attenuationColor):t.Color3.White();s.configureVolume(),s.transmissionColor=l,s.transmissionDepth=i,s.volumeThickness=null!==(a=r.thicknessFactor)&&void 0!==a?a:0;const u=new Array;return r.thicknessTexture&&(r.thicknessTexture.nonColorData=!0,u.push(this._loader.loadTextureInfoAsync(`${e}/thicknessTexture`,r.thicknessTexture,e=>{e.name=`${o.name} (Thickness)`,s.volumeThicknessTexture=e}))),Promise.all(u).then(()=>{})}}let qt=!1;function Yt(){qt||(qt=!0,U(jt),W(jt,!0,e=>new zt(e)))}Yt();const Xt="KHR_materials_volume_scatter";class Qt{constructor(e){this.name=Xt,this.order=172,this._loader=e,this.enabled=this._loader.isExtensionUsed(Xt),this.enabled&&this._loader._disableInstancedMesh++}dispose(){this.enabled&&this._loader._disableInstancedMesh--,this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadVolumePropertiesAsync(o,t,n,r)),yield Promise.all(a).then(()=>{})}))}_loadVolumePropertiesAsync(e,n,o,r){const a=this._loader._getOrCreateMaterialAdapter(o);if(0===a.transmissionWeight&&0===a.subsurfaceWeight||a.geometryThinWalled)return Promise.resolve();const s=void 0!==r.multiscatterColorFactor&&3==r.multiscatterColorFactor.length?t.Color3.FromArray(r.multiscatterColorFactor):t.Color3.Black(),i=void 0!==r.scatterAnisotropy?r.scatterAnisotropy:0;let l=Promise.resolve(null);r.multiscatterColorTexture&&(r.multiscatterColorTexture.nonColorData=!0,l=this._loader.loadTextureInfoAsync(`${e}/multiscatterColorTexture`,r.multiscatterColorTexture,e=>{e.name=`${o.name} (Scatter Color)`,a.transmissionWeight>0&&(a.transmissionScatterTexture=e),a.subsurfaceWeight>0&&(a.subsurfaceColorTexture=e)}));const u=new t.Vector3(-Math.log(a.transmissionColor.r),-Math.log(a.transmissionColor.g),-Math.log(a.transmissionColor.b));if(u.scaleInPlace(1/Math.max(a.transmissionDepth,1e-6)),a.transmissionWeight>0){const e=function(e){const n=new t.Vector3(e.r,e.g,e.b),o=new t.Vector3(4.09712,4.09712,4.09712);o.addInPlace(new t.Vector3(4.20863,4.20863,4.20863).multiplyInPlace(n));const r=new t.Vector3(9.59217,9.59217,9.59217);return r.addInPlace(new t.Vector3(41.6808,41.6808,41.6808).multiplyInPlace(n)),r.addInPlace(new t.Vector3(17.7126,17.7126,17.7126).multiplyInPlace(n.multiply(n))),o.subtractInPlace(new t.Vector3(Math.sqrt(r.x),Math.sqrt(r.y),Math.sqrt(r.z))),new t.Vector3(1,1,1).subtract(o.multiply(o))}(s),n=u.multiply(e);n.scaleInPlace(a.transmissionDepth),a.transmissionScatter.set(n.x,n.y,n.z),a.transmissionScatterAnisotropy=i}if(a.subsurfaceWeight>0){a.subsurfaceScatterAnisotropy=i,a.subsurfaceColor=s;const e=new t.Vector3(0!==u.x?1/u.x:1,0!==u.y?1/u.y:1,0!==u.z?1/u.z:1);a.subsurfaceRadius=Math.max(e.x,e.y,e.z),a.subsurfaceRadiusScale=new t.Color3(e.x/a.subsurfaceRadius,e.y/a.subsurfaceRadius,e.z/a.subsurfaceRadius)}return l.then(()=>{})}}let Jt=!1;function Zt(){Jt||(Jt=!0,U(Xt),W(Xt,!0,e=>new Qt(e)))}Zt();const en="KHR_materials_dispersion";class tn{constructor(e){this.name=en,this.order=174,this._loader=e,this.enabled=this._loader.isExtensionUsed(en)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadDispersionPropertiesAsync(o,t,n,r)),yield Promise.all(a).then(()=>{})}))}_loadDispersionPropertiesAsync(e,t,n,o){const r=this._loader._getOrCreateMaterialAdapter(n);return 0!=r.transmissionWeight&&o.dispersion?(r.transmissionDispersionAbbeNumber=20,r.transmissionDispersionScale=o.dispersion,Promise.resolve()):Promise.resolve()}}let nn=!1;function on(){nn||(nn=!0,U(en),W(en,!0,e=>new tn(e)))}on();const rn="KHR_materials_diffuse_roughness";class an{constructor(e){this.name=rn,this.order=190,this._loader=e,this.enabled=this._loader.isExtensionUsed(rn)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=new Array;return a.push(this._loader.loadMaterialPropertiesAsync(e,t,n)),a.push(this._loadDiffuseRoughnessPropertiesAsync(o,r,n)),yield Promise.all(a).then(()=>{})}))}_loadDiffuseRoughnessPropertiesAsync(e,t,n){var o;const r=this._loader._getOrCreateMaterialAdapter(n),a=new Array;return r.baseDiffuseRoughness=null!==(o=t.diffuseRoughnessFactor)&&void 0!==o?o:0,t.diffuseRoughnessTexture&&a.push(this._loader.loadTextureInfoAsync(`${e}/diffuseRoughnessTexture`,t.diffuseRoughnessTexture,e=>{e.name=`${n.name} (Diffuse Roughness)`,r.baseDiffuseRoughnessTexture=e})),Promise.all(a).then(()=>{})}}let sn=!1;function ln(){sn||(sn=!0,U(rn),W(rn,!0,e=>new an(e)))}ln();const un="KHR_mesh_quantization";class cn{constructor(e){this.name=un,this.enabled=e.isExtensionUsed(un)}dispose(){}}let dn=!1;function hn(){dn||(dn=!0,U(un),W(un,!0,e=>new cn(e)))}hn();const mn="KHR_texture_basisu";class pn{constructor(e){this.name=mn,this._loader=e,this.enabled=e.isExtensionUsed(mn)}dispose(){this._loader=null}_loadTextureAsync(e,t,n){return X.LoadExtensionAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){const a=null==t.sampler?X.DefaultSampler:q.Get(`${e}/sampler`,this._loader.gltf.samplers,t.sampler),s=q.Get(`${o}/source`,this._loader.gltf.images,r.source);return yield this._loader._createTextureAsync(e,a,s,e=>{n(e)},t._textureInfo.nonColorData?{useRGBAIfASTCBC7NotAvailableWhenUASTC:!0}:void 0,!t._textureInfo.nonColorData)}))}}let _n=!1;function fn(){_n||(_n=!0,U(mn),W(mn,!0,e=>new pn(e)))}fn();const gn="KHR_texture_transform";class vn{constructor(e){this.name=gn,this._loader=e,this.enabled=this._loader.isExtensionUsed(gn)}dispose(){this._loader=null}loadTextureInfoAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(r,a)=>D(this,void 0,void 0,function*(){return yield this._loader.loadTextureInfoAsync(e,n,e=>{if(!(e instanceof t.Texture))throw new Error(`${r}: Texture type not supported`);a.offset&&(e.uOffset=a.offset[0],e.vOffset=a.offset[1]),e.uRotationCenter=0,e.vRotationCenter=0,a.rotation&&(e.wAng=-a.rotation),a.scale&&(e.uScale=a.scale[0],e.vScale=a.scale[1]),null!=a.texCoord&&(e.coordinatesIndex=a.texCoord),o(e)})}))}}let yn=!1;function bn(){yn||(yn=!0,U(gn),W(gn,!0,e=>new vn(e)))}bn();const Tn="KHR_xmp_json_ld";class xn{constructor(e){this.name=Tn,this.order=100,this._loader=e,this.enabled=this._loader.isExtensionUsed(Tn)}dispose(){this._loader=null}onLoading(){var e,t,n;if(null===this._loader.rootBabylonMesh)return;const o=null===(e=this._loader.gltf.extensions)||void 0===e?void 0:e.KHR_xmp_json_ld,r=null===(n=null===(t=this._loader.gltf.asset)||void 0===t?void 0:t.extensions)||void 0===n?void 0:n.KHR_xmp_json_ld;if(o&&r){const e=+r.packet;o.packets&&e<o.packets.length&&(this._loader.rootBabylonMesh.metadata=this._loader.rootBabylonMesh.metadata||{},this._loader.rootBabylonMesh.metadata.xmp=o.packets[e])}}}let An=!1;function wn(){An||(An=!0,U(Tn),W(Tn,!0,e=>new xn(e)))}wn();const Rn="KHR_animation_pointer";class Cn{constructor(e){this.name=Rn,this._loader=e,this._pathToObjectConverter=G(this._loader.gltf)}get enabled(){return this._loader.isExtensionUsed(Rn)}dispose(){this._loader=null,delete this._pathToObjectConverter}_loadAnimationChannelAsync(e,n,o,r,a){var s;const i=null===(s=r.target.extensions)||void 0===s?void 0:s.KHR_animation_pointer;if(!i||!this._pathToObjectConverter)return null;"pointer"!==r.target.path&&t.Logger.Warn(`${e}/target/path: Value (${r.target.path}) must be (pointer) when using the ${this.name} extension`),null!=r.target.node&&t.Logger.Warn(`${e}/target/node: Value (${r.target.node}) must not be present when using the ${this.name} extension`);const l=`${e}/extensions/${this.name}`,u=i.pointer;if(!u)throw new Error(`${l}: Pointer is missing`);try{const t=this._pathToObjectConverter.convert(u);if(!t.info.interpolation)throw new Error(`${l}/pointer: Interpolation is missing`);return this._loader._loadAnimationChannelFromTargetInfoAsync(e,n,o,r,{object:t.object,info:t.info.interpolation},a)}catch(e){return t.Logger.Warn(`${l}/pointer: Invalid pointer (${u}) skipped`),null}}}let On=!1;function Mn(){On||(On=!0,U(Rn),W(Rn,!0,e=>new Cn(e)))}function kn(e,n,o,r){return t.Vector3.FromArray(n,o).scaleInPlace(r)}function In(e,n,o,r){return t.Quaternion.FromArray(n,o).scaleInPlace(r)}function Sn(e,t,n,o){const r=new Array(e._numMorphTargets);for(let e=0;e<r.length;e++)r[e]=t[n++]*o;return r}class Fn{constructor(e,t,n,o){this.type=e,this.name=t,this.getValue=n,this.getStride=o}_buildAnimation(e,n,o){const r=new t.Animation(e,this.name,n,this.type);return r.setKeys(o,!0),r}}class Ln extends Fn{buildAnimations(e,t,n,o){const r=[];return r.push({babylonAnimatable:e._babylonTransformNode,babylonAnimation:this._buildAnimation(t,n,o)}),r}}class En extends Fn{buildAnimations(e,n,o,r){const a=[];if(e._numMorphTargets)for(let s=0;s<e._numMorphTargets;s++){const i=new t.Animation(`${n}_${s}`,this.name,o,this.type);if(i.setKeys(r.map(e=>({frame:e.frame,inTangent:e.inTangent?e.inTangent[s]:void 0,value:e.value[s],outTangent:e.outTangent?e.outTangent[s]:void 0,interpolation:e.interpolation})),!0),e._primitiveBabylonMeshes)for(const t of e._primitiveBabylonMeshes)if(t.morphTargetManager){const e=t.morphTargetManager.getTarget(s),n=i.clone();e.animations.push(n),a.push({babylonAnimatable:e,babylonAnimation:n})}}return a}}let Nn=!1;function Bn(){Nn||(Nn=!0,$("/nodes/{}/translation",[new Ln(t.Animation.ANIMATIONTYPE_VECTOR3,"position",kn,()=>3)]),$("/nodes/{}/rotation",[new Ln(t.Animation.ANIMATIONTYPE_QUATERNION,"rotationQuaternion",In,()=>4)]),$("/nodes/{}/scale",[new Ln(t.Animation.ANIMATIONTYPE_VECTOR3,"scaling",kn,()=>3)]),$("/nodes/{}/weights",[new En(t.Animation.ANIMATIONTYPE_FLOAT,"influence",Sn,e=>e._numMorphTargets)]))}var Gn={__proto__:null,AnimationPropertyInfo:Fn,RegisterGLTFLoaderAnimation:Bn,TransformNodeAnimationPropertyInfo:Ln,WeightAnimationPropertyInfo:En,getQuaternion:In,getVector3:kn,getWeights:Sn};function Pn(e,n,o,r){return t.Color3.FromArray(n,o).scale(r)}function $n(e,t,n,o){return t[n+3]*o}function Vn(e,t,n,o){return t[n]*o}function Dn(e,t,n,o){return-t[n]*o}function Hn(e,t,n,o){return t[n+1]*o}function Kn(e,t,n,o){return t[n]*o*2}function Wn(e){return{scale:[new jn(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.uScale`,Vn,()=>2),new jn(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.vScale`,Hn,()=>2)],offset:[new jn(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.uOffset`,Vn,()=>2),new jn(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.vOffset`,Hn,()=>2)],rotation:[new jn(t.Animation.ANIMATIONTYPE_FLOAT,`${e}.wAng`,Dn,()=>1)]}}class Un extends Fn{buildAnimations(e,t,n,o){return[{babylonAnimatable:e._babylonCamera,babylonAnimation:this._buildAnimation(t,n,o)}]}}class jn extends Fn{buildAnimations(e,t,n,o){const r=[];for(const a in e._data)r.push({babylonAnimatable:e._data[a].babylonMaterial,babylonAnimation:this._buildAnimation(t,n,o)});return r}}class zn extends Fn{buildAnimations(e,t,n,o){return[{babylonAnimatable:e._babylonLight,babylonAnimation:this._buildAnimation(t,n,o)}]}}class qn extends Fn{buildAnimations(e,t,n,o){return e._primitiveBabylonMeshes?e._primitiveBabylonMeshes.map(e=>({babylonAnimatable:e,babylonAnimation:this._buildAnimation(t,n,o)})):[]}}let Yn=!1;!function(){if(Yn)return;Yn=!0,Bn(),$("/cameras/{}/orthographic/xmag",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"orthoLeft",Dn,()=>1),new Un(t.Animation.ANIMATIONTYPE_FLOAT,"orthoRight",Hn,()=>1)]),$("/cameras/{}/orthographic/ymag",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"orthoBottom",Dn,()=>1),new Un(t.Animation.ANIMATIONTYPE_FLOAT,"orthoTop",Hn,()=>1)]),$("/cameras/{}/orthographic/zfar",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"maxZ",Vn,()=>1)]),$("/cameras/{}/orthographic/znear",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"minZ",Vn,()=>1)]),$("/cameras/{}/perspective/yfov",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"fov",Vn,()=>1)]),$("/cameras/{}/perspective/zfar",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"maxZ",Vn,()=>1)]),$("/cameras/{}/perspective/znear",[new Un(t.Animation.ANIMATIONTYPE_FLOAT,"minZ",Vn,()=>1)]),$("/materials/{}/pbrMetallicRoughness/baseColorFactor",[new jn(t.Animation.ANIMATIONTYPE_COLOR3,"albedoColor",Pn,()=>4),new jn(t.Animation.ANIMATIONTYPE_FLOAT,"alpha",$n,()=>4)]),$("/materials/{}/pbrMetallicRoughness/metallicFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"metallic",Vn,()=>1)]),$("/materials/{}/pbrMetallicRoughness/metallicFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"roughness",Vn,()=>1)]);const e=Wn("albedoTexture");$("/materials/{}/pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/scale",e.scale),$("/materials/{}/pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/offset",e.offset),$("/materials/{}/pbrMetallicRoughness/baseColorTexture/extensions/KHR_texture_transform/rotation",e.rotation);const n=Wn("metallicTexture");$("//materials/{}/pbrMetallicRoughness/metallicRoughnessTexture/scale",n.scale),$("//materials/{}/pbrMetallicRoughness/metallicRoughnessTexture/offset",n.offset),$("//materials/{}/pbrMetallicRoughness/metallicRoughnessTexture/rotation",n.rotation),$("/materials/{}/emissiveFactor",[new jn(t.Animation.ANIMATIONTYPE_COLOR3,"emissiveColor",Pn,()=>3)]);const o=Wn("bumpTexture");$("/materials/{}/normalTexture/scale",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"bumpTexture.level",Vn,()=>1)]),$("/materials/{}/normalTexture/extensions/KHR_texture_transform/scale",o.scale),$("/materials/{}/normalTexture/extensions/KHR_texture_transform/offset",o.offset),$("/materials/{}/normalTexture/extensions/KHR_texture_transform/rotation",o.rotation),$("/materials/{}/occlusionTexture/strength",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"ambientTextureStrength",Vn,()=>1)]);const r=Wn("ambientTexture");$("/materials/{}/occlusionTexture/extensions/KHR_texture_transform/scale",r.scale),$("/materials/{}/occlusionTexture/extensions/KHR_texture_transform/offset",r.offset),$("/materials/{}/occlusionTexture/extensions/KHR_texture_transform/rotation",r.rotation);const a=Wn("emissiveTexture");$("/materials/{}/emissiveTexture/extensions/KHR_texture_transform/scale",a.scale),$("/materials/{}/emissiveTexture/extensions/KHR_texture_transform/offset",a.offset),$("/materials/{}/emissiveTexture/extensions/KHR_texture_transform/rotation",a.rotation),$("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyStrength",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"anisotropy.intensity",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyRotation",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"anisotropy.angle",Vn,()=>1)]);const s=Wn("anisotropy.texture");$("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyTexture/extensions/KHR_texture_transform/scale",s.scale),$("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyTexture/extensions/KHR_texture_transform/offset",s.offset),$("/materials/{}/extensions/KHR_materials_anisotropy/anisotropyTexture/extensions/KHR_texture_transform/rotation",s.rotation),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"clearCoat.intensity",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"clearCoat.roughness",Vn,()=>1)]);const i=Wn("clearCoat.texture");$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatTexture/extensions/KHR_texture_transform/scale",i.scale),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatTexture/extensions/KHR_texture_transform/offset",i.offset),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatTexture/extensions/KHR_texture_transform/rotation",i.rotation);const l=Wn("clearCoat.bumpTexture");$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/scale",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"clearCoat.bumpTexture.level",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/scale",l.scale),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/offset",l.offset),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatNormalTexture/extensions/KHR_texture_transform/rotation",l.rotation);const u=Wn("clearCoat.textureRoughness");$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessTexture/extensions/KHR_texture_transform/scale",u.scale),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessTexture/extensions/KHR_texture_transform/offset",u.offset),$("/materials/{}/extensions/KHR_materials_clearcoat/clearcoatRoughnessTexture/extensions/KHR_texture_transform/rotation",u.rotation),$("/materials/{}/extensions/KHR_materials_dispersion/dispersionFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.dispersion",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_emissive_strength/emissiveStrength",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"emissiveIntensity",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_ior/ior",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"indexOfRefraction",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.intensity",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceIor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.indexOfRefraction",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessMinimum",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.minimumThickness",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessMaximum",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"iridescence.maximumThickness",Vn,()=>1)]);const c=Wn("iridescence.texture");$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceTexture/extensions/KHR_texture_transform/scale",c.scale),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceTexture/extensions/KHR_texture_transform/offset",c.offset),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceTexture/extensions/KHR_texture_transform/rotation",c.rotation);const d=Wn("iridescence.thicknessTexture");$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessTexture/extensions/KHR_texture_transform/scale",d.scale),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessTexture/extensions/KHR_texture_transform/offset",d.offset),$("/materials/{}/extensions/KHR_materials_iridescence/iridescenceThicknessTexture/extensions/KHR_texture_transform/rotation",d.rotation),$("/materials/{}/extensions/KHR_materials_sheen/sheenColorFactor",[new jn(t.Animation.ANIMATIONTYPE_COLOR3,"sheen.color",Pn,()=>3)]),$("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"sheen.roughness",Vn,()=>1)]);const h=Wn("sheen.texture");$("/materials/{}/extensions/KHR_materials_sheen/sheenColorTexture/extensions/KHR_texture_transform/scale",h.scale),$("/materials/{}/extensions/KHR_materials_sheen/sheenColorTexture/extensions/KHR_texture_transform/offset",h.offset),$("/materials/{}/extensions/KHR_materials_sheen/sheenColorTexture/extensions/KHR_texture_transform/rotation",h.rotation);const m=Wn("sheen.textureRoughness");$("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessTexture/extensions/KHR_texture_transform/scale",m.scale),$("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessTexture/extensions/KHR_texture_transform/offset",m.offset),$("/materials/{}/extensions/KHR_materials_sheen/sheenRoughnessTexture/extensions/KHR_texture_transform/rotation",m.rotation),$("/materials/{}/extensions/KHR_materials_specular/specularFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"metallicF0Factor",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_specular/specularColorFactor",[new jn(t.Animation.ANIMATIONTYPE_COLOR3,"metallicReflectanceColor",Pn,()=>3)]);const p=Wn("metallicReflectanceTexture");$("/materials/{}/extensions/KHR_materials_specular/specularTexture/extensions/KHR_texture_transform/scale",p.scale),$("/materials/{}/extensions/KHR_materials_specular/specularTexture/extensions/KHR_texture_transform/offset",p.offset),$("/materials/{}/extensions/KHR_materials_specular/specularTexture/extensions/KHR_texture_transform/rotation",p.rotation);const _=Wn("reflectanceTexture");$("/materials/{}/extensions/KHR_materials_specular/specularColorTexture/extensions/KHR_texture_transform/scale",_.scale),$("/materials/{}/extensions/KHR_materials_specular/specularColorTexture/extensions/KHR_texture_transform/offset",_.offset),$("/materials/{}/extensions/KHR_materials_specular/specularColorTexture/extensions/KHR_texture_transform/rotation",_.rotation),$("/materials/{}/extensions/KHR_materials_transmission/transmissionFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.refractionIntensity",Vn,()=>1)]);const f=Wn("subSurface.refractionIntensityTexture");$("/materials/{}/extensions/KHR_materials_transmission/transmissionTexture/extensions/KHR_texture_transform/scale",f.scale),$("/materials/{}/extensions/KHR_materials_transmission/transmissionTexture/extensions/KHR_texture_transform/offset",f.offset),$("/materials/{}/extensions/KHR_materials_transmission/transmissionTexture/extensions/KHR_texture_transform/rotation",f.rotation),$("/materials/{}/extensions/KHR_materials_volume/attenuationColor",[new jn(t.Animation.ANIMATIONTYPE_COLOR3,"subSurface.tintColor",Pn,()=>3)]),$("/materials/{}/extensions/KHR_materials_volume/attenuationDistance",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.tintColorAtDistance",Vn,()=>1)]),$("/materials/{}/extensions/KHR_materials_volume/thicknessFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.maximumThickness",Vn,()=>1)]);const g=Wn("subSurface.thicknessTexture");$("/materials/{}/extensions/KHR_materials_volume/thicknessTexture/extensions/KHR_texture_transform/scale",g.scale),$("/materials/{}/extensions/KHR_materials_volume/thicknessTexture/extensions/KHR_texture_transform/offset",g.offset),$("/materials/{}/extensions/KHR_materials_volume/thicknessTexture/extensions/KHR_texture_transform/rotation",g.rotation),$("/materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionFactor",[new jn(t.Animation.ANIMATIONTYPE_FLOAT,"subSurface.translucencyIntensity",Vn,()=>1)]);const v=Wn("subSurface.translucencyIntensityTexture");$("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionTexture/extensions/KHR_texture_transform/scale",v.scale),$("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionTexture/extensions/KHR_texture_transform/offset",v.offset),$("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionTexture/extensions/KHR_texture_transform/rotation",v.rotation),$("/materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorFactor",[new jn(t.Animation.ANIMATIONTYPE_COLOR3,"subSurface.translucencyColor",Pn,()=>3)]);const y=Wn("subSurface.translucencyColorTexture");$("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorTexture/extensions/KHR_texture_transform/scale",y.scale),$("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorTexture/extensions/KHR_texture_transform/offset",y.offset),$("materials/{}/extensions/KHR_materials_diffuse_transmission/diffuseTransmissionColorTexture/extensions/KHR_texture_transform/rotation",y.rotation),$("/extensions/KHR_lights_punctual/lights/{}/color",[new zn(t.Animation.ANIMATIONTYPE_COLOR3,"diffuse",Pn,()=>3)]),$("/extensions/KHR_lights_punctual/lights/{}/intensity",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"intensity",Vn,()=>1)]),$("/extensions/KHR_lights_punctual/lights/{}/range",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"range",Vn,()=>1)]),$("/extensions/KHR_lights_punctual/lights/{}/spot/innerConeAngle",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"innerAngle",Kn,()=>1)]),$("/extensions/KHR_lights_punctual/lights/{}/spot/outerConeAngle",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"angle",Kn,()=>1)]),$("/extensions/EXT_lights_area/lights/{}/color",[new zn(t.Animation.ANIMATIONTYPE_COLOR3,"diffuse",Pn,()=>3)]),$("/extensions/EXT_lights_area/lights/{}/intensity",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"intensity",Vn,()=>1)]),$("/extensions/EXT_lights_area/lights/{}/size",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"radius",Vn,()=>1)]),$("/extensions/EXT_lights_area/lights/{}/rect/aspect",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"radius",Vn,()=>1)]),$("/nodes/{}/extensions/EXT_lights_ies/color",[new zn(t.Animation.ANIMATIONTYPE_COLOR3,"diffuse",Pn,()=>3)]),$("/nodes/{}/extensions/EXT_lights_ies/multiplier",[new zn(t.Animation.ANIMATIONTYPE_FLOAT,"intensity",Vn,()=>1)]),$("/nodes/{}/extensions/KHR_node_visibility/visible",[new qn(t.Animation.ANIMATIONTYPE_FLOAT,"isVisible",Vn,()=>1)])}(),Mn();const Xn="MSFT_audio_emitter";class Qn{constructor(e){this.name=Xn,this._loader=e,this.enabled=this._loader.isExtensionUsed(Xn)}dispose(){this._loader=null,this._clips=null,this._emitters=null}onLoading(){const e=this._loader.gltf.extensions;if(e&&e[this.name]){const t=e[this.name];this._clips=t.clips,this._emitters=t.emitters,q.Assign(this._clips),q.Assign(this._emitters)}}loadSceneAsync(e,t){return X.LoadExtensionAsync(e,t,this.name,(n,o)=>D(this,void 0,void 0,function*(){const r=new Array;r.push(this._loader.loadSceneAsync(e,t));for(const e of o.emitters){const t=q.Get(`${n}/emitters`,this._emitters,e);if(null!=t.refDistance||null!=t.maxDistance||null!=t.rolloffFactor||null!=t.distanceModel||null!=t.innerAngle||null!=t.outerAngle)throw new Error(`${n}: Direction or Distance properties are not allowed on emitters attached to a scene`);r.push(this._loadEmitterAsync(`${n}/emitters/${t.index}`,t))}yield Promise.all(r)}))}loadNodeAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(e,r)=>D(this,void 0,void 0,function*(){const a=new Array,s=yield this._loader.loadNodeAsync(e,n,n=>{for(const o of r.emitters){const r=q.Get(`${e}/emitters`,this._emitters,o);a.push(this._loadEmitterAsync(`${e}/emitters/${r.index}`,r).then(()=>{for(const e of r._babylonSounds)e.attachToMesh(n),null==r.innerAngle&&null==r.outerAngle||(e.setLocalDirectionToMesh(t.Vector3.Forward()),e.setDirectionalCone(2*t.Tools.ToDegrees(null==r.innerAngle?Math.PI:r.innerAngle),2*t.Tools.ToDegrees(null==r.outerAngle?Math.PI:r.outerAngle),0))}))}o(n)});return yield Promise.all(a),s}))}loadAnimationAsync(e,t){return X.LoadExtensionAsync(e,t,this.name,(n,o)=>D(this,void 0,void 0,function*(){const r=yield this._loader.loadAnimationAsync(e,t),a=new Array;q.Assign(o.events);for(const s of o.events)a.push(this._loadAnimationEventAsync(`${n}/events/${s.index}`,e,t,s,r));return yield Promise.all(a),r}))}_loadClipAsync(e,n){if(n._objectURL)return n._objectURL;let o;if(n.uri)o=this._loader.loadUriAsync(e,n,n.uri);else{const t=q.Get(`${e}/bufferView`,this._loader.gltf.bufferViews,n.bufferView);o=this._loader.loadBufferViewAsync(`/bufferViews/${t.index}`,t)}return n._objectURL=o.then(e=>{const o=t.GetBlobBufferSource(e);return URL.createObjectURL(new Blob([o],{type:n.mimeType}))}),n._objectURL}_loadEmitterAsync(e,n){if(n._babylonSounds=n._babylonSounds||[],!n._babylonData){const e=new Array,o=n.name||`emitter${n.index}`,r={loop:!1,autoplay:!1,volume:null==n.volume?1:n.volume};for(let a=0;a<n.clips.length;a++){const s=`/extensions/${this.name}/clips`,i=q.Get(s,this._clips,n.clips[a].clip);e.push(this._loadClipAsync(`${s}/${n.clips[a].clip}`,i).then(e=>{const s=n._babylonSounds[a]=new t.Sound(o,e,this._loader.babylonScene,null,r);s.refDistance=n.refDistance||1,s.maxDistance=n.maxDistance||256,s.rolloffFactor=n.rolloffFactor||1,s.distanceModel=n.distanceModel||"exponential"}))}const a=Promise.all(e).then(()=>{const e=n.clips.map(e=>e.weight||1),o=new t.WeightedSound(n.loop||!1,n._babylonSounds,e);n.innerAngle&&(o.directionalConeInnerAngle=2*t.Tools.ToDegrees(n.innerAngle)),n.outerAngle&&(o.directionalConeOuterAngle=2*t.Tools.ToDegrees(n.outerAngle)),n.volume&&(o.volume=n.volume),n._babylonData.sound=o});n._babylonData={loaded:a}}return n._babylonData.loaded}_getEventAction(e,t,n,o,r){switch(n){case"play":return e=>{const n=(r||0)+(e-o);t.play(n)};case"stop":return()=>{t.stop()};case"pause":return()=>{t.pause()};default:throw new Error(`${e}: Unsupported action ${n}`)}}_loadAnimationEventAsync(e,n,o,r,a){if(0==a.targetedAnimations.length)return Promise.resolve();const s=a.targetedAnimations[0],i=r.emitter,l=q.Get(`/extensions/${this.name}/emitters`,this._emitters,i);return this._loadEmitterAsync(e,l).then(()=>{const n=l._babylonData.sound;if(n){const o=new t.AnimationEvent(r.time,this._getEventAction(e,n,r.action,r.time,r.startOffset));s.animation.addEvent(o),a.onAnimationGroupEndObservable.add(()=>{n.stop()}),a.onAnimationGroupPauseObservable.add(()=>{n.pause()})}})}}let Jn=!1;function Zn(){Jn||(Jn=!0,U(Xn),W(Xn,!0,e=>new Qn(e)))}Zn();const eo="MSFT_lod";class to{constructor(e){var n,o;this.name=eo,this.order=100,this.maxLODsToLoad=10,this.onNodeLODsLoadedObservable=new t.Observable,this.onMaterialLODsLoadedObservable=new t.Observable,this._bufferLODs=new Array,this._nodeIndexLOD=null,this._nodeSignalLODs=new Array,this._nodePromiseLODs=new Array,this._nodeBufferLODs=new Array,this._materialIndexLOD=null,this._materialSignalLODs=new Array,this._materialPromiseLODs=new Array,this._materialBufferLODs=new Array,this._loader=e,this.maxLODsToLoad=null!==(o=null===(n=this._loader.parent.extensionOptions[eo])||void 0===n?void 0:n.maxLODsToLoad)&&void 0!==o?o:this.maxLODsToLoad,this.enabled=this._loader.isExtensionUsed(eo)}dispose(){this._loader=null,this._nodeIndexLOD=null,this._nodeSignalLODs.length=0,this._nodePromiseLODs.length=0,this._nodeBufferLODs.length=0,this._materialIndexLOD=null,this._materialSignalLODs.length=0,this._materialPromiseLODs.length=0,this._materialBufferLODs.length=0,this.onMaterialLODsLoadedObservable.clear(),this.onNodeLODsLoadedObservable.clear()}onReady(){for(let e=0;e<this._nodePromiseLODs.length;e++){const t=Promise.all(this._nodePromiseLODs[e]).then(()=>{0!==e&&(this._loader.endPerformanceCounter(`Node LOD ${e}`),this._loader.log(`Loaded node LOD ${e}`)),this.onNodeLODsLoadedObservable.notifyObservers(e),e!==this._nodePromiseLODs.length-1&&(this._loader.startPerformanceCounter(`Node LOD ${e+1}`),this._loadBufferLOD(this._nodeBufferLODs,e+1),this._nodeSignalLODs[e]&&this._nodeSignalLODs[e].resolve())});this._loader._completePromises.push(t)}for(let e=0;e<this._materialPromiseLODs.length;e++){const t=Promise.all(this._materialPromiseLODs[e]).then(()=>{0!==e&&(this._loader.endPerformanceCounter(`Material LOD ${e}`),this._loader.log(`Loaded material LOD ${e}`)),this.onMaterialLODsLoadedObservable.notifyObservers(e),e!==this._materialPromiseLODs.length-1&&(this._loader.startPerformanceCounter(`Material LOD ${e+1}`),this._loadBufferLOD(this._materialBufferLODs,e+1),this._materialSignalLODs[e]&&this._materialSignalLODs[e].resolve())});this._loader._completePromises.push(t)}}loadSceneAsync(e,t){const n=this._loader.loadSceneAsync(e,t);return this._loadBufferLOD(this._bufferLODs,0),n}loadNodeAsync(e,n,o){return X.LoadExtensionAsync(e,n,this.name,(e,r)=>D(this,void 0,void 0,function*(){let a;const s=this._getLODs(e,n,this._loader.gltf.nodes,r.ids);this._loader.logOpen(`${e}`);for(let e=0;e<s.length;e++){const n=s[e];0!==e&&(this._nodeIndexLOD=e,this._nodeSignalLODs[e]=this._nodeSignalLODs[e]||new t.Deferred);const r=e=>{o(e),e.setEnabled(!1)},i=this._loader.loadNodeAsync(`/nodes/${n.index}`,n,r).then(t=>{if(0!==e){const t=s[e-1];t._babylonTransformNode&&(this._disposeTransformNode(t._babylonTransformNode),delete t._babylonTransformNode)}return t.setEnabled(!0),t});this._nodePromiseLODs[e]=this._nodePromiseLODs[e]||[],0===e?a=i:(this._nodeIndexLOD=null,this._nodePromiseLODs[e].push(i))}return this._loader.logClose(),yield a}))}_loadMaterialAsync(e,t,n,o,r){return this._nodeIndexLOD?null:X.LoadExtensionAsync(e,t,this.name,(e,a)=>D(this,void 0,void 0,function*(){let s;const i=this._getLODs(e,t,this._loader.gltf.materials,a.ids);this._loader.logOpen(`${e}`);for(let e=0;e<i.length;e++){const t=i[e];0!==e&&(this._materialIndexLOD=e);const a=this._loader._loadMaterialAsync(`/materials/${t.index}`,t,n,o,t=>{0===e&&r(t)}).then(t=>{if(0!==e){r(t);const n=i[e-1]._data;n[o]&&(this._disposeMaterials([n[o].babylonMaterial]),delete n[o])}return t});this._materialPromiseLODs[e]=this._materialPromiseLODs[e]||[],0===e?s=a:(this._materialIndexLOD=null,this._materialPromiseLODs[e].push(a))}return this._loader.logClose(),yield s}))}_loadUriAsync(e,n,o){if(null!==this._nodeIndexLOD){this._loader.log("deferred");const r=this._nodeIndexLOD-1;return this._nodeSignalLODs[r]=this._nodeSignalLODs[r]||new t.Deferred,this._nodeSignalLODs[this._nodeIndexLOD-1].promise.then(()=>D(this,void 0,void 0,function*(){return yield this._loader.loadUriAsync(e,n,o)}))}if(null!==this._materialIndexLOD){this._loader.log("deferred");const r=this._materialIndexLOD-1;return this._materialSignalLODs[r]=this._materialSignalLODs[r]||new t.Deferred,this._materialSignalLODs[r].promise.then(()=>D(this,void 0,void 0,function*(){return yield this._loader.loadUriAsync(e,n,o)}))}return null}loadBufferAsync(e,n,o,r){if(this._loader.parent.useRangeRequests&&!n.uri){if(!this._loader.bin)throw new Error(`${e}: Uri is missing or the binary glTF is missing its binary chunk`);const n=(e,n)=>D(this,void 0,void 0,function*(){const a=o,s=a+r-1;let i=e[n];return i?(i.start=Math.min(i.start,a),i.end=Math.max(i.end,s)):(i={start:a,end:s,loaded:new t.Deferred},e[n]=i),yield i.loaded.promise.then(e=>new Uint8Array(e.buffer,e.byteOffset+o-i.start,r))});return this._loader.log("deferred"),null!==this._nodeIndexLOD?n(this._nodeBufferLODs,this._nodeIndexLOD):null!==this._materialIndexLOD?n(this._materialBufferLODs,this._materialIndexLOD):n(this._bufferLODs,0)}return null}_loadBufferLOD(e,t){const n=e[t];n&&(this._loader.log(`Loading buffer range [${n.start}-${n.end}]`),this._loader.bin.readAsync(n.start,n.end-n.start+1).then(e=>{n.loaded.resolve(e)},e=>{n.loaded.reject(e)}))}_getLODs(e,t,n,o){if(this.maxLODsToLoad<=0)throw new Error("maxLODsToLoad must be greater than zero");const r=[];for(let t=o.length-1;t>=0;t--)if(r.push(q.Get(`${e}/ids/${o[t]}`,n,o[t])),r.length===this.maxLODsToLoad)return r;return r.push(t),r}_disposeTransformNode(e){const t=[],n=e.material;n&&t.push(n);for(const n of e.getChildMeshes())n.material&&t.push(n.material);e.dispose();const o=t.filter(e=>this._loader.babylonScene.meshes.every(t=>t.material!=e));this._disposeMaterials(o)}_disposeMaterials(e){const t={};for(const n of e){for(const e of n.getActiveTextures())t[e.uniqueId]=e;n.dispose()}for(const e in t)for(const n of this._loader.babylonScene.materials)n.hasTexture(t[e])&&delete t[e];for(const e in t)t[e].dispose()}}let no=!1;function oo(){no||(no=!0,U(eo),W(eo,!0,e=>new to(e)))}oo();const ro="MSFT_minecraftMesh";class ao{constructor(e){this.name=ro,this._loader=e,this.enabled=this._loader.isExtensionUsed(ro)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtraAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){if(r){if(!this._loader._pbrMaterialImpls.get("pbr"))throw new Error(`${o}: Material type not supported`);const r=this._loader.loadMaterialPropertiesAsync(e,t,n);return n.needAlphaBlending()&&(n.forceDepthWrite=!0,n.separateCullingPass=!0),n.backFaceCulling=n.forceDepthWrite,n.twoSidedLighting=!0,yield r}}))}}let so=!1;function io(){so||(so=!0,U(ro),W(ro,!0,e=>new ao(e)))}io();const lo="MSFT_sRGBFactors";class uo{constructor(e){this.name=lo,this._loader=e,this.enabled=this._loader.isExtensionUsed(lo)}dispose(){this._loader=null}loadMaterialPropertiesAsync(e,t,n){return X.LoadExtraAsync(e,t,this.name,(o,r)=>D(this,void 0,void 0,function*(){if(r){const o=this._loader._getOrCreateMaterialAdapter(n),r=this._loader.loadMaterialPropertiesAsync(e,t,n),a=n.getScene().getEngine().useExactSrgbConversions;return o.baseColorTexture||o.baseColor.toLinearSpaceToRef(o.baseColor,a),o.specularColorTexture||o.specularColor.toLinearSpaceToRef(o.specularColor,a),yield r}}))}}let co=!1;function ho(){co||(co=!0,U(lo),W(lo,!0,e=>new uo(e)))}function mo(e){const[t,n]=e.split(":");return po({op:t,extension:n})}function po(e,n=!0){var o;const r=e.extension?null===(o=go[e.extension])||void 0===o?void 0:o[e.op]:vo[e.op];return!r&&n?(t.Logger.Warn(`No mapping found for operation ${e.op} and extension ${e.extension||"KHR_interactivity"}`),_o(e)):r}function _o(e){const t={},n={flows:{}};if(e.inputValueSockets){t.values={};for(const n in e.inputValueSockets)t.values[n]={name:n}}return e.outputValueSockets&&(n.values={},Object.keys(e.outputValueSockets).forEach(e=>{n.values[e]={name:e}})),{blocks:[],inputs:t,outputs:n}}function fo(e,t,n){go[t]||(go[t]={}),go[t][e]=n}ho();const go={BABYLON:{"flow/log":{blocks:["FlowGraphConsoleLogBlock"],inputs:{values:{message:{name:"message"},"[segment]":{name:"$1",compatibilityOnly:!0}}},outputs:{flows:{out:{name:"out",compatibilityOnly:!0}}}}}},vo={"event/onStart":{blocks:["FlowGraphSceneReadyEventBlock"],outputs:{values:{event:{name:"event"}},flows:{out:{name:"done"}}}},"event/onTick":{blocks:["FlowGraphSceneTickEventBlock"],inputs:{},outputs:{values:{timeSinceStart:{name:"timeSinceStart",gltfType:"number"},timeSinceLastTick:{name:"deltaTime",gltfType:"number"},event:{name:"event"}},flows:{out:{name:"done"}}}},"event/send":{blocks:["FlowGraphSendCustomEventBlock"],configuration:{event:{name:"eventId",configurationType:"int",required:!0,indexSource:"events",validationOnly:!0}},inputs:{values:{"[segment]":{name:"$1"}}},outputs:{flows:{out:{name:"out"}}},extraProcessor(e,t,n,o,r){var a,s;if("event/send"!==t.op||!(null===(a=e.configuration)||void 0===a?void 0:a.event))throw new Error("Send event should have a single configuration object, the event itself");const i=null===(s=e.configuration.event.value)||void 0===s?void 0:s[0];if("number"!=typeof i)throw new Error("Event id should be a number");const l=o.arrays.events[i],u=r[0];return u.config||(u.config={}),u.config.eventId=l.eventId,u.config.eventData=l.eventData,r}},"event/receive":{blocks:["FlowGraphReceiveCustomEventBlock"],configuration:{event:{name:"eventId",configurationType:"int",required:!0,indexSource:"events",validationOnly:!0}},outputs:{values:{event:{name:"event"},"[segment]":{name:"$1"}},flows:{out:{name:"done"}}},validation(e,n){var o,r;if(!e.configuration)return t.Logger.Error("Receive event should have a configuration object"),{valid:!1,error:"Receive event should have a configuration object"};const a=e.configuration.event;if(!a)return t.Logger.Error("Receive event should have a single configuration object, the event itself"),{valid:!1,error:"Receive event should have a single configuration object, the event itself"};const s=null===(o=a.value)||void 0===o?void 0:o[0];return"number"!=typeof s?(t.Logger.Error("Event id should be a number"),{valid:!1,error:"Event id should be a number"}):(null===(r=n.events)||void 0===r?void 0:r[s])?{valid:!0}:(t.Logger.Error(`Event with id ${s} not found`),{valid:!1,error:`Event with id ${s} not found`})},extraProcessor(e,t,n,o,r){var a,s;if("event/receive"!==t.op||!(null===(a=e.configuration)||void 0===a?void 0:a.event))throw new Error("Receive event should have a single configuration object, the event itself");const i=null===(s=e.configuration.event.value)||void 0===s?void 0:s[0];if("number"!=typeof i)throw new Error("Event id should be a number");const l=o.arrays.events[i],u=r[0];return u.config||(u.config={}),u.config.eventId=l.eventId,u.config.eventData=l.eventData,r}},"event/stopPropagation":{blocks:["FlowGraphStopEventPropagationBlock"],inputs:{values:{event:{name:"event"},stopImmediate:{name:"stopImmediate"}},flows:{in:{name:"in"}}},outputs:{flows:{out:{name:"out"}}}},"math/E":yo("FlowGraphEBlock",[]),"math/Pi":yo("FlowGraphPIBlock",[]),"math/Tau":yo("FlowGraphTauBlock",[]),"math/Inf":yo("FlowGraphInfBlock",[]),"math/NaN":yo("FlowGraphNaNBlock",[]),"math/abs":yo("FlowGraphAbsBlock"),"math/sign":yo("FlowGraphSignBlock"),"math/trunc":yo("FlowGraphTruncBlock"),"math/floor":yo("FlowGraphFloorBlock"),"math/ceil":yo("FlowGraphCeilBlock"),"math/round":{blocks:["FlowGraphRoundBlock"],configuration:{},inputs:{values:{a:{name:"a"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r){var a;return(a=r[0]).config||(a.config={}),r[0].config.roundHalfAwayFromZero=!0,r}},"math/fract":yo("FlowGraphFractBlock"),"math/neg":yo("FlowGraphNegationBlock"),"math/add":yo("FlowGraphAddBlock",["a","b"],!0),"math/sub":yo("FlowGraphSubtractBlock",["a","b"],!0),"math/mul":{blocks:["FlowGraphMultiplyBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r){var a;(a=r[0]).config||(a.config={}),r[0].config.useMatrixPerComponent=!0,r[0].config.preventIntegerFloatArithmetic=!0;let s=-1;return Object.keys(e.values||{}).find(t=>{var n;return void 0!==(null===(n=e.values)||void 0===n?void 0:n[t].type)&&(s=e.values[t].type,!0)}),-1!==s&&(r[0].config.type=o.arrays.types[s].flowGraphType),r},validation:e=>e.values?bo(e):{valid:!0}},"math/div":yo("FlowGraphDivideBlock",["a","b"],!0),"math/rem":yo("FlowGraphModuloBlock",["a","b"]),"math/min":yo("FlowGraphMinBlock",["a","b"]),"math/max":yo("FlowGraphMaxBlock",["a","b"]),"math/clamp":yo("FlowGraphClampBlock",["a","b","c"]),"math/saturate":yo("FlowGraphSaturateBlock"),"math/mix":yo("FlowGraphMathInterpolationBlock",["a","b","c"]),"math/smoothStep":yo("FlowGraphSmoothStepBlock",["a","b","c"]),"math/rgbToOkLCh":{blocks:["FlowGraphRGBToOkLChBlock"],inputs:{values:{r:{name:"r",gltfType:"number"},g:{name:"g",gltfType:"number"},b:{name:"b",gltfType:"number"}}},outputs:{values:{l:{name:"l"},c:{name:"c"},h:{name:"h"}}}},"math/rgbFromOkLCh":{blocks:["FlowGraphRGBFromOkLChBlock"],inputs:{values:{l:{name:"l",gltfType:"number"},c:{name:"c",gltfType:"number"},h:{name:"h",gltfType:"number"}}},outputs:{values:{r:{name:"r"},g:{name:"g"},b:{name:"b"}}}},"math/quatSlerp":yo("FlowGraphMathSlerpBlock",["a","b","c"]),"math/slerp":yo("FlowGraphVectorSlerpBlock",["a","b","c"]),"math/eq":yo("FlowGraphEqualityBlock",["a","b"]),"ref/eq":yo("FlowGraphEqualityBlock",["a","b"]),"math/lt":yo("FlowGraphLessThanBlock",["a","b"]),"math/le":yo("FlowGraphLessThanOrEqualBlock",["a","b"]),"math/gt":yo("FlowGraphGreaterThanBlock",["a","b"]),"math/ge":yo("FlowGraphGreaterThanOrEqualBlock",["a","b"]),"math/isNaN":yo("FlowGraphIsNaNBlock"),"math/isInf":yo("FlowGraphIsInfBlock"),"math/select":{blocks:["FlowGraphConditionalBlock"],inputs:{values:{condition:{name:"condition"},a:{name:"onTrue"},b:{name:"onFalse"}}},outputs:{values:{value:{name:"output",typeSourceInput:"a"}}}},"math/random":{blocks:["FlowGraphRandomBlock"],outputs:{values:{value:{name:"value"}}}},"math/sin":yo("FlowGraphSinBlock"),"math/cos":yo("FlowGraphCosBlock"),"math/tan":yo("FlowGraphTanBlock"),"math/asin":yo("FlowGraphASinBlock"),"math/acos":yo("FlowGraphACosBlock"),"math/atan":yo("FlowGraphATanBlock"),"math/atan2":yo("FlowGraphATan2Block",["a","b"]),"math/sinh":yo("FlowGraphSinhBlock"),"math/cosh":yo("FlowGraphCoshBlock"),"math/tanh":yo("FlowGraphTanhBlock"),"math/asinh":yo("FlowGraphASinhBlock"),"math/acosh":yo("FlowGraphACoshBlock"),"math/atanh":yo("FlowGraphATanhBlock"),"math/exp":yo("FlowGraphExponentialBlock"),"math/log":yo("FlowGraphLogBlock"),"math/log2":yo("FlowGraphLog2Block"),"math/log10":yo("FlowGraphLog10Block"),"math/sqrt":yo("FlowGraphSquareRootBlock"),"math/cbrt":yo("FlowGraphCubeRootBlock"),"math/pow":yo("FlowGraphPowerBlock",["a","b"]),"math/length":yo("FlowGraphLengthBlock"),"math/normalize":Object.assign(Object.assign({},yo("FlowGraphNormalizeBlock")),{outputs:{values:{value:{name:"value"},isValid:{name:"isValid",gltfType:"bool"}}}}),"math/dot":yo("FlowGraphDotBlock",["a","b"]),"math/cross":yo("FlowGraphCrossBlock",["a","b"]),"math/rotate2D":{blocks:["FlowGraphRotate2DBlock"],inputs:{values:{a:{name:"a"},angle:{name:"b"}}},outputs:{values:{value:{name:"value"}}}},"math/rotate3D":{blocks:["FlowGraphRotate3DBlock"],inputs:{values:{a:{name:"a"},rotation:{name:"b"}}},outputs:{values:{value:{name:"value"}}}},"math/transform":{blocks:["FlowGraphTransformVectorBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}}},"math/combine2":{blocks:["FlowGraphCombineVector2Block"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/combine3":{blocks:["FlowGraphCombineVector3Block"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/combine4":{blocks:["FlowGraphCombineVector4Block"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract2":{blocks:["FlowGraphExtractVector2Block"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"}}}},"math/extract3":{blocks:["FlowGraphExtractVector3Block"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"}}}},"math/extract4":{blocks:["FlowGraphExtractVector4Block"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"}}}},"math/transpose":yo("FlowGraphTransposeBlock"),"math/determinant":yo("FlowGraphDeterminantBlock"),"math/inverse":Object.assign(Object.assign({},yo("FlowGraphInvertMatrixBlock")),{outputs:{values:{value:{name:"value"},isValid:{name:"isValid",gltfType:"bool"}}}}),"math/matMul":yo("FlowGraphMatrixMultiplicationBlock",["a","b"]),"math/matCompose":{blocks:["FlowGraphMatrixCompose"],inputs:{values:{translation:{name:"position",gltfType:"float3"},rotation:{name:"rotationQuaternion",gltfType:"float4"},scale:{name:"scaling",gltfType:"float3"}}},outputs:{values:{value:{name:"value",gltfType:"float4x4"}}},extraProcessor(e,t,n,o,r,a){const s=r[0].dataInputs.find(e=>"rotationQuaternion"===e.name);if(!s)throw new Error("Rotation quaternion input not found");return a._connectionValues[s.uniqueId]&&(a._connectionValues[s.uniqueId].type="Quaternion"),r}},"math/matDecompose":{blocks:["FlowGraphMatrixDecompose"],inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{translation:{name:"position"},rotation:{name:"rotationQuaternion"},scale:{name:"scaling"},scaling:{name:"scaling",compatibilityOnly:!0},isValid:{name:"isValid",compatibilityOnly:!0}}},extraProcessor(e,t,n,o,r){var a;return(a=r[0]).config||(a.config={}),r[0].config.keepDegenerateComponents=!0,r}},"math/quatConjugate":yo("FlowGraphConjugateBlock",["a"]),"math/quatMul":{blocks:["FlowGraphMultiplyBlock"],inputs:{values:{a:{name:"a",gltfType:"vector4"},b:{name:"b",gltfType:"vector4"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r){var a;return(a=r[0]).config||(a.config={}),r[0].config.type="Quaternion",r}},"math/quatAngleBetween":yo("FlowGraphAngleBetweenBlock",["a","b"]),"math/quatFromAxisAngle":{blocks:["FlowGraphQuaternionFromAxisAngleBlock"],inputs:{values:{axis:{name:"a",gltfType:"float3"},angle:{name:"b",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/quatToAxisAngle":{blocks:["FlowGraphAxisAngleFromQuaternionBlock"],inputs:{values:{a:{name:"a",gltfType:"float4"}}},outputs:{values:{axis:{name:"axis",gltfType:"float3"},angle:{name:"angle",gltfType:"float"}}}},"math/quatFromDirections":yo("FlowGraphQuaternionFromDirectionsBlock",["a","b"]),"math/quatFromUpForward":{blocks:["FlowGraphQuaternionFromUpForwardBlock"],inputs:{values:{up:{name:"a",gltfType:"float3"},forward:{name:"b",gltfType:"float3"}}},outputs:{values:{value:{name:"value"}}}},"math/quatFromAngles":{blocks:["FlowGraphQuaternionFromAnglesBlock"],configuration:{order:{name:"order",defaultValue:["yxz"]}},inputs:{values:{x:{name:"a",gltfType:"number"},y:{name:"b",gltfType:"number"},z:{name:"c",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/combine2x2":{blocks:["FlowGraphCombineMatrix2DBlock"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract2x2":{blocks:["FlowGraphExtractMatrix2DBlock"],inputs:{values:{a:{name:"input",gltfType:"float2x2"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"}}}},"math/combine3x3":{blocks:["FlowGraphCombineMatrix3DBlock"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"},e:{name:"input_4",gltfType:"number"},f:{name:"input_5",gltfType:"number"},g:{name:"input_6",gltfType:"number"},h:{name:"input_7",gltfType:"number"},i:{name:"input_8",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract3x3":{blocks:["FlowGraphExtractMatrix3DBlock"],inputs:{values:{a:{name:"input",gltfType:"float3x3"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"},4:{name:"output_4"},5:{name:"output_5"},6:{name:"output_6"},7:{name:"output_7"},8:{name:"output_8"}}}},"math/combine4x4":{blocks:["FlowGraphCombineMatrixBlock"],inputs:{values:{a:{name:"input_0",gltfType:"number"},b:{name:"input_1",gltfType:"number"},c:{name:"input_2",gltfType:"number"},d:{name:"input_3",gltfType:"number"},e:{name:"input_4",gltfType:"number"},f:{name:"input_5",gltfType:"number"},g:{name:"input_6",gltfType:"number"},h:{name:"input_7",gltfType:"number"},i:{name:"input_8",gltfType:"number"},j:{name:"input_9",gltfType:"number"},k:{name:"input_10",gltfType:"number"},l:{name:"input_11",gltfType:"number"},m:{name:"input_12",gltfType:"number"},n:{name:"input_13",gltfType:"number"},o:{name:"input_14",gltfType:"number"},p:{name:"input_15",gltfType:"number"}}},outputs:{values:{value:{name:"value"}}}},"math/extract4x4":{blocks:["FlowGraphExtractMatrixBlock"],configuration:{},inputs:{values:{a:{name:"input",gltfType:"number"}}},outputs:{values:{0:{name:"output_0"},1:{name:"output_1"},2:{name:"output_2"},3:{name:"output_3"},4:{name:"output_4"},5:{name:"output_5"},6:{name:"output_6"},7:{name:"output_7"},8:{name:"output_8"},9:{name:"output_9"},10:{name:"output_10"},11:{name:"output_11"},12:{name:"output_12"},13:{name:"output_13"},14:{name:"output_14"},15:{name:"output_15"}}}},"math/not":{blocks:["FlowGraphBitwiseNotBlock"],inputs:{values:{a:{name:"a"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r,a){var s,i,l;(l=r[0]).config||(l.config={});const u=r[0].dataInputs[0];return r[0].config.valueType=null!==(i=null===(s=a._connectionValues[u.uniqueId])||void 0===s?void 0:s.type)&&void 0!==i?i:"FlowGraphInteger",r}},"math/and":{blocks:["FlowGraphBitwiseAndBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r,a){var s,i,l,u,c;(c=r[0]).config||(c.config={});const d=r[0].dataInputs[0],h=r[0].dataInputs[1];return r[0].config.valueType=null!==(u=null!==(i=null===(s=a._connectionValues[d.uniqueId])||void 0===s?void 0:s.type)&&void 0!==i?i:null===(l=a._connectionValues[h.uniqueId])||void 0===l?void 0:l.type)&&void 0!==u?u:"FlowGraphInteger",r}},"math/or":{blocks:["FlowGraphBitwiseOrBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r,a){var s,i,l,u,c;(c=r[0]).config||(c.config={});const d=r[0].dataInputs[0],h=r[0].dataInputs[1];return r[0].config.valueType=null!==(u=null!==(i=null===(s=a._connectionValues[d.uniqueId])||void 0===s?void 0:s.type)&&void 0!==i?i:null===(l=a._connectionValues[h.uniqueId])||void 0===l?void 0:l.type)&&void 0!==u?u:"FlowGraphInteger",r}},"math/xor":{blocks:["FlowGraphBitwiseXorBlock"],inputs:{values:{a:{name:"a"},b:{name:"b"}}},outputs:{values:{value:{name:"value"}}},extraProcessor(e,t,n,o,r,a){var s,i,l,u,c;(c=r[0]).config||(c.config={});const d=r[0].dataInputs[0],h=r[0].dataInputs[1];return r[0].config.valueType=null!==(u=null!==(i=null===(s=a._connectionValues[d.uniqueId])||void 0===s?void 0:s.type)&&void 0!==i?i:null===(l=a._connectionValues[h.uniqueId])||void 0===l?void 0:l.type)&&void 0!==u?u:"FlowGraphInteger",r}},"math/asr":yo("FlowGraphBitwiseRightShiftBlock",["a","b"]),"math/lsl":yo("FlowGraphBitwiseLeftShiftBlock",["a","b"]),"math/clz":yo("FlowGraphLeadingZerosBlock"),"math/ctz":yo("FlowGraphTrailingZerosBlock"),"math/popcnt":yo("FlowGraphOneBitsCounterBlock"),"math/rad":yo("FlowGraphDegToRadBlock"),"math/deg":yo("FlowGraphRadToDegBlock"),"type/boolToInt":yo("FlowGraphBooleanToInt"),"type/boolToFloat":yo("FlowGraphBooleanToFloat"),"type/intToBool":yo("FlowGraphIntToBoolean"),"type/intToFloat":yo("FlowGraphIntToFloat"),"type/floatToInt":yo("FlowGraphFloatToInt"),"type/floatToBool":yo("FlowGraphFloatToBoolean"),"flow/sequence":{blocks:["FlowGraphSequenceBlock"],outputs:{flows:{"[segment]":{name:"$1"}}},extraProcessor(e,t,n,o,r){const a=r[0];return a.config||(a.config={}),a.config.outputSignalCount=Object.keys(e.flows||[]).length,a.signalOutputs.forEach((e,t)=>{e.name="out_"+t}),r}},"flow/branch":{blocks:["FlowGraphBranchBlock"],inputs:{values:{condition:{name:"condition",gltfType:"boolean"}}},outputs:{flows:{true:{name:"onTrue"},false:{name:"onFalse"}}}},"flow/switch":{blocks:["FlowGraphSwitchBlock"],configuration:{cases:{name:"cases",isArray:!0,inOptions:!0,defaultValue:[],configurationType:"int[]",invalidUsesDefault:!0,generatesOutputFlowSockets:!0,uniqueValues:!0}},inputs:{values:{selection:{name:"case"},default:{name:"default"}}},outputs:{flows:{default:{name:"default"},"[segment]":{name:"$1"}}},validation(e){var n;const o=null===(n=e.configuration)||void 0===n?void 0:n.cases;if(o&&o.value){if(!o.value.every(e=>"number"==typeof e&&Number.isInteger(e)&&e>=-2147483648&&e<=2147483647))return t.Logger.Warn("Switch cases should be integers. Using empty array instead."),o.value=[],{valid:!0};const e=new Set(o.value);o.value=Array.from(e)}return{valid:!0}},extraProcessor(e,t,n,o,r){if("flow/switch"!==t.op||!e.flows||0===Object.keys(e.flows).length)throw new Error("Switch should have a single configuration object, the cases array");return r[0].signalOutputs.forEach(e=>{"default"!==e.name&&(e.name="out_"+e.name)}),r}},"flow/while":{blocks:["FlowGraphWhileLoopBlock"],inputs:{values:{condition:{name:"condition",gltfType:"boolean"}}},outputs:{flows:{loopBody:{name:"executionFlow"},completed:{name:"completed"}}}},"flow/for":{blocks:["FlowGraphForLoopBlock"],configuration:{initialIndex:{name:"initialIndex",gltfType:"int",inOptions:!0,defaultValue:0,configurationType:"int",invalidUsesDefault:!0}},inputs:{values:{startIndex:{name:"startIndex",gltfType:"int"},endIndex:{name:"endIndex",gltfType:"int"}}},outputs:{values:{index:{name:"index"}},flows:{loopBody:{name:"executionFlow"},completed:{name:"completed"}}},extraProcessor(e,t,n,o,r){const a=r[0];return a.config||(a.config={}),a.config.incrementIndexWhenLoopDone=!0,a.config.maxLoopIterations=2e4,r}},"flow/doN":{blocks:["FlowGraphDoNBlock"],configuration:{},inputs:{values:{n:{name:"maxExecutions",gltfType:"int"}},flows:{reset:{name:"reset"}}},outputs:{flows:{out:{name:"out"}},values:{currentCount:{name:"executionCount"}}}},"flow/multiGate":{blocks:["FlowGraphMultiGateBlock"],inputs:{flows:{reset:{name:"reset"}}},configuration:{isRandom:{name:"isRandom",gltfType:"boolean",inOptions:!0,defaultValue:!1,configurationType:"bool",invalidUsesDefault:!0,configurationGroup:"multiGate"},isLoop:{name:"isLoop",gltfType:"boolean",inOptions:!0,defaultValue:!1,configurationType:"bool",invalidUsesDefault:!0,configurationGroup:"multiGate"}},outputs:{flows:{"[segment]":{name:"$1"}},values:{lastIndex:{name:"lastIndex",gltfType:"int"}}},extraProcessor(e,t,n,o,r){var a;if("flow/multiGate"!==t.op)throw new Error("Invalid operation for MultiGate mapping");const s=r[0];return s.config||(s.config={}),s.config.outputSignalCount=Object.keys(null!==(a=e.flows)&&void 0!==a?a:{}).length,s.signalOutputs.forEach((e,t)=>{e.name="out_"+t}),r}},"flow/waitAll":{blocks:["FlowGraphWaitAllBlock"],configuration:{inputFlows:{name:"inputSignalCount",gltfType:"number",inOptions:!0,defaultValue:[0],configurationType:"int",invalidUsesDefault:!0,minimum:0,maximum:64,generatesInputFlowSockets:!0}},inputs:{flows:{reset:{name:"reset"},"[segment]":{name:"in_$1"}}},outputs:{flows:{out:{name:"out"},completed:{name:"completed"}},values:{remainingInputs:{name:"remainingInputs",gltfType:"int"}}},validation(e){var t,n;const o=null===(n=null===(t=e.configuration)||void 0===t?void 0:t.inputFlows)||void 0===n?void 0:n.value,r=null==o?void 0:o[0];return(1!==(null==o?void 0:o.length)||"number"!=typeof r||!Number.isInteger(r)||r<0||r>64)&&(e.configuration=e.configuration||{inputFlows:{value:[0]}},e.configuration.inputFlows.value=[0]),{valid:!0}}},"flow/throttle":{blocks:["FlowGraphThrottleBlock"],inputs:{values:{duration:{name:"duration",gltfType:"number"}},flows:{reset:{name:"reset"}}},outputs:{flows:{out:{name:"out"},err:{name:"error"}},values:{lastRemainingTime:{name:"lastRemainingTime",gltfType:"number"}}}},"flow/setDelay":{blocks:["FlowGraphSetDelayBlock"],inputs:{values:{duration:{name:"duration",gltfType:"number"}},flows:{cancel:{name:"cancel"}}},outputs:{flows:{out:{name:"out"},err:{name:"error"},done:{name:"done"}},values:{lastDelay:{name:"lastDelayIndex"},lastDelayIndex:{name:"lastDelayIndex",compatibilityOnly:!0}}}},"flow/cancelDelay":{blocks:["FlowGraphCancelDelayBlock"],inputs:{values:{delay:{name:"delayIndex",gltfType:"ref"}}},outputs:{flows:{out:{name:"out"}}}},"variable/get":{blocks:["FlowGraphGetVariableBlock"],validation(e){var n,o;return(null===(o=null===(n=e.configuration)||void 0===n?void 0:n.variable)||void 0===o?void 0:o.value)?{valid:!0}:(t.Logger.Error("Variable get block should have a variable configuration"),{valid:!1,error:"Variable get block should have a variable configuration"})},configuration:{variable:{name:"variable",gltfType:"number",configurationType:"int",required:!0,indexSource:"variables",flowGraphType:"string",inOptions:!0,isVariable:!0,dataTransformer:(e,t)=>t.getVariableName(e)}},outputs:{values:{value:{name:"value"}}}},"variable/set":{blocks:["FlowGraphSetVariableBlock"],inputs:{values:{"[segment]":{name:"$1"}}},configuration:{variables:{name:"variables",gltfType:"number",configurationType:"int[]",required:!0,indexSource:"variables",minItems:1,generatesInputValueSockets:!0,flowGraphType:"string",inOptions:!0,isArray:!0,dataTransformer:(e,t)=>e.map(e=>t.getVariableName(e))}},outputs:{flows:{out:{name:"out",compatibilityOnly:!0}}},extraProcessor:(e,t,n,o,r)=>(r[0].dataInputs.forEach(e=>{e.name=o.getVariableName(+e.name)}),r)},"variable/interpolate":{blocks:["FlowGraphInterpolationBlock","FlowGraphContextBlock","FlowGraphPlayAnimationBlock","FlowGraphBezierCurveEasing","FlowGraphGetVariableBlock"],configuration:{variable:{name:"propertyName",configurationType:"int",required:!0,indexSource:"variables",inOptions:!0,isVariable:!0,dataTransformer:(e,t)=>t.getVariableName(e)},useSlerp:{name:"animationType",configurationType:"bool",required:!0,inOptions:!0,dataTransformer:e=>!0===e?"Quaternion":void 0}},inputs:{values:{value:{name:"value_1"},duration:{name:"duration_1",gltfType:"number"},p1:{name:"controlPoint1",toBlock:"FlowGraphBezierCurveEasing"},p2:{name:"controlPoint2",toBlock:"FlowGraphBezierCurveEasing"}},flows:{in:{name:"in",toBlock:"FlowGraphPlayAnimationBlock"}}},outputs:{flows:{err:{name:"error",toBlock:"FlowGraphPlayAnimationBlock"},out:{name:"out",toBlock:"FlowGraphPlayAnimationBlock"},done:{name:"done",toBlock:"FlowGraphPlayAnimationBlock"}}},interBlockConnectors:[{input:"object",output:"userVariables",inputBlockIndex:2,outputBlockIndex:1,isVariable:!0},{input:"animation",output:"animation",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"easingFunction",output:"easingFunction",inputBlockIndex:0,outputBlockIndex:3,isVariable:!0},{input:"value_0",output:"value",inputBlockIndex:0,outputBlockIndex:4,isVariable:!0}],extraProcessor(e,n,o,r,a){var s,i,l,u,c,d;const h=a[0],m=null===(i=null===(s=e.configuration)||void 0===s?void 0:s.variable.value)||void 0===i?void 0:i[0];if("number"!=typeof m)throw t.Logger.Error("Variable index is not defined for variable interpolation block"),new Error("Variable index is not defined for variable interpolation block");const p=r.arrays.staticVariables[m];void 0===(null===(u=null===(l=h.config)||void 0===l?void 0:l.animationType)||void 0===u?void 0:u.value)&&(h.config||(h.config={}),(c=h.config).animationType||(c.animationType={}),h.config.animationType.value=t.getAnimationTypeByFlowGraphType(p.type));const _=a[4];return _.config||(_.config={}),(d=_.config).variable||(d.variable={}),_.config.variable.value=r.getVariableName(m),a}},"pointer/get":{blocks:["FlowGraphGetPropertyBlock","FlowGraphJsonPointerParserBlock"],validation:e=>Ao(e),configuration:{pointer:{name:"jsonPointer",toBlock:"FlowGraphJsonPointerParserBlock",configurationType:"string",required:!0,pointerTemplate:!0},type:{name:"type",configurationType:"int",required:!0,validationOnly:!0,indexSource:"types"}},inputs:{values:{"[segment]":{name:"$1",toBlock:"FlowGraphJsonPointerParserBlock"}}},outputs:{values:{value:{name:"value"},isValid:{name:"isValid",gltfType:"bool"}}},interBlockConnectors:[{input:"object",output:"object",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"propertyName",output:"propertyName",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"customGetFunction",output:"getFunction",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0}],extraProcessor:(e,t,n,o,r)=>(r.forEach(e=>{"FlowGraphJsonPointerParserBlock"===e.className&&(e.config||(e.config={}),e.config.outputValue=!0)}),r)},"pointer/set":{blocks:["FlowGraphSetPropertyBlock","FlowGraphJsonPointerParserBlock"],validation:e=>Ao(e,new Set(["value"])),configuration:{pointer:{name:"jsonPointer",toBlock:"FlowGraphJsonPointerParserBlock",configurationType:"string",required:!0,pointerTemplate:!0},type:{name:"type",configurationType:"int",required:!0,validationOnly:!0,indexSource:"types"}},inputs:{values:{value:{name:"value"},"[segment]":{name:"$1",toBlock:"FlowGraphJsonPointerParserBlock"}}},outputs:{flows:{err:{name:"error"},out:{name:"out",compatibilityOnly:!0}}},interBlockConnectors:[{input:"object",output:"object",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"propertyName",output:"propertyName",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"customSetFunction",output:"setFunction",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0}],extraProcessor:(e,t,n,o,r)=>(r.forEach(e=>{"FlowGraphJsonPointerParserBlock"===e.className&&(e.config||(e.config={}),e.config.outputValue=!0)}),r)},"pointer/interpolate":{blocks:["FlowGraphInterpolationBlock","FlowGraphJsonPointerParserBlock","FlowGraphPlayAnimationBlock","FlowGraphBezierCurveEasing"],validation:e=>Ao(e,new Set(["value","duration","p1","p2"])),configuration:{pointer:{name:"jsonPointer",toBlock:"FlowGraphJsonPointerParserBlock",configurationType:"string",required:!0,pointerTemplate:!0},type:{name:"type",configurationType:"int",required:!0,validationOnly:!0,indexSource:"types",allowedSignatures:["float","float2","float3","float4","float2x2","float3x3","float4x4"]}},inputs:{values:{value:{name:"value_1"},"[segment]":{name:"$1",toBlock:"FlowGraphJsonPointerParserBlock"},duration:{name:"duration_1",gltfType:"number"},p1:{name:"controlPoint1",toBlock:"FlowGraphBezierCurveEasing"},p2:{name:"controlPoint2",toBlock:"FlowGraphBezierCurveEasing"}},flows:{in:{name:"in",toBlock:"FlowGraphPlayAnimationBlock"}}},outputs:{flows:{err:{name:"error",toBlock:"FlowGraphPlayAnimationBlock"},out:{name:"out",toBlock:"FlowGraphPlayAnimationBlock"},done:{name:"done",toBlock:"FlowGraphPlayAnimationBlock"}}},interBlockConnectors:[{input:"object",output:"object",inputBlockIndex:2,outputBlockIndex:1,isVariable:!0},{input:"propertyName",output:"propertyName",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"customBuildAnimation",output:"generateAnimationsFunction",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"animation",output:"animation",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"easingFunction",output:"easingFunction",inputBlockIndex:0,outputBlockIndex:3,isVariable:!0},{input:"value_0",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0}],extraProcessor:(e,t,n,o,r)=>(r.forEach(t=>{"FlowGraphJsonPointerParserBlock"===t.className?(t.config||(t.config={}),t.config.outputValue=!0):"FlowGraphInterpolationBlock"===t.className&&(t.config||(t.config={}),Object.keys(e.values||[]).forEach(n=>{var r;const a=null===(r=e.values)||void 0===r?void 0:r[n];if("value"===n&&a){const e=a.type;void 0!==e&&(t.config.animationType=o.arrays.types[e].flowGraphType)}}))}),r)},"animation/start":{blocks:["FlowGraphPlayAnimationBlock","FlowGraphArrayIndexBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],inputs:{values:{animation:{name:"index",gltfType:"ref",toBlock:"FlowGraphArrayIndexBlock"},speed:{name:"speed",gltfType:"number"},startTime:{name:"from",gltfType:"number",convertConnectedTimeToFrames:!0,dataTransformer:(e,t)=>[e[0]*t._animationTargetFps]},endTime:{name:"to",gltfType:"number",convertConnectedTimeToFrames:!0,dataTransformer:(e,t)=>[e[0]*t._animationTargetFps]}}},outputs:{flows:{out:{name:"out"},err:{name:"error"},done:{name:"done"}}},interBlockConnectors:[{input:"animationGroup",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"animationGroups",inputBlockIndex:1,outputBlockIndex:2,isVariable:!0}],extraProcessor(e,t,n,o,r,a,s){const i=r.find(e=>"FlowGraphPlayAnimationBlock"===e.className);i&&(i.config.useVirtualTimeline=!0);const l=r.find(e=>"FlowGraphArrayIndexBlock"===e.className);l&&(l.config.referenceCollection="animations");const u=r[r.length-1];return u.config||(u.config={}),u.config.glTF=s,r}},"animation/stop":{blocks:["FlowGraphStopAnimationBlock","FlowGraphArrayIndexBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],inputs:{values:{animation:{name:"index",gltfType:"ref",toBlock:"FlowGraphArrayIndexBlock"}}},outputs:{flows:{out:{name:"out"},err:{name:"error"}}},interBlockConnectors:[{input:"animationGroup",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"animationGroups",inputBlockIndex:1,outputBlockIndex:2,isVariable:!0}],extraProcessor(e,t,n,o,r,a,s){const i=r.find(e=>"FlowGraphStopAnimationBlock"===e.className);i&&(i.config.skipOnAnimationEnd=!0);const l=r.find(e=>"FlowGraphArrayIndexBlock"===e.className);l&&(l.config.referenceCollection="animations");const u=r[r.length-1];return u.config||(u.config={}),u.config.glTF=s,r}},"animation/stopAt":{blocks:["FlowGraphStopAnimationBlock","FlowGraphArrayIndexBlock","KHR_interactivity/FlowGraphGLTFDataProvider"],configuration:{},inputs:{values:{animation:{name:"index",gltfType:"ref",toBlock:"FlowGraphArrayIndexBlock"},stopTime:{name:"stopAtFrame",gltfType:"number",convertConnectedTimeToFrames:!0,dataTransformer:(e,t)=>[e[0]*t._animationTargetFps]}}},outputs:{flows:{out:{name:"out"},err:{name:"error"},done:{name:"done"}}},interBlockConnectors:[{input:"animationGroup",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"animationGroups",inputBlockIndex:1,outputBlockIndex:2,isVariable:!0}],extraProcessor(e,t,n,o,r,a,s){const i=r.find(e=>"FlowGraphStopAnimationBlock"===e.className);i&&(i.config.useVirtualStopAt=!0,i.config.skipOnAnimationEnd=!0);const l=r.find(e=>"FlowGraphArrayIndexBlock"===e.className);l&&(l.config.referenceCollection="animations");const u=r[r.length-1];return u.config||(u.config={}),u.config.glTF=s,r}},"math/switch":{blocks:["FlowGraphDataSwitchBlock"],configuration:{cases:{name:"cases",isArray:!0,inOptions:!0,defaultValue:[],configurationType:"int[]",invalidUsesDefault:!0,generatesCaseInputValueSockets:!0,uniqueValues:!0}},inputs:{values:{selection:{name:"case",gltfType:"int"},default:{name:"default"},"[case]":{name:"$1"}}},outputs:{values:{value:{name:"value"}}},validation(e){var n;const o=null===(n=e.configuration)||void 0===n?void 0:n.cases;if(o&&o.value){if(!o.value.every(e=>"number"==typeof e&&/^-?\d+$/.test(e.toString())))return t.Logger.Warn("Switch cases should be integers. Using empty array instead."),o.value=[],{valid:!0};const e=new Set(o.value);o.value=Array.from(e)}return{valid:!0}},extraProcessor(e,t,n,o,r){const a=r[0];return a.dataInputs.forEach(e=>{"default"!==e.name&&"case"!==e.name&&(e.name="in_"+e.name)}),a.config||(a.config={}),a.config.treatCasesAsIntegers=!0,r}},"debug/log":{blocks:["FlowGraphConsoleLogBlock"],inputs:{flows:{in:{name:"in"}},values:{"[parameter]":{name:"$1"}}},outputs:{flows:{out:{name:"out"}}},configuration:{severity:{name:"severity",configurationType:"int",defaultValue:0,invalidUsesDefault:!0,validationOnly:!0,configurationGroup:"debugLog"},message:{name:"messageTemplate",configurationType:"string",defaultValue:"",invalidUsesDefault:!0,inOptions:!0,configurationGroup:"debugLog",debugLogTemplate:!0}}}};function yo(e,t=["a"],n){return{blocks:[e],inputs:{values:t.reduce((e,t)=>(e[t]={name:t},e),{})},outputs:{values:{value:{name:"value",typeSourceInput:t[0]}}},extraProcessor(e,t,o,r,a){var s;if(n){(s=a[0]).config||(s.config={}),a[0].config.preventIntegerFloatArithmetic=!0;let t=-1;Object.keys(e.values||{}).find(n=>{var o;return void 0!==(null===(o=e.values)||void 0===o?void 0:o[n].type)&&(t=e.values[n].type,!0)}),-1!==t&&(a[0].config.type=r.arrays.types[t].flowGraphType)}return a},validation:e=>n?bo(e):{valid:!0}}}function bo(e){if(e.values){const t=Object.keys(e.values).map(t=>e.values[t].type).filter(e=>void 0!==e);if(!t.every(e=>e===t[0]))return{valid:!1,error:"All inputs must be of the same type"}}return{valid:!0}}function To(e){for(let t=0;t<e.length;t++){const n=e[t];if(-1==="[]{}".indexOf(n))continue;let o=1;for(;e[t+o]===n;)o++;if(o%2!=0)return!0;t+=o-1}return!1}function xo(e){let t=0,n=-1;const o=[],r=new Set;for(let a=0;a<e.length;a++){const s=e[a];if("{"===s)if(0===t)t=1;else{if(1!==t)return{valid:!1,sockets:[]};t=0}else if("}"===s)if(0===t)t=3;else if(3===t)t=0;else{if(2!==t)return{valid:!1,sockets:[]};{const s=e.substring(n+1,a);r.has(s)||(r.add(s),o.push(s)),t=0}}else if(1===t)n=a-1,t=2;else if(3===t)return{valid:!1,sockets:[]}}return{valid:0===t,sockets:0===t?o:[]}}function Ao(e,t=new Set){var n,o,r;const a=null===(r=null===(o=null===(n=e.configuration)||void 0===n?void 0:n.pointer)||void 0===o?void 0:o.value)||void 0===r?void 0:r[0];if("string"!=typeof a)return{valid:!1,error:"A pointer operation requires a string `pointer` configuration value"};if(0!==a.length&&"/"!==a[0])return{valid:!1,error:`The JSON Pointer Template "${a}" is not a syntactically valid JSON Pointer`};const s=e=>({valid:!1,error:`The JSON Pointer Template "${a}" is invalid: ${e}`}),i=new Set;for(const e of a.split("/")){if(/~(?:[^01]|$)/.test(e))return s(`the path segment "${e}" contains an invalid RFC 6901 escape`);const n="["===e[0]&&"["!==e[1],o="{"===e[0]&&"{"!==e[1];if(!n&&!o){if(To(e))return s(`the path segment "${e}" contains an odd number of consecutive brackets`);continue}const r=n?"]":"}",a=e.substring(1,e.length-1);if(e.length<3||e[e.length-1]!==r||/[[{]/.test(a)||/[\]}]/.test(a))return s(`the template parameter path segment "${e}" is malformed`);const l=a.replace(/~1/g,"/").replace(/~0/g,"~");if(t.has(l))return s(`the template parameter "${l}" uses a reserved input socket id`);if(i.has(l))return s(`the template parameter "${l}" is used more than once`);i.add(l)}return{valid:!0}}function wo(){return Object.keys(vo)}const Ro="f798712c5685bc9223a628140fba707db8889300",Co={float:{length:1,flowGraphType:"number",elementType:"number"},bool:{length:1,flowGraphType:"boolean",elementType:"boolean"},float2:{length:2,flowGraphType:"Vector2",elementType:"number"},float3:{length:3,flowGraphType:"Vector3",elementType:"number"},float4:{length:4,flowGraphType:"Vector4",elementType:"number"},float4x4:{length:16,flowGraphType:"Matrix",elementType:"number"},float2x2:{length:4,flowGraphType:"Matrix2D",elementType:"number"},float3x3:{length:9,flowGraphType:"Matrix3D",elementType:"number"},int:{length:1,flowGraphType:"FlowGraphInteger",elementType:"number"},ref:{length:1,flowGraphType:"string",elementType:"string"},custom:{length:0,flowGraphType:"any",elementType:"any"}};function Oo(e){if(Array.isArray(e))return e.map(e=>Oo(e));if(null!==e&&"object"==typeof e){const t={};for(const[n,o]of Object.entries(e))Object.defineProperty(t,n,{configurable:!0,enumerable:!0,value:Oo(o),writable:!0});return t}return e}function Mo(e){return Oo(e)}function ko(e,t){return"number"==typeof e&&Number.isInteger(e)&&e>=0&&e<t}function Io(e,t,n){e.push({path:t,message:n,severity:"error"})}function So(e){return""===e||/^(?:\/(?:[^~]|~[01])*)*$/.test(e)}function Fo(e,t,n,o,r,a){var s,i,l,u,c,d;if(e&&Object.prototype.hasOwnProperty.call(e,t))return!0;if(t===a&&e&&Object.prototype.hasOwnProperty.call(e,a))return!0;if(!Object.keys(null!=e?e:{}).some(e=>e.startsWith("[")&&e.endsWith("]")))return!1;if("event/receive"===n.operation){const e=null===(l=null===(i=null===(s=o.configuration)||void 0===s?void 0:s.event)||void 0===i?void 0:i.value)||void 0===l?void 0:l[0];return"number"==typeof e&&Object.prototype.hasOwnProperty.call(null!==(d=null===(c=null===(u=r.events)||void 0===u?void 0:u[e])||void 0===c?void 0:c.values)&&void 0!==d?d:{},t)}return!0}function Lo(e,t,n,o){var r,a;return!!ko(e,null!==(a=null===(r=t.types)||void 0===r?void 0:r.length)&&void 0!==a?a:0)||(Io(n,o,`Type index ${String(e)} is out of range.`),!1)}function Eo(e,t,n,o){if(!Lo(e.type,t,n,`${o}/type`))return;if(void 0===e.value)return;const r=t.types[e.type],a=Co[r.signature];a&&"custom"!==r.signature&&e.value.length!==a.length&&Io(n,`${o}/value`,`Expected ${a.length} value component(s) for type "${r.signature}", received ${e.value.length}.`);for(let t=0;t<e.value.length;t++){const a=e.value[t];let s=!0;switch(r.signature){case"bool":s="boolean"==typeof a;break;case"int":s="number"==typeof a&&Number.isInteger(a)&&a>=-2147483648&&a<=2147483647;break;case"float":case"float2":case"float3":case"float4":case"float2x2":case"float3x3":case"float4x4":s="number"==typeof a&&Number.isFinite(a);break;case"ref":s="string"==typeof a&&So(a)}s||Io(n,`${o}/value/${t}`,`Value component is invalid for type "${r.signature}".`)}}function No(e,t){if(!e)return!1;const n=e=>"number"==typeof e&&Number.isInteger(e)&&e>=-2147483648&&e<=2147483647;switch(t){case"bool":return 1===e.length&&"boolean"==typeof e[0];case"int":return 1===e.length&&n(e[0]);case"int[]":return e.every(n);case"string":return 1===e.length&&"string"==typeof e[0];default:return e.length>0}}function Bo(e,t,n){var o,r,a,s,i,l,u,c;switch(t){case"types":return null!==(r=null===(o=e.types)||void 0===o?void 0:o.length)&&void 0!==r?r:0;case"variables":return null!==(s=null===(a=e.variables)||void 0===a?void 0:a.length)&&void 0!==s?s:0;case"events":return null!==(l=null===(i=e.events)||void 0===i?void 0:i.length)&&void 0!==l?l:0;case"nodes":return null!==(c=null===(u=e.nodes)||void 0===u?void 0:u.length)&&void 0!==c?c:0;case"assetNodes":return null!=n?n:0;default:return 0}}function Go(e,t,n,o){var r,a;if(!e||!No(e.value,t.configurationType)||!e.value)return!1;if(void 0!==t.minItems&&e.value.length<t.minItems)return!1;if(void 0!==t.minimum&&e.value.some(e=>"number"!=typeof e||e<t.minimum))return!1;if(void 0!==t.maximum&&e.value.some(e=>"number"!=typeof e||e>t.maximum))return!1;if(t.indexSource){const r=Bo(n,t.indexSource,o);if(e.value.some(e=>!ko(e,r)))return!1}if(t.allowedSignatures){const o=e.value[0],s="number"==typeof o?null===(a=null===(r=n.types)||void 0===r?void 0:r[o])||void 0===a?void 0:a.signature:void 0;if(!s||!t.allowedSignatures.includes(s))return!1}return!(t.debugLogTemplate&&!xo(e.value[0]).valid)}function Po(e,t,n,o){var r,a;for(const[s,i]of Object.entries(null!==(r=t.configuration)&&void 0!==r?r:{})){if(!i.generatesOutputFlowSockets)continue;const t=null===(a=e.configuration)||void 0===a?void 0:a[s],r=Go(t,i,n,o)?t.value:i.defaultValue;return new Set(Array.isArray(r)?r.map(String):[])}}function $o(e,t,n){var o;const r=null===(o=e.outputs)||void 0===o?void 0:o.flows;return!(!r||!Object.prototype.hasOwnProperty.call(r,t))||(!Object.keys(null!=r?r:{}).some(e=>e.startsWith("[")&&e.endsWith("]"))||!n||n.has(t))}function Vo(e,t,n){var o,r,a,s,i,l,u,c;const d=Mo(e);for(let e=0;e<(null!==(r=null===(o=d.nodes)||void 0===o?void 0:o.length)&&void 0!==r?r:0);e++){const o=d.nodes[e],r=t[o.declaration];if(!r||"unknown-core"===r.support||"unsupported-extension"===r.support)continue;const h=po(r.source,!1);if(!(null==h?void 0:h.configuration))continue;const m=new Map;for(const[e,t]of Object.entries(h.configuration))if(t.configurationGroup){const r=Go(null===(a=o.configuration)||void 0===a?void 0:a[e],t,d,n);m.set(t.configurationGroup,(null===(s=m.get(t.configurationGroup))||void 0===s||s)&&r)}for(const[e,t]of Object.entries(h.configuration)){const r=(!t.configurationGroup||!0===m.get(t.configurationGroup))&&Go(null===(i=o.configuration)||void 0===i?void 0:i[e],t,d,n);r||void 0===t.defaultValue?r&&t.uniqueValues&&(null===(c=null===(u=o.configuration)||void 0===u?void 0:u[e])||void 0===c?void 0:c.value)&&(o.configuration[e].value=Array.from(new Set(o.configuration[e].value))):(null!==(l=o.configuration)&&void 0!==l||(o.configuration={}),o.configuration[e]={value:Array.isArray(t.defaultValue)?Oo(t.defaultValue):[t.defaultValue]})}}return d}function Do(e){const t=[];for(const n of e.split("/")){const e=n.startsWith("[")&&!n.startsWith("[[")?"int":n.startsWith("{")&&!n.startsWith("{{")?"ref":void 0;if(e){const o=n.substring(1,n.length-1).replace(/~1/g,"/").replace(/~0/g,"~");t.push({name:o,signature:e})}}return t}function Ho(e,t,n,o=new Set){var r;return"node"in e?Ko(e.node,null!==(r=e.socket)&&void 0!==r?r:"value",t,n,o):e.type}function Ko(e,t,n,o,r=new Set){var a,s,i,l,u,c,d,h,m,p,_,f,g,v,y,b,T,x,A,w,R,C,O,M,k;const I=`${e}:${t}`;if(r.has(I))return;if(r.add(I),!ko(e,null!==(s=null===(a=n.nodes)||void 0===a?void 0:a.length)&&void 0!==s?s:0))return;const S=n.nodes[e];if(!ko(S.declaration,o.length))return;const F=o[S.declaration],L=null===(l=null===(i=F.source.outputValueSockets)||void 0===i?void 0:i[t])||void 0===l?void 0:l.type;if(void 0!==L)return L;if("isValid"===t)return(()=>{var e;return null===(e=n.types)||void 0===e?void 0:e.findIndex(e=>"bool"===e.signature)})();if("pointer/get"===F.operation&&"value"===t){const e=null===(d=null===(c=null===(u=S.configuration)||void 0===u?void 0:u.type)||void 0===c?void 0:c.value)||void 0===d?void 0:d[0];return"number"==typeof e?e:void 0}if("variable/get"===F.operation&&"value"===t){const e=null===(p=null===(m=null===(h=S.configuration)||void 0===h?void 0:h.variable)||void 0===m?void 0:m.value)||void 0===p?void 0:p[0];return"number"==typeof e?null===(f=null===(_=n.variables)||void 0===_?void 0:_[e])||void 0===f?void 0:f.type:void 0}if("math/switch"===F.operation&&"value"===t){const e=null===(g=S.values)||void 0===g?void 0:g.default;return e?Ho(e,n,o,r):void 0}if("event/receive"===F.operation&&"event"!==t){const e=null===(b=null===(y=null===(v=S.configuration)||void 0===v?void 0:v.event)||void 0===y?void 0:y.value)||void 0===b?void 0:b[0];return"number"==typeof e?null===(w=null===(A=null===(x=null===(T=n.events)||void 0===T?void 0:T[e])||void 0===x?void 0:x.values)||void 0===A?void 0:A[t])||void 0===w?void 0:w.type:void 0}const E=function(e,t){return"value"!==t?"math/rgbToOkLCh"===e&&["l","c","h"].includes(t)||"math/rgbFromOkLCh"===e&&["r","g","b"].includes(t)||e.startsWith("math/extract")?"float":"math/matDecompose"===e?"rotation"===t?"float4":"translation"===t||"scale"===t?"float3":void 0:"math/quatToAxisAngle"===e?"axis"===t?"float3":"angle"===t?"float":void 0:"flow/doN"===e&&"currentCount"===t||"flow/for"===e&&"index"===t?"int":"flow/setDelay"===e&&"lastDelay"===t?"ref":"flow/throttle"===e&&"lastRemainingTime"===t?"float":"event/onStart"!==e&&"event/onTick"!==e&&"event/receive"!==e||"event"!==t?"event/onTick"===e&&"timeSinceLastTick"===t||"event/onTick"===e&&"timeSinceStart"===t?"float":void 0:"ref":["math/E","math/Pi","math/Tau","math/Inf","math/NaN","math/random","math/length","math/dot","math/determinant","math/quatAngleBetween"].includes(e)?"float":["math/eq","ref/eq","math/lt","math/le","math/gt","math/ge","math/isNaN","math/isInf","type/intToBool","type/floatToBool"].includes(e)?"bool":["math/clz","math/ctz","math/popcnt","type/boolToInt","type/floatToInt"].includes(e)?"int":["type/boolToFloat","type/intToFloat"].includes(e)?"float":void 0}(F.operation,t);if(E)return null===(R=n.types)||void 0===R?void 0:R.findIndex(e=>e.signature===E);const N=po(F.source,!1),B=null===(O=null===(C=null==N?void 0:N.outputs)||void 0===C?void 0:C.values)||void 0===O?void 0:O[t],G=null==B?void 0:B.gltfType,P="number"===G?"float":"boolean"===G?"bool":G;if(P&&P in Co)return null===(M=n.types)||void 0===M?void 0:M.findIndex(e=>e.signature===P);const $=(null==B?void 0:B.typeSourceInput)?null===(k=S.values)||void 0===k?void 0:k[B.typeSourceInput]:void 0;return $?Ho($,n,o,r):void 0}function Wo(e,t,n,o,r,a,s){var i,l,u,c,d,h,m,p,_,f,g,v,y,b,T,x,A,w,R,C,O,M,k,I,S,F,L,E,N,B,G,P,$,V,D,H,K,W,U,j,z,q,Y;const X=`${a}/nodes/${t}`;if(!ko(e.declaration,o.length))return void Io(r,`${X}/declaration`,`Declaration index ${String(e.declaration)} is out of range.`);const Q=o[e.declaration],J="unsupported-extension"===Q.support?_o(Q.source):po(Q.source,!1);if("unknown-core"===Q.support||!J)return;const Z=(e,t,n)=>{e.invalidUsesDefault||void 0!==e.defaultValue?function(e,t,n){e.push({path:t,message:n,severity:"warning"})}(r,t,`${n} The default configuration will be used.`):Io(r,t,n)};for(const[t,n]of Object.entries(null!==(i=e.configuration)&&void 0!==i?i:{}))n.value&&0===n.value.length&&Io(r,`${X}/configuration/${t}/value`,"Configuration value arrays must contain at least one item when present.");for(const[t,a]of Object.entries(null!==(l=J.configuration)&&void 0!==l?l:{})){const i=null===(u=e.configuration)||void 0===u?void 0:u[t],l=!!i&&No(i.value,a.configurationType);if(!i&&a.required?Io(r,`${X}/configuration/${t}`,`Required configuration "${t}" is missing.`):i&&!l&&Z(a,`${X}/configuration/${t}`,`Configuration "${t}" is invalid.`),l&&i.value&&void 0!==a.minItems&&i.value.length<a.minItems&&Io(r,`${X}/configuration/${t}/value`,`Configuration "${t}" requires at least ${a.minItems} value(s).`),l&&i.value&&a.indexSource){const e=Bo(n,a.indexSource,s);for(let n=0;n<i.value.length;n++)ko(i.value[n],e)||Z(a,`${X}/configuration/${t}/value/${n}`,`Index is out of range for graph ${a.indexSource}.`)}if(l&&i.value&&a.allowedSignatures){const e=i.value[0],o="number"==typeof e?null===(d=null===(c=n.types)||void 0===c?void 0:c[e])||void 0===d?void 0:d.signature:void 0;o&&a.allowedSignatures.includes(o)||Z(a,`${X}/configuration/${t}/value/0`,`Type "${String(o)}" is not supported by this operation.`)}if(l&&i.value&&a.debugLogTemplate&&!xo(i.value[0]).valid&&Z(a,`${X}/configuration/${t}/value/0`,`Configuration "${t}" is not a valid debug message template.`),l&&i.value&&(void 0!==a.minimum||void 0!==a.maximum)){const e=i.value[0];(void 0!==a.minimum&&e<a.minimum||void 0!==a.maximum&&e>a.maximum)&&Z(a,`${X}/configuration/${t}/value/0`,`Configuration "${t}" must be between ${String(a.minimum)} and ${String(a.maximum)}.`)}if(l&&i.value&&a.generatesInputValueSockets)for(const t of i.value){if("number"!=typeof t||!ko(t,null!==(m=null===(h=n.variables)||void 0===h?void 0:h.length)&&void 0!==m?m:0))continue;const a=null===(p=e.values)||void 0===p?void 0:p[String(t)];a?Ho(a,n,o)!==n.variables[t].type&&Io(r,`${X}/values/${t}/type`,`Configured input value socket "${t}" has the wrong type.`):Io(r,`${X}/values/${t}`,`Required configured input value socket "${t}" is missing.`)}if(l&&i.value&&a.generatesCaseInputValueSockets){const t=(null===(_=e.values)||void 0===_?void 0:_.default)?Ho(e.values.default,n,o):void 0;for(const a of i.value){const s=null===(f=e.values)||void 0===f?void 0:f[String(a)];s?void 0!==t&&Ho(s,n,o)!==t&&Io(r,`${X}/values/${a}/type`,`Case input value socket "${a}" must match the default socket type.`):Io(r,`${X}/values/${a}`,`Required case input value socket "${a}" is missing.`)}}if(l&&i.value&&a.pointerTemplate&&"string"==typeof i.value[0])for(const t of Do(i.value[0])){const a=null===(g=e.values)||void 0===g?void 0:g[t.name],s=null!==(y=null===(v=n.types)||void 0===v?void 0:v.findIndex(e=>e.signature===t.signature))&&void 0!==y?y:-1;a?(s<0||Ho(a,n,o)!==s)&&Io(r,`${X}/values/${t.name}/type`,`Pointer template input "${t.name}" must have type "${t.signature}".`):Io(r,`${X}/values/${t.name}`,`Required pointer template input "${t.name}" is missing.`)}}if("debug/log"===Q.operation){const t=null===(b=J.configuration)||void 0===b?void 0:b.severity,o=null===(T=J.configuration)||void 0===T?void 0:T.message,a=!!t&&Go(null===(x=e.configuration)||void 0===x?void 0:x.severity,t,n,s),i=!!o&&Go(null===(A=e.configuration)||void 0===A?void 0:A.message,o,n,s),l=a&&i?e.configuration.message.value[0]:"";for(const t of xo(l).sockets)(null===(w=e.values)||void 0===w?void 0:w[t])||Io(r,`${X}/values/${t}`,`Required debug message template input "${t}" is missing.`)}for(const[t,a]of Object.entries(null!==(C=null===(R=J.inputs)||void 0===R?void 0:R.values)&&void 0!==C?C:{})){if(t.startsWith("[")||(null===(O=e.values)||void 0===O?void 0:O[t])||Io(r,`${X}/values/${t}`,`Required input value socket "${t}" is missing.`),"event/send"===Q.operation){const t=null===(I=null===(k=null===(M=e.configuration)||void 0===M?void 0:M.event)||void 0===k?void 0:k.value)||void 0===I?void 0:I[0],a="number"==typeof t?null===(S=n.events)||void 0===S?void 0:S[t]:void 0;for(const[t,s]of Object.entries(null!==(F=null==a?void 0:a.values)&&void 0!==F?F:{})){const a=null===(L=e.values)||void 0===L?void 0:L[t];a?Ho(a,n,o)!==s.type&&Io(r,`${X}/values/${t}/type`,`Custom event input value socket "${t}" has the wrong type.`):Io(r,`${X}/values/${t}`,`Required custom event input value socket "${t}" is missing.`)}}const s="number"===a.gltfType?"float":"boolean"===a.gltfType?"bool":a.gltfType,i=null===(E=e.values)||void 0===E?void 0:E[t];if(i&&s&&s in Co){const e=Ho(i,n,o);void 0!==e&&(null===(B=null===(N=n.types)||void 0===N?void 0:N[e])||void 0===B?void 0:B.signature)!==s&&Io(r,`${X}/values/${t}/type`,`Input value socket "${t}" must have type "${s}".`)}}if(J.validation)try{const t=Oo(e);for(const e of Object.values(null!==(G=t.values)&&void 0!==G?G:{}))void 0===e.type&&(e.type=Ho(e,n,o));const a=J.validation(t,n);a.valid||Io(r,X,null!==(P=a.error)&&void 0!==P?P:`Operation "${Q.operation}" is invalid.`)}catch(e){Io(r,X,e.message)}for(const[a,s]of Object.entries(null!==($=e.values)&&void 0!==$?$:{}))if("unsupported-extension"!==Q.support||(null===(V=Q.source.inputValueSockets)||void 0===V?void 0:V[a])||Io(r,`${X}/values/${a}`,`Input value socket "${a}" is not defined by operation "${Q.operation}".`),"node"in s){if("value"in s&&Io(r,`${X}/values/${a}`,"An input value socket cannot define both inline and node sources."),!ko(s.node,null!==(H=null===(D=n.nodes)||void 0===D?void 0:D.length)&&void 0!==H?H:0)){Io(r,`${X}/values/${a}/node`,`Node index ${String(s.node)} is out of range.`);continue}s.node>=t&&Io(r,`${X}/values/${a}/node`,"Value connections must reference an earlier node."),void 0!==s.type&&Lo(s.type,n,r,`${X}/values/${a}/type`);const e=n.nodes[s.node];if(ko(e.declaration,o.length)){const t=o[e.declaration],i="unsupported-extension"===t.support?_o(t.source):po(t.source,!1),l=null!==(K=s.socket)&&void 0!==K?K:"value",u=Fo(null===(W=null==i?void 0:i.outputs)||void 0===W?void 0:W.values,l,t,e,n,"value");i&&!u&&Io(r,`${X}/values/${a}/socket`,`Output value socket "${l}" does not exist on node ${s.node}.`);const c=null===(j=null===(U=t.source.outputValueSockets)||void 0===U?void 0:U[l])||void 0===j?void 0:j.type,d=null!=c?c:Ko(s.node,l,n,o);void 0!==s.type&&void 0!==d&&s.type!==d&&Io(r,`${X}/values/${a}/type`,`Type assertion does not match output socket "${l}".`)}}else Eo(s,n,r,`${X}/values/${a}`);for(const[o,a]of Object.entries(null!==(z=e.flows)&&void 0!==z?z:{}))$o(J,o,Po(e,J,n,s))||Io(r,`${X}/flows/${o}`,`Output flow socket "${o}" is not defined by operation "${Q.operation}".`),ko(a.node,null!==(Y=null===(q=n.nodes)||void 0===q?void 0:q.length)&&void 0!==Y?Y:0)?a.node<=t&&Io(r,`${X}/flows/${o}/node`,"Flow connections must reference a later node."):Io(r,`${X}/flows/${o}/node`,`Node index ${String(a.node)} is out of range.`)}function Uo(e,t=0,n,o){var r,a,s,i,l,u,c,d,h,m,p,_,f,g,v,y,b;const T=[],x=`/extensions/KHR_interactivity/graphs/${t}`;null===e||"object"!=typeof e||Array.isArray(e)?(Io(T,x,"Behavior graph must be an object."),e={}):e=Mo(e);const A={types:()=>({signature:"custom"}),variables:()=>({type:-1}),events:()=>({}),declarations:()=>({op:""}),nodes:()=>({declaration:-1})};for(const t of["types","variables","events","declarations","nodes"]){const n=e[t];void 0===n||Array.isArray(n)?Array.isArray(n)&&0===n.length?Io(T,`${x}/${t}`,`"${t}" must contain at least one item when present.`):Array.isArray(n)&&(e[t]=n.map((e,n)=>null===e||"object"!=typeof e||Array.isArray(e)?(Io(T,`${x}/${t}/${n}`,`Each "${t}" item must be an object.`),A[t]()):e)):(Io(T,`${x}/${t}`,`"${t}" must be an array when present.`),e[t]=[])}for(let t=0;t<(null!==(a=null===(r=e.events)||void 0===r?void 0:r.length)&&void 0!==a?a:0);t++)e.events[t].values&&0===Object.keys(e.events[t].values).length&&Io(T,`${x}/events/${t}/values`,'"values" must contain at least one property when present.');for(let t=0;t<(null!==(i=null===(s=e.declarations)||void 0===s?void 0:s.length)&&void 0!==i?i:0);t++){const n=e.declarations[t];for(const e of["inputValueSockets","outputValueSockets"])n[e]&&0===Object.keys(n[e]).length&&Io(T,`${x}/declarations/${t}/${e}`,`"${e}" must contain at least one property when present.`)}for(let t=0;t<(null!==(u=null===(l=e.nodes)||void 0===l?void 0:l.length)&&void 0!==u?u:0);t++){const n=e.nodes[t];for(const e of["configuration","values","flows"])n[e]&&0===Object.keys(n[e]).length&&Io(T,`${x}/nodes/${t}/${e}`,`"${e}" must contain at least one property when present.`)}const w=new Set,R=(null!==(c=e.declarations)&&void 0!==c?c:[]).map((t,o)=>{var r,a,s,i;const l=Object.keys(null!==(r=t.inputValueSockets)&&void 0!==r?r:{}).sort().map(e=>`${JSON.stringify(e)}:${t.inputValueSockets[e].type}`).join(","),u=`${JSON.stringify(t.op)}:${JSON.stringify(null!==(a=t.extension)&&void 0!==a?a:"")}:${l}`;w.has(u)&&Io(T,`${x}/declarations/${o}`,"Duplicate equivalent declaration."),w.add(u);const{support:c}=function(e,t,n){const o=e.extension&&n&&!n.has(e.extension)?void 0:po(e,!1);return o?e.extension&&o.declarationSchema&&!function(e,t,n){const o=(e,n)=>{const o=Object.keys(null!=e?e:{}).sort(),r=Object.keys(n).sort();return o.length===r.length&&!o.some((e,t)=>e!==r[t])&&o.every(o=>{var r,a;return(null===(a=null===(r=t.types)||void 0===r?void 0:r[e[o].type])||void 0===a?void 0:a.signature)===n[o]})};return o(e.inputValueSockets,n.inputValueSockets)&&o(e.outputValueSockets,n.outputValueSockets)}(e,t,o.declarationSchema)?{mapping:void 0,support:"unsupported-extension"}:{mapping:o,support:e.extension?"extension":"core"}:{mapping:void 0,support:e.extension?"unsupported-extension":"unknown-core"}}(t,e,n);"unknown-core"===c&&Io(T,`${x}/declarations/${o}/op`,`Unknown core operation "${t.op}".`),t.extension||!t.inputValueSockets&&!t.outputValueSockets||Io(T,`${x}/declarations/${o}`,"Core operation declarations cannot define dynamic value sockets.");for(const[n,r]of Object.entries(null!==(s=t.inputValueSockets)&&void 0!==s?s:{}))Lo(r.type,e,T,`${x}/declarations/${o}/inputValueSockets/${n}/type`);for(const[n,r]of Object.entries(null!==(i=t.outputValueSockets)&&void 0!==i?i:{}))Lo(r.type,e,T,`${x}/declarations/${o}/outputValueSockets/${n}/type`);return{index:o,operation:t.extension?`${t.op}:${t.extension}`:t.op,support:c,source:t}}),C=new Set;for(let t=0;t<(null!==(h=null===(d=e.types)||void 0===d?void 0:d.length)&&void 0!==h?h:0);t++){const n=e.types[t].signature;"custom"!==n&&C.has(n)&&Io(T,`${x}/types/${t}/signature`,`Duplicate built-in type signature "${n}".`),C.add(n),"custom"===n||Co[n]||Io(T,`${x}/types/${t}/signature`,`Unknown built-in type signature "${n}".`)}for(let t=0;t<(null!==(p=null===(m=e.variables)||void 0===m?void 0:m.length)&&void 0!==p?p:0);t++)Eo(e.variables[t],e,T,`${x}/variables/${t}`);for(let t=0;t<(null!==(f=null===(_=e.events)||void 0===_?void 0:_.length)&&void 0!==f?f:0);t++){const n=e.events[t].id;void 0!==n&&e.events.slice(0,t).some(e=>e.id===n)&&Io(T,`${x}/events/${t}/id`,`Duplicate event id "${n}".`),e.events[t].values&&Object.prototype.hasOwnProperty.call(e.events[t].values,"event")&&Io(T,`${x}/events/${t}/values/event`,'Custom event value socket id "event" is reserved.');for(const[n,o]of Object.entries(null!==(g=e.events[t].values)&&void 0!==g?g:{}))Eo(o,e,T,`${x}/events/${t}/values/${n}`)}for(let t=0;t<(null!==(y=null===(v=e.nodes)||void 0===v?void 0:v.length)&&void 0!==y?y:0);t++)Wo(e.nodes[t],t,e,R,T,x,o);return{index:t,path:x,name:null!==(b=e.name)&&void 0!==b?b:`Graph ${t+1}`,source:e,effectiveSource:Vo(e,R,o),declarations:R,diagnostics:T,valid:!T.some(e=>"error"===e.severity)}}function jo(e,t,n){var o;const r=Oo(e),a=[];Array.isArray(r.graphs)||(Io(a,"/extensions/KHR_interactivity/graphs",'"graphs" must be an array.'),r.graphs=[]),0===r.graphs.length&&Io(a,"/extensions/KHR_interactivity/graphs","At least one behavior graph is required.");const s=null!==(o=r.graph)&&void 0!==o?o:0,i=ko(s,r.graphs.length)?s:-1;-1===i&&Io(a,"/extensions/KHR_interactivity/graph",`Default graph index ${String(s)} is out of range.`);const l=r.graphs.map((e,o)=>Uo(e,o,t,n));return r.graphs=l.map(e=>e.source),{specificationCommit:Ro,source:r,defaultGraphIndex:i,graphs:l,diagnostics:a}}const zo="/extensions/KHR_interactivity/events/",qo="/extensions/KHR_interactivity/delays/";function Yo(e,t){return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}class Xo{constructor(e,t,n=60,o=0,r,a){var s,i;this._gltf=t,this._animationTargetFps=n,this._graphIndex=o,this._supportedExtensions=r,this._declarationModels=a,this._types=[],this._mappings=[],this._staticVariables=[],this._events=[],this._internalEventsCounter=0,this._nodes=[],this._insertedBlocks=[],this._interactivityGraph=this._declarationModels?Vo(e,this._declarationModels,null!==(i=null===(s=this._gltf.nodes)||void 0===s?void 0:s.length)&&void 0!==i?i:0):Mo(e),this._parseTypes(),this._parseDeclarations(),this._parseVariables(),this._parseEvents(),this._parseNodes()}get _strictValidation(){return!!this._declarationModels}_hasDefaultFlowInput(e){return"flow/waitAll"!==e&&(e.startsWith("flow/")||e.startsWith("animation/")||"pointer/set"===e||"pointer/interpolate"===e||"variable/set"===e||"variable/interpolate"===e||"event/send"===e||"event/stopPropagation"===e||"flow/log:BABYLON"===e)}_getAllowedDynamicValueSockets(e,t,n){var o,r,a,s,i,l,u,c,d,h,m,p,_,f,g,v,y,b;if(("debug/log"===e||"flow/log:BABYLON"===e)&&"input"===n){const n=null===(a=null===(r=null===(o=t.configuration)||void 0===o?void 0:o["debug/log"===e?"message":"messageTemplate"])||void 0===r?void 0:r.value)||void 0===a?void 0:a[0];return new Set("string"==typeof n?xo(n).sockets:[])}if("event/send"===e&&"input"===n||"event/receive"===e&&"output"===n){const e=null===(l=null===(i=null===(s=t.configuration)||void 0===s?void 0:s.event)||void 0===i?void 0:i.value)||void 0===l?void 0:l[0];if("number"==typeof e)return new Set(Object.keys(null!==(d=null===(c=null===(u=this._interactivityGraph.events)||void 0===u?void 0:u[e])||void 0===c?void 0:c.values)&&void 0!==d?d:{}))}if("variable/set"===e&&"input"===n)return new Set((null!==(p=null===(m=null===(h=t.configuration)||void 0===h?void 0:h.variables)||void 0===m?void 0:m.value)&&void 0!==p?p:[]).map(String));if("math/switch"===e&&"input"===n)return new Set((null!==(g=null===(f=null===(_=t.configuration)||void 0===_?void 0:_.cases)||void 0===f?void 0:f.value)&&void 0!==g?g:[]).map(String));if(("pointer/get"===e||"pointer/set"===e||"pointer/interpolate"===e)&&"input"===n){const e=null===(b=null===(y=null===(v=t.configuration)||void 0===v?void 0:v.pointer)||void 0===y?void 0:y.value)||void 0===b?void 0:b[0];if("string"==typeof e)return new Set(e.split("/").filter(e=>e.startsWith("[")&&!e.startsWith("[[")||e.startsWith("{")&&!e.startsWith("{{")).map(e=>e.substring(1,e.length-1).replace(/~1/g,"/").replace(/~0/g,"~")))}}_getAllowedDynamicFlowSockets(e,t,n){var o,r,a;for(const[s,i]of Object.entries(null!==(o=t.configuration)&&void 0!==o?o:{})){if(!("input"===n?i.generatesInputFlowSockets:i.generatesOutputFlowSockets))continue;const t=null===(a=null===(r=e.configuration)||void 0===r?void 0:r[s])||void 0===a?void 0:a.value,o=t&&t.length>0&&("int"!==i.configurationType||1===t.length)&&t.every(e=>{var t,n;return"number"==typeof e&&Number.isInteger(e)&&e>=(null!==(t=i.minimum)&&void 0!==t?t:-2147483648)&&e<=(null!==(n=i.maximum)&&void 0!==n?n:2147483647)}),l=o?t:i.defaultValue;if("input"===n){const e=Array.isArray(l)&&"number"==typeof l[0]?l[0]:0;return new Set(Array.from({length:e},(e,t)=>String(t)))}return new Set(Array.isArray(l)?l.map(String):[])}}get arrays(){return{types:this._types,mappings:this._mappings,staticVariables:this._staticVariables,events:this._events,nodes:this._nodes}}_parseTypes(){if(this._interactivityGraph.types)for(const e of this._interactivityGraph.types)this._types.push(Co[e.signature])}_parseDeclarations(){var e;if(this._interactivityGraph.declarations)for(let n=0;n<this._interactivityGraph.declarations.length;n++){const o=this._interactivityGraph.declarations[n],r=null===(e=this._declarationModels)||void 0===e?void 0:e[n],a=!o.extension||!this._supportedExtensions||this._supportedExtensions.has(o.extension),s="unsupported-extension"===(null==r?void 0:r.support)?void 0:a?po(o,!1):void 0;if(!s&&!o.extension)throw new Error(`Unknown core KHR_interactivity operation "${o.op}".`);const i=null!=s?s:o.extension?_o(o):void 0;if(!i)throw t.Logger.Error(["No mapping found for declaration",o]),new Error("Error parsing declarations");this._mappings.push({flowGraphMapping:i,fullOperationName:o.extension?o.op+":"+o.extension:o.op,declaration:null!=r?r:{index:n,operation:o.extension?`${o.op}:${o.extension}`:o.op,support:s?o.extension?"extension":"core":"unsupported-extension",source:o}})}}_parseVariables(){if(this._interactivityGraph.variables)for(const e of this._interactivityGraph.variables){const t=this._parseVariable(e);this._staticVariables.push(t)}}_parseVariable(e,n){var o,r;const a=this._types[e.type];if(!a)throw t.Logger.Error(["No type found for variable",e]),new Error("Error parsing variables");if(e.value&&"custom"!==(null===(r=null===(o=this._interactivityGraph.types)||void 0===o?void 0:o[e.type])||void 0===r?void 0:r.signature)&&e.value.length!==a.length)throw t.Logger.Error(["Invalid value length for variable",e,a]),new Error("Error parsing variables");const s=e.value?e.value.slice():[];if(!s.length)switch(a.flowGraphType){case"boolean":s.push(!1);break;case"FlowGraphInteger":s.push(0);break;case"number":s.push(NaN);break;case"string":s.push("");break;case"Vector2":s.push(NaN,NaN);break;case"Vector3":s.push(NaN,NaN,NaN);break;case"Vector4":case"Matrix2D":case"Quaternion":s.push(NaN,NaN,NaN,NaN);break;case"Matrix":for(let e=0;e<16;e++)s.push(NaN);break;case"Matrix3D":for(let e=0;e<9;e++)s.push(NaN)}return"number"===a.elementType&&"string"==typeof s[0]?s[0]=parseFloat(s[0]):"string"===a.flowGraphType&&"string"==typeof s[0]&&(s[0]=this._normalizeStaticReference(s[0])),{type:a.flowGraphType,value:n?n(s,this):s}}_normalizeStaticReference(e){if(!e||e.startsWith(zo)||e.startsWith(qo))return"";if(!e.startsWith("/"))return"";let t=this._gltf;for(const n of e.substring(1).split("/")){const e=n.replace(/~1/g,"/").replace(/~0/g,"~");if(Array.isArray(t)){if(!/^(0|[1-9]\d*)$/.test(e))return"";t=t[parseInt(e,10)]}else{if(null===t||"object"!=typeof t||!Object.prototype.hasOwnProperty.call(t,e))return"";t=t[e]}}return null!==t&&"object"==typeof t?e:""}_parseEvents(){var e;if(!this._interactivityGraph.events)return;const n=new Set(this._interactivityGraph.events.flatMap(e=>void 0===e.id?[]:[e.id])),o=`__babylon_khr_internal_${this._graphIndex}_`;for(const r of this._interactivityGraph.events){let a;if(void 0===r.id){do{a=o+this._internalEventsCounter++}while(n.has(a));n.add(a)}const s={eventId:null!==(e=r.id)&&void 0!==e?e:a};r.values&&(s.eventData=Object.keys(r.values).map(e=>{var n;const o=null===(n=r.values)||void 0===n?void 0:n[e];if(!o)throw t.Logger.Error(["No value found for event key",e]),new Error("Error parsing events");const a=this._types[o.type];if(!a)throw t.Logger.Error(["No type found for event value",o]),new Error("Error parsing events");const s=void 0!==o.value?this._parseVariable(o):void 0;return{id:e,type:a.flowGraphType,eventData:!0,value:s}})),this._events.push(s)}}_parseNodes(){var e;if(this._interactivityGraph.nodes)for(let n=0;n<this._interactivityGraph.nodes.length;n++){const o=this._interactivityGraph.nodes[n];if("number"!=typeof o.declaration)throw t.Logger.Error(["No declaration found for node",o]),new Error("Error parsing nodes");const r=this._mappings[o.declaration];if(!r)throw t.Logger.Error(["No mapping found for node",o]),new Error("Error parsing nodes");if(r.flowGraphMapping.validation){const t=r.flowGraphMapping.validation(o,this._interactivityGraph,this._gltf);if(!t.valid)throw new Error(`Error validating interactivity node ${null===(e=this._interactivityGraph.declarations)||void 0===e?void 0:e[o.declaration].op} - ${t.error}`)}const a=[];"unsupported-extension"===r.declaration.support&&a.push(this._createUnsupportedExtensionBlock(o,n,r));for(let e=0;e<r.flowGraphMapping.blocks.length;e++){const t=r.flowGraphMapping.blocks[e],s=this._getEmptyBlock(t,r.fullOperationName,n,o.declaration,e);this._parseNodeConfiguration(o,s,r.flowGraphMapping,t),a.push(s)}this._nodes.push({blocks:a,fullOperationName:r.fullOperationName})}}_getEmptyBlock(e,n,o,r,a){return{uniqueId:t.RandomGUID(),className:e,dataInputs:[],dataOutputs:[],signalInputs:[],signalOutputs:[],config:{},type:n,metadata:void 0===o?{}:{khrInteractivity:{graphIndex:this._graphIndex,nodeIndex:o,declarationIndex:r,operation:n,role:null!=a?a:0,sourcePath:`/extensions/KHR_interactivity/graphs/${this._graphIndex}/nodes/${o}`}}}}_createUnsupportedExtensionBlock(e,t,n){var o,r,a,s;const i=this._getEmptyBlock("KHR_interactivity/FlowGraphUnsupportedInteractivityBlock",n.fullOperationName,t,e.declaration,0),l=new Set;for(const e of null!==(o=this._interactivityGraph.nodes)&&void 0!==o?o:[])for(const n of Object.values(null!==(r=e.flows)&&void 0!==r?r:{}))n.node===t&&l.add(null!==(a=n.socket)&&void 0!==a?a:"in");const u=e=>Object.entries(null!=e?e:{}).map(([e,t])=>{var n,o,r;return{name:e,type:null===(n=this._types[t.type])||void 0===n?void 0:n.flowGraphType,signature:null===(r=null===(o=this._interactivityGraph.types)||void 0===o?void 0:o[t.type])||void 0===r?void 0:r.signature}});i.config={operation:n.fullOperationName,inputValueSockets:u(n.declaration.source.inputValueSockets),outputValueSockets:u(n.declaration.source.outputValueSockets),inputFlowSockets:Array.from(l).sort(),outputFlowSockets:Object.keys(null!==(s=e.flows)&&void 0!==s?s:{}).sort()};for(const e of i.config.inputValueSockets)i.dataInputs.push(this._createNewSocketConnection(e.name));for(const e of i.config.outputValueSockets)i.dataOutputs.push(this._createNewSocketConnection(e.name,!0));for(const e of i.config.inputFlowSockets)i.signalInputs.push(this._createNewSocketConnection(e));for(const e of i.config.outputFlowSockets)i.signalOutputs.push(this._createNewSocketConnection(e,!0));return i}_parseNodeConfiguration(e,n,o,r){var a;const s=e.configuration;if(s)for(const e in s){const i=s[e];if(!i)throw new Error("Error parsing node configuration");const l=null===(a=o.configuration)||void 0===a?void 0:a[e];if((l||!this._strictValidation)&&(!(null==l?void 0:l.validationOnly)&&(l&&l.toBlock?l.toBlock===r:0===o.blocks.indexOf(r)))){let o=null==l?void 0:l.defaultValue;(null==i?void 0:i.value)&&(o=i.value),(null==l?void 0:l.isArray)||(1!==o.length&&t.Logger.Warn(`Invalid non-array value length: ${o.length}`),o=o[0]),(null==l?void 0:l.dataTransformer)&&(o=l.dataTransformer(o,this)),void 0!==o&&(n.config[(null==l?void 0:l.name)||e]={value:o})}}}_parseNodeConnections(e){var n,o,r,a,s,i,l,u,c,d,h,m,p,_,f,g,v,y,b,T,x,A,w,R;for(let C=0;C<this._nodes.length;C++){const O=null===(n=this._interactivityGraph.nodes)||void 0===n?void 0:n[C];if(!O)throw t.Logger.Error(["No node found for interactivity node",this._nodes[C]]),new Error("Error parsing node connections");const M=this._nodes[C],k=this._mappings[O.declaration];if(!k)throw t.Logger.Error(["No mapping found for node",O]),new Error("Error parsing node connections");if(0===M.blocks.length){t.Logger.Warn(`Skipping connections for no-op node #${C} (unsupported operation: ${M.fullOperationName})`);continue}const I=O.flows||{},S=Object.keys(I).sort();for(const e of S){const n=I[e];let _=Yo(null===(o=k.flowGraphMapping.outputs)||void 0===o?void 0:o.flows,e);this._strictValidation&&(null==_?void 0:_.compatibilityOnly)&&(_=void 0);let f=!1;if(!_)for(const e in null===(r=k.flowGraphMapping.outputs)||void 0===r?void 0:r.flows)if(e.startsWith("[")&&e.endsWith("]")){const t=null===(s=null===(a=k.flowGraphMapping.outputs)||void 0===a?void 0:a.flows)||void 0===s?void 0:s[e];if(!this._strictValidation||!(null==t?void 0:t.compatibilityOnly)){f=!0,_=t;break}}const g=f?this._getAllowedDynamicFlowSockets(O,k.flowGraphMapping,"output"):void 0;if(this._strictValidation&&g&&!g.has(e)&&(_=void 0),!_&&!this._isUnsupportedExtensionBlock(M.blocks[0]))continue;const v=_?f?_.name.replace("$1",e):_.name:e,y=n.node,b=this._nodes[y];if(!b)throw t.Logger.Error(["No node found for input node id",y]),new Error("Error parsing node connections");if(0===b.blocks.length){t.Logger.Warn(`Dropping flow connection from node #${C} "${e}" to no-op node #${y} (unsupported operation: ${b.fullOperationName})`);continue}const T=_&&_.toBlock&&M.blocks.find(e=>e.className===_.toBlock)||M.blocks[0],x=null!==(i=T.signalOutputs.find(e=>e.name===v))&&void 0!==i?i:this._createNewSocketConnection(v,!0);T.signalOutputs.includes(x)||T.signalOutputs.push(x);const A=null===(l=this._mappings[this._interactivityGraph.nodes[y].declaration])||void 0===l?void 0:l.flowGraphMapping;if(!A)throw t.Logger.Error(["No mapping found for input node",b]),new Error("Error parsing node connections");let w=Yo(null===(u=A.inputs)||void 0===u?void 0:u.flows,n.socket||"in");this._strictValidation&&(null==w?void 0:w.compatibilityOnly)&&(w=void 0);let R=!1;if(!w){for(const e in null===(c=A.inputs)||void 0===c?void 0:c.flows)if(e.startsWith("[")&&e.endsWith("]")){const t=null===(h=null===(d=A.inputs)||void 0===d?void 0:d.flows)||void 0===h?void 0:h[e];this._strictValidation&&(null==t?void 0:t.compatibilityOnly)||(R=!0,w=t)}const e=R?this._getAllowedDynamicFlowSockets(this._interactivityGraph.nodes[y],A,"input"):void 0;if(this._strictValidation&&e&&!e.has(null!==(m=n.socket)&&void 0!==m?m:"in")&&(w=void 0),!w&&"in"===(null!==(p=n.socket)&&void 0!==p?p:"in")&&this._hasDefaultFlowInput(b.fullOperationName)&&(w={name:"in"}),!w&&!this._isUnsupportedExtensionBlock(b.blocks[0]))continue}const S=w?R?w.name.replace("$1",n.socket||""):w.name:n.socket||"in",F=w&&w.toBlock&&b.blocks.find(e=>e.className===w.toBlock)||b.blocks[0];let L=F.signalInputs.find(e=>e.name===S);L||(L=this._createNewSocketConnection(S),F.signalInputs.push(L)),L.connectedPointIds.push(x.uniqueId),x.connectedPointIds.push(L.uniqueId)}const F=O.values||{},L=Object.keys(F);for(const n of L){const o=F[n];let r=Yo(null===(_=k.flowGraphMapping.inputs)||void 0===_?void 0:_.values,n);this._strictValidation&&(null==r?void 0:r.compatibilityOnly)&&(r=void 0);let a=!1;if(!r)for(const e in null===(f=k.flowGraphMapping.inputs)||void 0===f?void 0:f.values)if(e.startsWith("[")&&e.endsWith("]")){const t=null===(v=null===(g=k.flowGraphMapping.inputs)||void 0===g?void 0:g.values)||void 0===v?void 0:v[e];this._strictValidation&&(null==t?void 0:t.compatibilityOnly)||(a=!0,r=t)}const s=a?this._getAllowedDynamicValueSockets(k.fullOperationName,O,"input"):void 0;if(!r||s&&!s.has(n))continue;const i=r?a?r.name.replace("$1",n):r.name:n,l=r&&r.toBlock&&M.blocks.find(e=>e.className===r.toBlock)||M.blocks[0],u=null!==(y=l.dataInputs.find(e=>e.name===i))&&void 0!==y?y:this._createNewSocketConnection(i);l.dataInputs.includes(u)||l.dataInputs.push(u);const c=!!(null==r?void 0:r.convertConnectedTimeToFrames);if(void 0!==o.value){const t=this._parseVariable(o,r&&r.dataTransformer);e._connectionValues[u.uniqueId]=t}else{if(void 0===o.node)throw t.Logger.Error(["Invalid value for value connection",o]),new Error("Error parsing node connections");{const r=o.node,a=o.socket||"value",s=this._nodes[r];if(!s)throw t.Logger.Error(["No node found for output socket reference",o]),new Error("Error parsing node connections");if(0===s.blocks.length){t.Logger.Warn(`Dropping value connection from no-op node #${r} (unsupported operation: ${s.fullOperationName}) into node #${C} "${n}"; consumer will use type-default value`);continue}const i=null===(b=this._mappings[this._interactivityGraph.nodes[r].declaration])||void 0===b?void 0:b.flowGraphMapping;if(!i)throw t.Logger.Error(["No mapping found for output socket reference",o]),new Error("Error parsing node connections");let l=Yo(null===(T=i.outputs)||void 0===T?void 0:T.values,a);this._strictValidation&&(null==l?void 0:l.compatibilityOnly)&&(l=void 0);let d=!1;if(!l){for(const e in null===(x=i.outputs)||void 0===x?void 0:x.values)if(e.startsWith("[")&&e.endsWith("]")){const t=null===(w=null===(A=i.outputs)||void 0===A?void 0:A.values)||void 0===w?void 0:w[e];this._strictValidation&&(null==t?void 0:t.compatibilityOnly)||(d=!0,l=t)}const e=d?this._getAllowedDynamicValueSockets(s.fullOperationName,this._interactivityGraph.nodes[r],"output"):void 0;if(!l||e&&!e.has(a))continue}const h=l?d?l.name.replace("$1",a):null==l?void 0:l.name:a,m=l&&l.toBlock&&s.blocks.find(e=>e.className===l.toBlock)||s.blocks[0];let p=m.dataOutputs.find(e=>e.name===h);p||(p=this._createNewSocketConnection(h,!0),m.dataOutputs.push(p)),c?this._connectWithSecondsToFramesConversion(e,p,u,C,O.declaration):(u.connectedPointIds.push(p.uniqueId),p.connectedPointIds.push(u.uniqueId))}}}if(k.flowGraphMapping.interBlockConnectors)for(const e of k.flowGraphMapping.interBlockConnectors){const t=e.input,n=e.output,o=e.isVariable;this._connectFlowGraphNodes(t,n,M.blocks[e.inputBlockIndex],M.blocks[e.outputBlockIndex],o)}if(k.flowGraphMapping.extraProcessor){const n=null===(R=this._interactivityGraph.declarations)||void 0===R?void 0:R[O.declaration];if(!n)throw t.Logger.Error(["No declaration found for extra processor",O]),new Error("Error parsing node connections");M.blocks=k.flowGraphMapping.extraProcessor(O,n,k.flowGraphMapping,this,M.blocks,e,this._gltf)}}}_createNewSocketConnection(e,n){return{uniqueId:t.RandomGUID(),name:e,_connectionType:n?1:0,connectedPointIds:[]}}_isUnsupportedExtensionBlock(e){return"KHR_interactivity/FlowGraphUnsupportedInteractivityBlock"===(null==e?void 0:e.className)}_connectWithSecondsToFramesConversion(e,t,n,o,r){const a=this._getEmptyBlock("FlowGraphMultiplyBlock","FlowGraphMultiplyBlock",o,r,-1);a.config={type:"number"};const s=this._createNewSocketConnection("a"),i=this._createNewSocketConnection("b"),l=this._createNewSocketConnection("value",!0);a.dataInputs.push(s,i),a.dataOutputs.push(l),e._connectionValues[i.uniqueId]={type:"number",value:[this._animationTargetFps]},s.connectedPointIds.push(t.uniqueId),t.connectedPointIds.push(s.uniqueId),n.connectedPointIds.push(l.uniqueId),l.connectedPointIds.push(n.uniqueId),this._insertedBlocks.push(a)}_connectFlowGraphNodes(e,t,n,o,r){const a=r?n.dataInputs:n.signalInputs,s=r?o.dataOutputs:o.signalOutputs,i=a.find(t=>t.name===e)||this._createNewSocketConnection(e),l=s.find(e=>e.name===t)||this._createNewSocketConnection(t,!0);a.find(t=>t.name===e)||a.push(i),s.find(e=>e.name===t)||s.push(l),i.connectedPointIds.push(l.uniqueId),l.connectedPointIds.push(i.uniqueId)}getVariableName(e){return"staticVariable_"+e}serializeToFlowGraph(){var e;const n={uniqueId:t.RandomGUID(),_userVariables:{},_connectionValues:{}};this._parseNodeConnections(n);for(let e=0;e<this._staticVariables.length;e++){const t=this._staticVariables[e];n._userVariables[this.getVariableName(e)]=t}const o=this._nodes.reduce((e,t)=>e.concat(t.blocks),[]).concat(this._insertedBlocks);return{name:null!==(e=this._interactivityGraph.name)&&void 0!==e?e:`Graph ${this._graphIndex+1}`,rightHanded:!0,allBlocks:o,executionContexts:[n]}}}class Qo{constructor(e,t){this._prefixes=e,this._fallback=t}addPrefix(e){this._prefixes.unshift(e)}convert(e){for(const{prefix:t,converter:n}of this._prefixes)if(e.startsWith(t))return n.convert(e);return this._fallback.convert(e)}}const Jo="/extensions/BABYLON_scene_objects/";class Zo{constructor(e,t){this._scene=e,this._tree=t}convert(e){if(!e.startsWith(Jo))throw new Error(`BabylonScenePathToObjectConverter: path "${e}" does not start with the expected prefix "${Jo}".`);const t=e.slice(34).split("/").filter(e=>e.length>0);if(0===t.length)throw new Error(`BabylonScenePathToObjectConverter: path "${e}" is missing a collection name.`);const n=t[0],o=this._tree[n];if(!o)throw new Error(`BabylonScenePathToObjectConverter: unknown collection "${n}" in path "${e}".`);if(2===t.length&&"length"===t[1])return{object:this._getCollectionArray(n),info:o.length};if(t.length<2)throw new Error(`BabylonScenePathToObjectConverter: path "${e}" is missing an instance id.`);if(!/^\d+$/.test(t[1]))throw new Error(`BabylonScenePathToObjectConverter: invalid uniqueId "${t[1]}" in path "${e}".`);const r=parseInt(t[1],10);if(!Number.isFinite(r)||r<0)throw new Error(`BabylonScenePathToObjectConverter: invalid uniqueId "${t[1]}" in path "${e}".`);const a=this._lookupInstanceByUniqueId(n,r);if(!a)throw new Error(`BabylonScenePathToObjectConverter: no ${n} instance found with uniqueId ${r} (path "${e}").`);if(2===t.length)return{object:a,info:this._buildIdentityAccessor(a)};if(t.length>3)throw new Error(`BabylonScenePathToObjectConverter: nested property paths are not yet supported (path "${e}").`);const s=t[2],i=o.__array__[s];if(!i||"boolean"==typeof i)throw new Error(`BabylonScenePathToObjectConverter: property "${s}" is not registered on ${n} (path "${e}").`);return{object:a,info:i}}_getCollectionArray(e){switch(e){case"transformNodes":return this._scene.transformNodes;case"meshes":return this._scene.meshes;case"materials":return this._scene.materials;default:return[]}}_lookupInstanceByUniqueId(e,t){switch(e){case"transformNodes":return this._scene.transformNodes.find(e=>e.uniqueId===t)||this._scene.meshes.find(e=>e.uniqueId===t);case"meshes":return this._scene.meshes.find(e=>e.uniqueId===t);case"materials":return this._scene.materials.find(e=>e.uniqueId===t);default:return}}_buildIdentityAccessor(e){return{type:"object",get:()=>e,getTarget:()=>e,isReadOnly:!0}}}const er={isKhrInteractivityRef:!0};class tr{convert(e){const n=e===zo,o=e.endsWith("/")?e.slice(0,-1):e;if(n||o.startsWith(zo)){const t=o.substring(37);return{object:er,info:{type:"object",isReadOnly:!0,get:()=>n?e:t.length>0?o:void 0,getTarget:()=>er}}}const r=o.substring(37),a=/^\d+$/.test(r)?parseInt(r,10):NaN;return{object:er,info:{type:"object",isReadOnly:!0,get:(e,n,o)=>{const r=o;if(!(!r||isNaN(a)||a<0))return t.IsDelayActive(r,a)?new t.FlowGraphInteger(a):void 0},getTarget:()=>er}}}}const nr="/extensions/KHR_interactivity/limits/",or={major:2,minor:0},rr=2147483647,ar={maxActiveAnimations:rr,maxActiveDelays:rr,maxActivePropertyInterpolations:rr,maxActiveVariableInterpolations:rr},sr={isKhrInteractivityAssetCapability:!0};class ir{constructor(e,t){this._gltf=e,this._isExtensionEnabled=t}convert(e){const t=e.endsWith("/")?e.slice(0,-1):e;if(t.startsWith(nr)){const n=ar[t.substring(37)];if(void 0===n)throw new Error(`Path ${e} is invalid`);return this._createAccessor("number",()=>n)}const n=t.substring(36);if("majorVersion"===n||"minorVersion"===n)return this._createAccessor("number",()=>{var e;return function(e){const[t,n]=(null!=e?e:"").split("."),o=parseInt(t,10),r=parseInt(n,10);return isNaN(o)?or:o!==or.major?o<or.major?{major:o,minor:isNaN(r)?0:r}:or:{major:o,minor:Math.min(isNaN(r)?0:r,or.minor)}}(null===(e=this._gltf.asset)||void 0===e?void 0:e.version)["majorVersion"===n?"major":"minor"]});const o=n.split("/");if(3===o.length&&"extensions"===o[0]&&"enabled"===o[2]){const e=o[1];return this._createAccessor("boolean",()=>this._isExtensionEnabled(e))}throw new Error(`Path ${e} is invalid`)}_createAccessor(e,t){return{object:sr,info:{type:e,isReadOnly:!0,get:t,getTarget:()=>sr}}}}class lr{encodeEventReference(e){return function(e){return zo+e}(e)}decodeEventReference(e){return function(e){return"string"==typeof(t=e)&&t.startsWith(zo)?e.substring(37):void 0;var t}(e)}decodeIndexReference(e,t){if(0===e.length||"/"!==e[0])return;const n=t?`/${t}/`:"/";if(!e.startsWith(n))return;const o=t?e.substring(n.length):e.substring(e.lastIndexOf("/")+1);return/^(0|[1-9]\d*)$/.test(o)?parseInt(o,10):void 0}getObjectReference(e,t){var n,o;const r=null===(o=null===(n=e._internalMetadata)||void 0===n?void 0:n.gltf)||void 0===o?void 0:o.pointers;if(!Array.isArray(r))return;const a=r.filter(e=>"string"==typeof e);if(0!==a.length){if(t){const e=a.find(e=>e.split("/")[1]===t);if(e)return e}return a[0]}}}const ur="KHR_interactivity",cr=new WeakMap;function dr(e){const t=cr.get(e);return null==t?void 0:t[t.length-1]}function hr(e){var t;return null!==(t=cr.get(e))&&void 0!==t?t:[]}class mr{constructor(e){this._loader=e,this.name=ur,this.order=200,this.enabled=this._loader.isExtensionUsed(ur),e._skipStartAnimationStep=!0}_initializePathConverter(e){var n;this._gltfPathConverter=G(this._loader.gltf,t=>pr(e,this._loader.parent.targetFps,t));const o=[{prefix:Jo,converter:new Zo(e,{transformNodes:{length:{type:"number",get:e=>e.length,getTarget:e=>e},__array__:{__target__:!0,name:{type:"string",get:e=>e.name,set:(e,t)=>{t.name=e},getTarget:e=>e},translation:{type:"Vector3",get:e=>e.position,set:(e,t)=>t.position.copyFrom(e),getTarget:e=>e},rotation:{type:"Quaternion",get:e=>{var n;return null!==(n=e.rotationQuaternion)&&void 0!==n?n:t.Quaternion.RotationYawPitchRoll(e.rotation.y,e.rotation.x,e.rotation.z)},set:(e,t)=>{t.rotationQuaternion?t.rotationQuaternion.copyFrom(e):t.rotationQuaternion=e.clone()},getTarget:e=>e},scale:{type:"Vector3",get:e=>e.scaling,set:(e,t)=>t.scaling.copyFrom(e),getTarget:e=>e},matrix:{type:"Matrix",get:e=>e.computeWorldMatrix(!1),getTarget:e=>e,isReadOnly:!0},globalMatrix:{type:"Matrix",get:e=>e.computeWorldMatrix(!0),getTarget:e=>e,isReadOnly:!0}}},meshes:{length:{type:"number",get:e=>e.length,getTarget:e=>e},__array__:{__target__:!0,name:{type:"string",get:e=>e.name,set:(e,t)=>{t.name=e},getTarget:e=>e},visible:{type:"boolean",get:e=>e.isVisible,set:(e,t)=>{t.isVisible=e},getTarget:e=>e}}},materials:{length:{type:"number",get:e=>e.length,getTarget:e=>e},__array__:{__target__:!0,name:{type:"string",get:e=>e.name,set:(e,t)=>{t.name=e},getTarget:e=>e}}}})}],r=new tr;o.push({prefix:zo,converter:r}),o.push({prefix:qo,converter:r});const a=new Set((null!==(n=this._loader.gltf.extensionsUsed)&&void 0!==n?n:[]).filter(e=>{var t;return K.has(e)&&!1!==(null===(t=this._loader.parent.extensionOptions[e])||void 0===t?void 0:t.enabled)})),s=new ir(this._loader.gltf,e=>a.has(e));o.push({prefix:"/extensions/KHR_interactivity/asset/",converter:s}),o.push({prefix:nr,converter:s});const i=new Qo(o,this._gltfPathConverter);return this._pathConverter=i,i}dispose(){this._loader=null,delete this._gltfPathConverter,delete this._pathConverter}onReady(){return D(this,void 0,void 0,function*(){var e,n,o,r,a,s,i,l;if(!this._loader.babylonScene)return;const u=this._loader.babylonScene,c=this._initializePathConverter(u),d=null===(e=this._loader.gltf.extensions)||void 0===e?void 0:e.KHR_interactivity;if(!d)return;const h=new Set((null!==(n=this._loader.gltf.extensionsUsed)&&void 0!==n?n:[]).filter(e=>{var t;return!1!==(null===(t=this._loader.parent.extensionOptions[e])||void 0===t?void 0:t.enabled)})),m=jo(d,h,null!==(r=null===(o=this._loader.gltf.nodes)||void 0===o?void 0:o.length)&&void 0!==r?r:0),p=this._loader.parent.extensionOptions[ur],_=null===(a=null==p?void 0:p.autoStart)||void 0===a||a,f=null!==(s=null==p?void 0:p.parseOnly)&&void 0!==s&&s,g=null===(i=null==p?void 0:p.strictValidation)||void 0===i||i,v=null!==(l=cr.get(u))&&void 0!==l?l:[],y={assetIndex:v.length,document:m,graphs:[],pathConverter:c,glTF:this._loader.gltf,hostResolver:new lr};v.push(y),cr.set(u,v),yield Promise.all(m.graphs.map(e=>D(this,void 0,void 0,function*(){var n,o;const r={graph:e,diagnostics:e.diagnostics.slice()};if(y.graphs[e.index]=r,e.valid||!g)try{const n=new Xo(g?e.effectiveSource:e.source,this._loader.gltf,this._loader.parent.targetFps,e.index,h,g?e.declarations:void 0).serializeToFlowGraph();if(r.serializedFlowGraph=n,f)return;const o=new t.FlowGraphCoordinator({scene:u,hostResolver:y.hostResolver});o.dispatchEventsSynchronously=!1,r.coordinator=o,r.flowGraph=yield t.ParseFlowGraphAsync(n,{coordinator:o,pathConverter:c}),_&&e.index===m.defaultGraphIndex&&o.start()}catch(a){const s=null!==(n=null==a?void 0:a.message)&&void 0!==n?n:String(a);r.diagnostics.push({path:e.path,message:s,severity:"error"}),t.Logger.Error(`KHR_interactivity: rejecting behavior graph #${e.index}: ${s}`),null===(o=r.coordinator)||void 0===o||o.dispose(),delete r.coordinator,delete r.flowGraph,delete r.serializedFlowGraph}else t.Logger.Error(`KHR_interactivity: rejecting behavior graph #${e.index}: ${e.diagnostics.map(e=>e.message).join("; ")}`)})))})}}function pr(e,n,o){V("/extensions/KHR_interactivity/?/activeCamera/rotation",{get:()=>{if(!e.activeCamera)return new t.Quaternion(NaN,NaN,NaN,NaN);const n=t.Quaternion.FromRotationMatrix(e.activeCamera.getWorldMatrix()).normalize();return e.useRightHandedSystem||(n.w*=-1,n.x*=-1),n},type:"Quaternion",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/position",{get:()=>{if(!e.activeCamera)return new t.Vector3(NaN,NaN,NaN);const n=e.activeCamera.getWorldMatrix().getTranslation();return e.useRightHandedSystem||(n.x*=-1),n},type:"Vector3",getTarget:()=>e.activeCamera},o);const r=n=>{const o=e.activeCamera;return o&&o.mode!==t.Constants.ORTHOGRAPHIC_CAMERA?n(o):NaN},a=n=>{const o=e.activeCamera;return o&&o.mode===t.Constants.ORTHOGRAPHIC_CAMERA?n(o):NaN};V("/extensions/KHR_interactivity/?/activeCamera/perspective/aspectRatio",{get:()=>r(e=>e.getEngine().getAspectRatio(e)),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/perspective/yfov",{get:()=>r(e=>{if(e.fovMode===t.Constants.FOVMODE_VERTICAL_FIXED)return e.fov;const n=e.getEngine().getAspectRatio(e);return n?2*Math.atan(Math.tan(e.fov/2)/n):e.fov}),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/perspective/znear",{get:()=>r(e=>e.minZ),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/perspective/zfar",{get:()=>r(e=>0===e.maxZ?1/0:e.maxZ),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/orthographic/xmag",{get:()=>a(e=>{var t,n;const o=e.getEngine().getRenderWidth()/2;return((null!==(t=e.orthoRight)&&void 0!==t?t:o)-(null!==(n=e.orthoLeft)&&void 0!==n?n:-o))/2}),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/orthographic/ymag",{get:()=>a(e=>{var t,n;const o=e.getEngine().getRenderHeight()/2;return((null!==(t=e.orthoTop)&&void 0!==t?t:o)-(null!==(n=e.orthoBottom)&&void 0!==n?n:-o))/2}),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/orthographic/znear",{get:()=>a(e=>e.minZ),type:"number",getTarget:()=>e.activeCamera},o),V("/extensions/KHR_interactivity/?/activeCamera/orthographic/zfar",{get:()=>a(e=>e.maxZ),type:"number",getTarget:()=>e.activeCamera},o);const s=e=>{var t,o,r,a;return null!==(a=null===(r=null===(o=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.targetedAnimations)||void 0===o?void 0:o[0])||void 0===r?void 0:r.animation.framePerSecond)&&void 0!==a?a:n};V("/animations/{}/extensions/KHR_interactivity/isPlaying",{get:e=>{var t,n;return null!==(n=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.isPlaying)&&void 0!==n&&n},type:"boolean",getTarget:e=>e._babylonAnimationGroup},o),V("/animations/{}/extensions/KHR_interactivity/minTime",{get:e=>{var t,n;return(null!==(n=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.from)&&void 0!==n?n:0)/s(e)},type:"number",getTarget:e=>e._babylonAnimationGroup},o),V("/animations/{}/extensions/KHR_interactivity/maxTime",{get:e=>{var t,n;return(null!==(n=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.to)&&void 0!==n?n:0)/s(e)},type:"number",getTarget:e=>e._babylonAnimationGroup},o),V("/animations/{}/extensions/KHR_interactivity/playhead",{get:e=>{var t,n;return(null!==(n=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.getRetainedCurrentFrame())&&void 0!==n?n:0)/s(e)},type:"number",getTarget:e=>e._babylonAnimationGroup},o),V("/animations/{}/extensions/KHR_interactivity/virtualPlayhead",{get:e=>{var t,n;return(null!==(n=null===(t=e._babylonAnimationGroup)||void 0===t?void 0:t.getVirtualCurrentFrame())&&void 0!==n?n:0)/s(e)},type:"number",getTarget:e=>e._babylonAnimationGroup},o)}let _r=!1;function fr(){_r||(_r=!0,t.addToBlockFactory(ur,"FlowGraphGLTFDataProvider",()=>D(this,void 0,void 0,function*(){return(yield Promise.resolve().then(function(){return ta})).FlowGraphGLTFDataProvider})),t.addToBlockFactory(ur,"FlowGraphUnsupportedInteractivityBlock",()=>D(this,void 0,void 0,function*(){return(yield Promise.resolve().then(function(){return ua})).FlowGraphUnsupportedInteractivityBlock})),t.addToBlockFactory(ur,"FlowGraphObjectReferenceBlock",()=>D(this,void 0,void 0,function*(){return(yield Promise.resolve().then(function(){return ra})).FlowGraphObjectReferenceBlock})),t.addToBlockFactory(ur,"FlowGraphEventReferenceBlock",()=>D(this,void 0,void 0,function*(){return(yield Promise.resolve().then(function(){return sa})).FlowGraphEventReferenceBlock})))}let gr=!1;function vr(){gr||(gr=!0,fr(),U(ur),W(ur,!0,e=>new mr(e)))}vr();const yr="KHR_node_visibility";class br{constructor(e){this.name=yr,this._loader=e,this.enabled=e.isExtensionUsed(yr)}onReady(){var e;if(!this._loader)return;const t=this._loader.gltf.nodes;if(t)for(const n of t){const t=n._babylonTransformNode;t&&(t.inheritVisibility=!0,n.extensions&&n.extensions.KHR_node_visibility&&!1===n.extensions.KHR_node_visibility.visible&&(t.isVisible=!1,null===(e=n._primitiveBabylonMeshes)||void 0===e||e.forEach(e=>{e.inheritVisibility=!0,e.isVisible=!1})))}}dispose(){delete this._loader}}let Tr=!1;function xr(){Tr||(Tr=!0,V("/nodes/{}/extensions/KHR_node_visibility/visible",{get:e=>{const t=e._babylonTransformNode;return!t||void 0===t.isVisible||t.isVisible},set:(e,t)=>{var n,o;null===(n=t._primitiveBabylonMeshes)||void 0===n||n.forEach(e=>{e.inheritVisibility=!0}),t._babylonTransformNode&&(t._babylonTransformNode.isVisible=e),null===(o=t._primitiveBabylonMeshes)||void 0===o||o.forEach(t=>{t.isVisible=e})},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"isVisible"],type:"boolean"}))}let Ar=!1;function wr(){Ar||(Ar=!0,xr(),U(yr),W(yr,!0,e=>new br(e)))}wr();const Rr=new WeakMap,Cr=new WeakMap,Or=new WeakMap;function Mr(e){return"selectable"===e?Or:Cr}function kr(e,t){var n;return null===(n=Mr(t).get(e))||void 0===n||n}function Ir(e,t,n){"selectable"===t?e.isPickable=n:e._isPointerMovePickable=n}function Sr(e,t){var n;const o=function(e,t){let n=e;for(;n;){if(!kr(n,t))return!1;n=n.parent}return!0}(e,t),r=null!==(n=e._primitiveBabylonMeshes)&&void 0!==n?n:[];for(const e of r)Ir(e,t,o);const a=e._babylonTransformNode;a&&"isPickable"in a&&Ir(a,t,o)}function Fr(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1}function Lr(e,t,n){var o;const r=Mr(t);for(const t of e)Rr.set(t,e),r.set(t,null===(o=n(t))||void 0===o||o);for(const n of e)Sr(n,t)}function Er(e,t){return kr(e,t)}function Nr(e,t,n){var o;Mr(t).set(e,n);const r=null!==(o=Rr.get(e))&&void 0!==o?o:[e];for(const n of r)Fr(n,e)&&Sr(n,t)}const Br="KHR_node_selectability";class Gr{constructor(e){this.name=Br,this.order=100,this._loader=e,this.enabled=e.isExtensionUsed(Br)}onReady(){return D(this,void 0,void 0,function*(){var e;Lr(null!==(e=this._loader.gltf.nodes)&&void 0!==e?e:[],"selectable",e=>{var t,n;return null===(n=null===(t=e.extensions)||void 0===t?void 0:t.KHR_node_selectability)||void 0===n?void 0:n.selectable})})}dispose(){this._loader=null}}let Pr=!1;function $r(){Pr||(Pr=!0,fo("event/onSelect",Br,{blocks:["FlowGraphMeshPickEventBlock","FlowGraphGetVariableBlock","FlowGraphIndexOfBlock","KHR_interactivity/FlowGraphGLTFDataProvider","KHR_interactivity/FlowGraphEventReferenceBlock"],declarationSchema:{inputValueSockets:{},outputValueSockets:{selectedNode:"ref",selectionRayOrigin:"float3",selectionPoint:"float3",controllerIndex:"int",event:"ref"}},configuration:{nodeIndex:{name:"variable",configurationType:"int",toBlock:"FlowGraphGetVariableBlock",indexSource:"assetNodes",invalidUsesDefault:!0,dataTransformer:e=>"pickedMesh_"+e}},outputs:{values:{selectedNodeIndex:{name:"index",toBlock:"FlowGraphIndexOfBlock"},selectedNode:{name:"nodeReference",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},controllerIndex:{name:"controllerIndex",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},selectionPoint:{name:"selectionPoint",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},selectionRayOrigin:{name:"selectionRayOrigin",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},event:{name:"value",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"}},flows:{out:{name:"out",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"}}},interBlockConnectors:[{input:"asset",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"nodes",inputBlockIndex:2,outputBlockIndex:3,isVariable:!0},{input:"object",output:"pickedMesh",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"node",output:"pickedMesh",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"controllerIndexInput",output:"pointerId",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"selectionPointInput",output:"pickedPoint",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"selectionRayOriginInput",output:"pickOrigin",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"in",output:"done",inputBlockIndex:4,outputBlockIndex:0}],extraProcessor(e,t,n,o,r,a,s){var i,l,u,c,d,h,m,p,_;const f=null===(u=null===(l=null===(i=e.configuration)||void 0===i?void 0:i.nodeIndex)||void 0===l?void 0:l.value)||void 0===u?void 0:u[0],g="number"==typeof f&&Number.isInteger(f)&&f>=0&&f<(null!==(d=null===(c=null==s?void 0:s.nodes)||void 0===c?void 0:c.length)&&void 0!==d?d:0),v=g?"pickedMesh_"+f:"pickedMesh_unbound";r[1].config.variable=v,a._userVariables[v]=g?{className:"Mesh",id:null===(m=null===(h=null==s?void 0:s.nodes)||void 0===h?void 0:h[f]._babylonTransformNode)||void 0===m?void 0:m.id,uniqueId:null===(_=null===(p=null==s?void 0:s.nodes)||void 0===p?void 0:p[f]._babylonTransformNode)||void 0===_?void 0:_.uniqueId}:{type:"any",value:[{}]};const y=`${Br}:event/onSelect:${f}`;return r[0].config.eventKey=y,r[0].config.useNaNDefaults=!0,r[0].config.pointerIdDefault=-1,r[4].config.eventKey=y,r}}),V("/nodes/{}/extensions/KHR_node_selectability/selectable",{get:e=>Er(e,"selectable"),set:(e,t)=>{Nr(t,"selectable",e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"isPickable"],type:"boolean"}))}let Vr=!1;function Dr(){Vr||(Vr=!0,$r(),U(Br),W(Br,!0,e=>new Gr(e)))}Dr();const Hr="KHR_node_hoverability",Kr="targetMeshPointerOver_",Wr="targetMeshPointerOut_";class Ur{constructor(e){this.name=Hr,this.order=100,this._loader=e,this.enabled=e.isExtensionUsed(Hr)}onReady(){return D(this,void 0,void 0,function*(){var e;Lr(null!==(e=this._loader.gltf.nodes)&&void 0!==e?e:[],"hoverable",e=>{var t,n;return null===(n=null===(t=e.extensions)||void 0===t?void 0:t.KHR_node_hoverability)||void 0===n?void 0:n.hoverable})})}dispose(){this._loader=null}}let jr=!1;function zr(){jr||(jr=!0,fo("event/onHoverIn",Hr,{blocks:["FlowGraphPointerOverEventBlock","FlowGraphGetVariableBlock","FlowGraphIndexOfBlock","KHR_interactivity/FlowGraphGLTFDataProvider","KHR_interactivity/FlowGraphEventReferenceBlock"],declarationSchema:{inputValueSockets:{},outputValueSockets:{hoveredNode:"ref",controllerIndex:"int",event:"ref"}},configuration:{nodeIndex:{name:"variable",configurationType:"int",toBlock:"FlowGraphGetVariableBlock",indexSource:"assetNodes",invalidUsesDefault:!0,dataTransformer:e=>Kr+e}},outputs:{values:{hoverNodeIndex:{name:"index",toBlock:"FlowGraphIndexOfBlock"},hoveredNode:{name:"nodeReference",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},controllerIndex:{name:"controllerIndex",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},event:{name:"value",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"}},flows:{out:{name:"out",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"}}},interBlockConnectors:[{input:"targetMesh",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"nodes",inputBlockIndex:2,outputBlockIndex:3,isVariable:!0},{input:"object",output:"meshUnderPointer",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"node",output:"meshUnderPointer",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"controllerIndexInput",output:"pointerId",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"in",output:"done",inputBlockIndex:4,outputBlockIndex:0}],extraProcessor(e,t,n,o,r,a,s){var i,l,u,c,d,h,m,p,_;const f=null===(u=null===(l=null===(i=e.configuration)||void 0===i?void 0:i.nodeIndex)||void 0===l?void 0:l.value)||void 0===u?void 0:u[0],g="number"==typeof f&&Number.isInteger(f)&&f>=0&&f<(null!==(d=null===(c=null==s?void 0:s.nodes)||void 0===c?void 0:c.length)&&void 0!==d?d:0),v=g?Kr+f:Kr+"unbound";r[1].config.variable=v,a._userVariables[v]=g?{className:"Mesh",id:null===(m=null===(h=null==s?void 0:s.nodes)||void 0===h?void 0:h[f]._babylonTransformNode)||void 0===m?void 0:m.id,uniqueId:null===(_=null===(p=null==s?void 0:s.nodes)||void 0===p?void 0:p[f]._babylonTransformNode)||void 0===_?void 0:_.uniqueId}:{type:"any",value:[{}]};const y=`${Hr}:event/onHoverIn:${f}`;return r[0].config.eventKey=y,r[4].config.eventKey=y,r}}),fo("event/onHoverOut",Hr,{blocks:["FlowGraphPointerOutEventBlock","FlowGraphGetVariableBlock","FlowGraphIndexOfBlock","KHR_interactivity/FlowGraphGLTFDataProvider","KHR_interactivity/FlowGraphEventReferenceBlock"],declarationSchema:{inputValueSockets:{},outputValueSockets:{hoveredNode:"ref",controllerIndex:"int",event:"ref"}},configuration:{nodeIndex:{name:"variable",configurationType:"int",toBlock:"FlowGraphGetVariableBlock",indexSource:"assetNodes",invalidUsesDefault:!0,dataTransformer:e=>Wr+e}},outputs:{values:{hoverNodeIndex:{name:"index",toBlock:"FlowGraphIndexOfBlock"},hoveredNode:{name:"nodeReference",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},controllerIndex:{name:"controllerIndex",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"},event:{name:"value",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"}},flows:{out:{name:"out",toBlock:"KHR_interactivity/FlowGraphEventReferenceBlock"}}},interBlockConnectors:[{input:"targetMesh",output:"value",inputBlockIndex:0,outputBlockIndex:1,isVariable:!0},{input:"array",output:"nodes",inputBlockIndex:2,outputBlockIndex:3,isVariable:!0},{input:"object",output:"meshOutOfPointer",inputBlockIndex:2,outputBlockIndex:0,isVariable:!0},{input:"node",output:"meshOutOfPointer",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"controllerIndexInput",output:"pointerId",inputBlockIndex:4,outputBlockIndex:0,isVariable:!0},{input:"in",output:"done",inputBlockIndex:4,outputBlockIndex:0}],extraProcessor(e,t,n,o,r,a,s){var i,l,u,c,d,h,m,p,_;const f=null===(u=null===(l=null===(i=e.configuration)||void 0===i?void 0:i.nodeIndex)||void 0===l?void 0:l.value)||void 0===u?void 0:u[0],g="number"==typeof f&&Number.isInteger(f)&&f>=0&&f<(null!==(d=null===(c=null==s?void 0:s.nodes)||void 0===c?void 0:c.length)&&void 0!==d?d:0),v=g?Wr+f:Wr+"unbound";r[1].config.variable=v,a._userVariables[v]=g?{className:"Mesh",id:null===(m=null===(h=null==s?void 0:s.nodes)||void 0===h?void 0:h[f]._babylonTransformNode)||void 0===m?void 0:m.id,uniqueId:null===(_=null===(p=null==s?void 0:s.nodes)||void 0===p?void 0:p[f]._babylonTransformNode)||void 0===_?void 0:_.uniqueId}:{type:"any",value:[{}]};const y=`${Hr}:event/onHoverOut:${f}`;return r[0].config.eventKey=y,r[4].config.eventKey=y,r}}),V("/nodes/{}/extensions/KHR_node_hoverability/hoverable",{get:e=>Er(e,"hoverable"),set:(e,t)=>{Nr(t,"hoverable",e)},getTarget:e=>e._babylonTransformNode,getPropertyName:[()=>"pointerOverDisableMeshTesting"],type:"boolean"}))}let qr=!1;function Yr(){qr||(qr=!0,zr(),U(Hr),W(Hr,!0,e=>new Ur(e)))}Yr();const Xr="ExtrasAsMetadata";class Qr{_assignExtras(e,t){if(t.extras&&Object.keys(t.extras).length>0){const n=e.metadata=e.metadata||{};(n.gltf=n.gltf||{}).extras=t.extras}}constructor(e){this.name=Xr,this.enabled=!0,this._loader=e}dispose(){this._loader=null}loadNodeAsync(e,t,n){return this._loader.loadNodeAsync(e,t,e=>{this._assignExtras(e,t),n(e)})}loadCameraAsync(e,t,n){return this._loader.loadCameraAsync(e,t,e=>{this._assignExtras(e,t),n(e)})}createMaterial(e,t,n){const o=this._loader.createMaterial(e,t,n);return this._assignExtras(o,t),o}loadAnimationAsync(e,t){return this._loader.loadAnimationAsync(e,t).then(e=>(this._assignExtras(e,t),e))}}let Jr=!1;function Zr(){Jr||(Jr=!0,U(Xr),W(Xr,!1,e=>new Qr(e)))}Zr();class ea extends t.FlowGraphBlock{constructor(e={}){var n,o;super(e);const r=e.glTF,a=(null===(n=null==r?void 0:r.animations)||void 0===n?void 0:n.map(e=>e._babylonAnimationGroup))||[];this.animationGroups=this.registerDataOutput("animationGroups",t.RichTypeAny,a);const s=(null===(o=null==r?void 0:r.nodes)||void 0===o?void 0:o.map(e=>e._babylonTransformNode))||[];this.nodes=this.registerDataOutput("nodes",t.RichTypeAny,s)}getClassName(){return"FlowGraphGLTFDataProvider"}}var ta={__proto__:null,FlowGraphGLTFDataProvider:ea};function na(e,t){let n=t;for(;n;){const t=e.getObjectReference(n,"nodes");if(null==t?void 0:t.startsWith("/nodes/"))return t;n=n.parent}return""}class oa extends t.FlowGraphBlock{constructor(e){super(e),this.object=this.registerDataInput("object",t.RichTypeAny),this.value=this.registerDataOutput("value",t.RichTypeString,"")}_updateOutputs(e){this.value.setValue(na(e,this.object.getValue(e)),e)}getClassName(){return"FlowGraphObjectReferenceBlock"}}var ra={__proto__:null,FlowGraphObjectReferenceBlock:oa,GetInteractivityObjectReference:na};class aa extends t.FlowGraphExecutionBlock{constructor(e){super(e),this.config=e,this._assetInverse=t.Matrix.Identity(),this._selectionPointValue=t.Vector3.Zero(),this._selectionRayOriginValue=t.Vector3.Zero();const n=new t.Vector3(NaN,NaN,NaN);this.node=this.registerDataInput("node",t.RichTypeAny),this.controllerIndexInput=this.registerDataInput("controllerIndexInput",t.RichTypeNumber,-1),this.selectionPointInput=this.registerDataInput("selectionPointInput",t.RichTypeVector3,n),this.selectionRayOriginInput=this.registerDataInput("selectionRayOriginInput",t.RichTypeVector3,n),this.nodeReference=this.registerDataOutput("nodeReference",t.RichTypeString,""),this.controllerIndex=this.registerDataOutput("controllerIndex",t.RichTypeNumber,-1),this.selectionPoint=this.registerDataOutput("selectionPoint",t.RichTypeVector3,n),this.selectionRayOrigin=this.registerDataOutput("selectionRayOrigin",t.RichTypeVector3,n),this.value=this.registerDataOutput("value",t.RichTypeString,""),this.out=this._registerSignalOutput("out")}_execute(e){var n;this.nodeReference.setValue(na(e,this.node.getValue(e)),e);const o=this.controllerIndexInput.getValue(e);if(o<0)this.controllerIndex.setValue(-1,e);else{const t=e._getGlobalContextVariable("khrInteractivityControllerIndices",new Map);let n=t.get(o);void 0===n&&(n=t.size,t.set(o,n),e._setGlobalContextVariable("khrInteractivityControllerIndices",t)),this.controllerIndex.setValue(n,e)}const r=this.node.getValue(e);let a=null==r?void 0:r.parent;for(;null==a?void 0:a.parent;)a=a.parent;(null==a?void 0:a.getWorldMatrix)?(a.getWorldMatrix().invertToRef(this._assetInverse),t.Vector3.TransformCoordinatesToRef(this.selectionPointInput.getValue(e),this._assetInverse,this._selectionPointValue),t.Vector3.TransformCoordinatesToRef(this.selectionRayOriginInput.getValue(e),this._assetInverse,this._selectionRayOriginValue),this.selectionPoint.setValue(this._selectionPointValue,e),this.selectionRayOrigin.setValue(this._selectionRayOriginValue,e)):(this.selectionPoint.setValue(this.selectionPointInput.getValue(e),e),this.selectionRayOrigin.setValue(this.selectionRayOriginInput.getValue(e),e)),this.value.setValue(e.getEventReference(null!==(n=this.config.eventKey)&&void 0!==n?n:"gltf:manual"),e),this.out._activateSignal(e)}getClassName(){return"FlowGraphEventReferenceBlock"}}var sa={__proto__:null,FlowGraphEventReferenceBlock:aa};function ia(e){switch(e){case"bool":return!1;case"int":return new t.FlowGraphInteger(0);case"float":return NaN;case"float2":return new t.Vector2(NaN,NaN);case"float3":return new t.Vector3(NaN,NaN,NaN);case"float4":return new t.Vector4(NaN,NaN,NaN,NaN);case"float2x2":return new t.FlowGraphMatrix2D([NaN,NaN,NaN,NaN]);case"float3x3":return new t.FlowGraphMatrix3D([NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]);case"float4x4":return t.Matrix.FromArray([NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN]);case"ref":return"";default:return}}class la extends t.FlowGraphExecutionBlock{constructor(e){var n,o,r,a;super(e),this.config=e,this._unregisterSignalInput("in"),this._unregisterSignalOutput("error");for(const o of null!==(n=e.inputValueSockets)&&void 0!==n?n:[])this.registerDataInput(o.name,t.getRichTypeByFlowGraphType(o.type));for(const n of null!==(o=e.outputValueSockets)&&void 0!==o?o:[])this.registerDataOutput(n.name,t.getRichTypeByFlowGraphType(n.type),ia(n.signature));for(const t of null!==(r=e.inputFlowSockets)&&void 0!==r?r:[])this._registerSignalInput(t);for(const t of null!==(a=e.outputFlowSockets)&&void 0!==a?a:[])this._registerSignalOutput(t)}_execute(e,t){}getClassName(){return"FlowGraphUnsupportedInteractivityBlock"}}var ua={__proto__:null,FlowGraphUnsupportedInteractivityBlock:la},ca={__proto__:null,AddObjectAccessorToKey:V,CloneKHRInteractivityGraph:Mo,CreateEffectiveKHRInteractivityGraph:Vo,CreateKHRInteractivityDocument:jo,CreateKHRInteractivityGraphModel:Uo,EXT_lights_area:$e,EXT_lights_ies:be,EXT_lights_image_based:ee,EXT_mesh_gpu_instancing:re,EXT_meshopt_compression:le,EXT_texture_avif:fe,EXT_texture_webp:he,ExtrasAsMetadata:Qr,FlowGraphEventReferenceBlock:aa,FlowGraphGLTFDataProvider:ea,FlowGraphObjectReferenceBlock:oa,FlowGraphUnsupportedInteractivityBlock:la,GetInteractivityNodeState:Er,GetInteractivityObjectReference:na,GetKHRInteractivityImportResult:dr,GetKHRInteractivityImportResults:hr,GetMappingForKey:P,GetPathToObjectConverter:G,InitializeInteractivityNodeState:Lr,InteractivityGraphToFlowGraphParser:Xo,KHR_INTERACTIVITY_SPECIFICATION_COMMIT:Ro,KHR_animation_pointer:Cn,KHR_draco_mesh_compression:we,KHR_gaussian_splatting:Se,KHR_interactivity:mr,KHR_lights:Ne,KHR_materials_anisotropy:ut,KHR_materials_clearcoat:Qe,KHR_materials_coat:tt,KHR_materials_diffuse_roughness:an,KHR_materials_diffuse_transmission:Kt,KHR_materials_dispersion:tn,KHR_materials_emissive_strength:mt,KHR_materials_fuzz:Tt,KHR_materials_ior:kt,KHR_materials_iridescence:at,KHR_materials_pbrSpecularGlossiness:Ke,KHR_materials_sheen:gt,KHR_materials_specular:Rt,KHR_materials_transmission:$t,KHR_materials_unlit:ze,KHR_materials_variants:Lt,KHR_materials_volume:zt,KHR_materials_volume_scatter:Qt,KHR_mesh_quantization:cn,KHR_node_hoverability:Ur,KHR_node_selectability:Gr,KHR_node_visibility:br,KHR_texture_basisu:pn,KHR_texture_transform:vn,KHR_xmp_json_ld:xn,MSFT_audio_emitter:Qn,MSFT_lod:to,MSFT_minecraftMesh:ao,MSFT_sRGBFactors:uo,ParseDebugLogTemplate:xo,RegisterEXT_lights_area:De,RegisterEXT_lights_ies:xe,RegisterEXT_lights_image_based:ne,RegisterEXT_mesh_gpu_instancing:se,RegisterEXT_meshopt_compression:ce,RegisterEXT_texture_avif:ve,RegisterEXT_texture_webp:pe,RegisterExtrasAsMetadata:Zr,RegisterKHR_animation_pointer:Mn,RegisterKHR_draco_mesh_compression:Ce,RegisterKHR_gaussian_splatting:Le,RegisterKHR_interactivity:vr,RegisterKHR_lights:Ge,RegisterKHR_materials_anisotropy:dt,RegisterKHR_materials_clearcoat:Ze,RegisterKHR_materials_coat:ot,RegisterKHR_materials_diffuse_roughness:ln,RegisterKHR_materials_diffuse_transmission:Ut,RegisterKHR_materials_dispersion:on,RegisterKHR_materials_emissive_strength:_t,RegisterKHR_materials_fuzz:At,RegisterKHR_materials_ior:St,RegisterKHR_materials_iridescence:it,RegisterKHR_materials_pbrSpecularGlossiness:Ue,RegisterKHR_materials_sheen:yt,RegisterKHR_materials_specular:Ot,RegisterKHR_materials_transmission:Dt,RegisterKHR_materials_unlit:Ye,RegisterKHR_materials_variants:Nt,RegisterKHR_materials_volume:Yt,RegisterKHR_materials_volume_scatter:Zt,RegisterKHR_mesh_quantization:hn,RegisterKHR_node_hoverability:Yr,RegisterKHR_node_selectability:Dr,RegisterKHR_node_visibility:wr,RegisterKHR_texture_basisu:fn,RegisterKHR_texture_transform:bn,RegisterKHR_xmp_json_ld:wn,RegisterMSFT_audio_emitter:Zn,RegisterMSFT_lod:oo,RegisterMSFT_minecraftMesh:io,RegisterMSFT_sRGBFactors:ho,SetInteractivityNodeState:Nr,SetInterpolationForKey:$,TransmissionHelper:Bt,_AddInteractivityObjectModel:pr,_RegisterKHRInteractivityRuntime:fr,_RegisterKHRNodeHoverabilityRuntime:zr,_RegisterKHRNodeSelectabilityRuntime:$r,_RegisterKHRNodeVisibilityRuntime:xr,addNewInteractivityFlowGraphMapping:fo,ensureTransmissionHelper:Gt,getAllSupportedNativeNodeTypes:wo,getMappingForDeclaration:po,getMappingForFullOperationName:mo,getNoOpMappingForDeclaration:_o,gltfTypeToBabylonType:Co};J(),b(),Bn();class da{constructor(e){this._specWorkflow=!1,this._diffuseTransmissionTint=t.Color3.White(),this._diffuseTransmissionTintTexture=null,this._material=e}get material(){return this._material}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){this._material.alphaCutOff=e}get alphaCutOff(){return this._material.alphaCutOff}set useAlphaFromBaseColorTexture(e){this._material._useAlphaFromBaseColorTexture=e}get useAlphaFromBaseColorTexture(){return this._material._useAlphaFromBaseColorTexture}get transparencyAsAlphaCoverage(){return!1}set transparencyAsAlphaCoverage(e){}set baseColor(e){this._material.baseColor=e}get baseColor(){return this._material.baseColor}set baseColorTexture(e){this._material.baseColorTexture=e}get baseColorTexture(){return this._material.baseColorTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e}get baseDiffuseRoughness(){return this._material.baseDiffuseRoughness}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.baseMetalness=e}get baseMetalness(){return this._material.baseMetalness}set baseMetalnessTexture(e){this._material.baseMetalnessTexture=e}get baseMetalnessTexture(){return this._material.baseMetalnessTexture}set useRoughnessFromMetallicTextureGreen(e){this._material._useRoughnessFromMetallicTextureGreen=e}set useMetallicFromMetallicTextureBlue(e){this._material._useMetallicFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){}configureSpecularGlossiness(){this._specWorkflow=!0}set specularWeight(e){this._material.specularWeight=e}get specularWeight(){return this._material.specularWeight}set specularWeightTexture(e){this._material.specularColorTexture===e?(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0):this._material.specularWeightTexture=e}get specularWeightTexture(){return this._material.specularWeightTexture}set specularColor(e){this._material.specularColor=e}get specularColor(){return this._material.specularColor}set specularColorTexture(e){this._material.specularColorTexture=e,this._material.specularWeightTexture===this._material.specularColorTexture&&(this._material.specularWeightTexture=null,this._material._useSpecularWeightFromSpecularColorTexture=!0,this._material._useSpecularWeightFromAlpha=!0)}get specularColorTexture(){return this._material.specularColorTexture}set specularRoughness(e){this._material.specularRoughness=e}get specularRoughness(){return this._material.specularRoughness}set specularRoughnessTexture(e){this._material.specularRoughnessTexture=e}get specularRoughnessTexture(){return this._material.specularRoughnessTexture}set specularIor(e){this._material.specularIor=e}get specularIor(){return this._material.specularIor}set glossiness(e){this._material.specularRoughness=Math.max(1-e,0)}get glossiness(){return 1-this._material.specularRoughness}set emissionColor(e){this._material.emissionColor=e}get emissionColor(){return this._material.emissionColor}set emissionLuminance(e){this._material.emissionLuminance=e}get emissionLuminance(){return this._material.emissionLuminance}set emissionColorTexture(e){this._material.emissionColorTexture=e}get emissionColorTexture(){return this._material.emissionColorTexture}set ambientOcclusionTexture(e){this._material.ambientOcclusionTexture=e}get ambientOcclusionTexture(){return this._material.ambientOcclusionTexture}set ambientOcclusionTextureStrength(e){const t=this._material.ambientOcclusionTexture;t&&(t.level=e)}get ambientOcclusionTextureStrength(){var e;const t=this._material.ambientOcclusionTexture;return null!==(e=null==t?void 0:t.level)&&void 0!==e?e:1}configureCoat(){}set coatWeight(e){this._material.coatWeight=e}get coatWeight(){return this._material.coatWeight}set coatWeightTexture(e){this._material.coatWeightTexture=e}get coatWeightTexture(){return this._material.coatWeightTexture}set coatColor(e){this._material.coatColor=e}get coatColor(){return this._material.coatColor}set coatColorTexture(e){this._material.coatColorTexture=e}set coatRoughness(e){this._material.coatRoughness=e}get coatRoughness(){return this._material.coatRoughness}set coatRoughnessTexture(e){this._material.coatRoughnessTexture=e,e&&(this._material._useCoatRoughnessFromGreenChannel=!0)}get coatRoughnessTexture(){return this._material.coatRoughnessTexture}set coatIor(e){this._material.coatIor=e}get coatIor(){return this._material.coatIor}set coatDarkening(e){this._material.coatDarkening=e}get coatDarkening(){return this._material.coatDarkening}set coatDarkeningTexture(e){this._material.coatDarkeningTexture=e}set coatRoughnessAnisotropy(e){this._material.coatRoughnessAnisotropy=e}get coatRoughnessAnisotropy(){return this._material.coatRoughnessAnisotropy}set geometryCoatTangentAngle(e){this._material.geometryCoatTangentAngle=e}set geometryCoatTangentTexture(e){this._material.geometryCoatTangentTexture=e,e&&(this._material._useCoatRoughnessAnisotropyFromTangentTexture=!0)}get geometryCoatTangentTexture(){return this._material.geometryCoatTangentTexture}configureTransmission(){this._material.geometryThinWalled=1,this._material.transmissionDepth=0}set transmissionWeight(e){this._material.transmissionWeight=e}set transmissionWeightTexture(e){this._material.transmissionWeightTexture=e}get transmissionWeightTexture(){return this._material.transmissionWeightTexture}get transmissionWeight(){return this._material.transmissionWeight}set transmissionScatter(e){this._material.transmissionScatter=e}get transmissionScatter(){return this._material.transmissionScatter}set transmissionScatterTexture(e){this._material.transmissionScatterTexture=e}get transmissionScatterTexture(){return this._material.transmissionScatterTexture}set transmissionScatterAnisotropy(e){this._material.transmissionScatterAnisotropy=e}set transmissionDispersionAbbeNumber(e){this._material.transmissionDispersionAbbeNumber=e}set transmissionDispersionScale(e){this._material.transmissionDispersionScale=e}set transmissionDepth(e){e!==Number.MAX_VALUE||0!==this._material.transmissionDepth?this._material.transmissionDepth=e:this._material.transmissionDepth=0}get transmissionDepth(){return this._material.transmissionDepth}set transmissionColor(e){e.equals(t.Color3.White())||(this._material.transmissionColor=e)}get transmissionColor(){return this._material.transmissionColor}get refractionBackgroundTexture(){return this._material.backgroundRefractionTexture}set refractionBackgroundTexture(e){this._material.backgroundRefractionTexture=e}configureVolume(){this._material.geometryThinWalled=0}set geometryThinWalled(e){this._material.geometryThinWalled=e?1:0}get geometryThinWalled(){return!!this._material.geometryThinWalled}set volumeThicknessTexture(e){this._material.geometryThicknessTexture=e,this._material._useGeometryThicknessFromGreenChannel=!0}set volumeThickness(e){this._material.geometryThickness=e}configureSubsurface(){this._material.geometryThinWalled=1,this._material.subsurfaceScatterAnisotropy=1}set subsurfaceWeight(e){this._material.subsurfaceWeight=e}get subsurfaceWeight(){return this._material.subsurfaceWeight}set subsurfaceWeightTexture(e){this._material.subsurfaceWeightTexture=e,this._material._useSubsurfaceWeightFromTextureAlpha=!0}get subsurfaceWeightTexture(){return this._material.subsurfaceWeightTexture}set subsurfaceColor(e){this._material.subsurfaceColor=e}set subsurfaceColorTexture(e){this._material.subsurfaceColorTexture=e}set diffuseTransmissionTint(e){this._diffuseTransmissionTint=e}get diffuseTransmissionTint(){return this._diffuseTransmissionTint}set diffuseTransmissionTintTexture(e){this._diffuseTransmissionTintTexture=e}get subsurfaceRadius(){return this._material.subsurfaceRadius}set subsurfaceRadius(e){this._material.subsurfaceRadius=e}get subsurfaceRadiusScale(){return this._material.subsurfaceRadiusScale}set subsurfaceRadiusScale(e){this._material.subsurfaceRadiusScale=e}set subsurfaceScatterAnisotropy(e){this._material.subsurfaceScatterAnisotropy=e}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){}set fuzzWeight(e){this._material.fuzzWeight=e}set fuzzWeightTexture(e){this._material.fuzzWeightTexture=e}set fuzzColor(e){this._material.fuzzColor=e}set fuzzColorTexture(e){this._material.fuzzColorTexture=e}set fuzzRoughness(e){this._material.fuzzRoughness=e}set fuzzRoughnessTexture(e){this._material.fuzzRoughnessTexture=e,this._material._useFuzzRoughnessFromTextureAlpha=!0}set specularRoughnessAnisotropy(e){this._material.specularRoughnessAnisotropy=e}get specularRoughnessAnisotropy(){return this._material.specularRoughnessAnisotropy}set geometryTangentAngle(e){this._material.geometryTangentAngle=e}set geometryTangentTexture(e){this._material.geometryTangentTexture=e,this._material._useSpecularRoughnessAnisotropyFromTangentTexture=!0}get geometryTangentTexture(){return this._material.geometryTangentTexture}configureGltfStyleAnisotropy(e=!0){this._material._useGltfStyleAnisotropy=e}set thinFilmWeight(e){this._material.thinFilmWeight=e}set thinFilmIor(e){this._material.thinFilmIor=e}set thinFilmThicknessMinimum(e){this._material.thinFilmThicknessMin=e/1e3}set thinFilmThicknessMaximum(e){this._material.thinFilmThickness=e/1e3}set thinFilmWeightTexture(e){this._material.thinFilmWeightTexture=e}set thinFilmThicknessTexture(e){this._material.thinFilmThicknessTexture=e,this._material._useThinFilmThicknessFromTextureGreen=!0}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.geometryOpacity=e}get geometryOpacity(){return this._material.geometryOpacity}set geometryNormalTexture(e){this._material.geometryNormalTexture=e}get geometryNormalTexture(){return this._material.geometryNormalTexture}setNormalMapInversions(e,t){}set geometryCoatNormalTexture(e){this._material.geometryCoatNormalTexture=e}get geometryCoatNormalTexture(){return this._material.geometryCoatNormalTexture}set geometryCoatNormalTextureScale(e){this._material.geometryCoatNormalTexture&&(this._material.geometryCoatNormalTexture.level=e)}finalizeAsync(e){return D(this,void 0,void 0,function*(){var n,o,r;if(this._diffuseTransmissionTint&&!this._diffuseTransmissionTint.equals(t.Color3.White())||this._diffuseTransmissionTintTexture)if(this._material.geometryThinWalled)this.subsurfaceColor=this._diffuseTransmissionTint,this.subsurfaceColorTexture=this._diffuseTransmissionTintTexture;else if(yield this.copySurfaceToCoatAsync(e,this.subsurfaceWeight,this.subsurfaceWeightTexture,t.TextureChannel.A,this._diffuseTransmissionTint,this._diffuseTransmissionTintTexture,!0),e._disposed)return;if(this.transmissionWeight>0)if(this._material.geometryThinWalled||0===this._material.transmissionDepth)this._material.transmissionColor=this._material.baseColor,this._material.transmissionColorTexture=this._material.baseColorTexture;else if((!this.baseColor.equals(t.Color3.White())||null!==this.baseColorTexture)&&(yield this.copySurfaceToCoatAsync(e,this.transmissionWeight,this.transmissionWeightTexture,t.TextureChannel.R,this.baseColor,this.baseColorTexture,!1),e._disposed))return;if(this._specWorkflow){const a=yield t.InvertTextureAsync("newRoughnessTexture ("+this._material.name+")",yield t.ExtractChannelAsync("glossiness ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularColorTexture,new t.Color4(this.specularColor.r,this.specularColor.g,this.specularColor.b,this.glossiness),t.TextureChannel.A,t.TextureColorSpace.Linear),t.TextureChannel.A,this._material.getScene(),t.TextureColorSpace.Linear,t.ChannelMask.R),this._material.getScene(),t.ChannelMask.R,t.TextureColorSpace.Linear,t.ChannelMask.R);if(e._disposed)return void(null===(n=a.texture)||void 0===n||n.dispose());this.specularRoughnessTexture=a.texture,this.specularRoughness=a.factor?a.factor.r:1;const s=yield t.ExtractMaxChannelAsync("metallicTexture ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularColorTexture,this.specularColor.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.Linear),this._material.getScene(),!1,t.TextureColorSpace.SRGB,t.ChannelMask.RGB);if(e._disposed)return void(null===(o=s.texture)||void 0===o||o.dispose());this.baseMetalnessTexture=s.texture,this.baseMetalness=s.factor?s.factor.r:1;const i=yield t.LerpTexturesAsync("newBaseColor ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.baseColorTexture,this.baseColor.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.Linear),t.CreateTextureWithFactorOperand(this.specularColorTexture,this.specularColor.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.Linear),Object.assign(Object.assign({},s),{dispose:void 0,colorSpace:t.TextureColorSpace.Linear}),this._material.getScene(),t.TextureColorSpace.SRGB,t.ChannelMask.RGB);if(e._disposed)return void(null===(r=i.texture)||void 0===r||r.dispose());const l=this.baseColorTexture;null==l||l.dispose(),this.baseColorTexture=i.texture,this.baseColor=i.factor?new t.Color3(i.factor.r,i.factor.g,i.factor.b):t.Color3.White();const u=this.specularColorTexture;null==u||u.dispose(),this.specularColorTexture=null}})}copySurfaceToCoatAsync(e,n,o,r,a,s){return D(this,arguments,void 0,function*(e,n,o,r,a,s,i=!1){var l,u,c,d,h,m,p,_,f;const g=this._material.coatWeight,v=this._material.coatWeightTexture,y=this._material.coatColor.clone(),b=this._material.coatColorTexture,T=this._material.geometryCoatNormalTexture,x=new t.Color4(g,g,g,g),A=new t.Color4(n,n,n,n);this.coatWeightTexture=null,this.coatWeight=1;const w=yield Promise.allSettled([t.LerpTexturesAsync("lerpExistingCoat",t.CreateTextureWithFactorOperand(null,new t.Color4(1,1,1,1)),t.CreateTextureWithFactorOperand(b,y.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.SRGB),t.CreateTextureWithFactorOperand(v,x,t.TextureChannel.R),this._material.getScene(),t.TextureColorSpace.SRGB),t.LerpTexturesAsync("lerpSurfaceColor",t.CreateTextureWithFactorOperand(null,new t.Color4(1,1,1,1)),t.CreateTextureWithFactorOperand(s,a.toColor4(),t.TextureChannel.RGBA,t.TextureColorSpace.SRGB),t.CreateTextureWithFactorOperand(o,A,r),this._material.getScene(),t.TextureColorSpace.SRGB)]),R=w.find(e=>"rejected"===e.status);if(R){for(const e of w)"fulfilled"===e.status&&(null===(l=e.value.texture)||void 0===l||l.dispose());throw R.reason}const[C,O]=w.map(e=>e.value);if(e._disposed)return null===(u=C.texture)||void 0===u||u.dispose(),void(null===(c=O.texture)||void 0===c||c.dispose());const M=yield t.MultiplyTexturesAsync("newCoatColor ("+this._material.name+")",C,O,this._material.getScene(),t.TextureColorSpace.SRGB);if(e._disposed)return void(null===(d=M.texture)||void 0===d||d.dispose());M.texture?(this.coatColorTexture=M.texture,this.coatColor=t.Color3.White()):M.factor&&(this.coatColorTexture=null,this.coatColor.fromArray([M.factor.r,M.factor.g,M.factor.b]));const k=yield t.LerpTexturesAsync("newCoatIor ("+this._material.name+")",t.CreateTextureWithFactorOperand(null,new t.Color4(this._material.specularIor,this._material.specularIor,this._material.specularIor,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(null,new t.Color4(this.coatIor,this.coatIor,this.coatIor,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(v,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)return void(null===(h=k.texture)||void 0===h||h.dispose());this.coatIor=k.factor?k.factor.r:this.coatIor;const I=yield t.LerpTexturesAsync("newCoatRoughness ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularRoughnessTexture,new t.Color4(this.specularRoughness,this.specularRoughness,this.specularRoughness,1),t.TextureChannel.G),t.CreateTextureWithFactorOperand(this.coatRoughnessTexture,new t.Color4(this.coatRoughness,this.coatRoughness,this.coatRoughness,1),t.TextureChannel.G),t.CreateTextureWithFactorOperand(v,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)return void(null===(m=I.texture)||void 0===m||m.dispose());this.coatRoughness=I.factor?I.factor.r:1,this.coatRoughnessTexture=I.texture;const S=yield t.LerpTexturesAsync("newCoatDarkening ("+this._material.name+")",t.CreateTextureWithFactorOperand(null,new t.Color4(0,0,0,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(null,new t.Color4(this.coatDarkening,this.coatDarkening,this.coatDarkening,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(v,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)null===(p=S.texture)||void 0===p||p.dispose();else{if(this.coatDarkening=S.factor?S.factor.r:this.coatDarkening,i){const n=yield t.LerpTexturesAsync("newSpecularRoughness ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.specularRoughnessTexture,new t.Color4(this._material.specularRoughness,this._material.specularRoughness,this._material.specularRoughness,1),t.TextureChannel.G),t.CreateTextureWithFactorOperand(null,new t.Color4(1,1,1,1),t.TextureChannel.R),t.CreateTextureWithFactorOperand(o,A,r),this._material.getScene());if(e._disposed)return void(null===(_=n.texture)||void 0===_||_.dispose());this.specularRoughness=n.factor?n.factor.r:1,this.specularRoughnessTexture=n.texture}if(T||this.geometryNormalTexture){const n=yield t.LerpTexturesAsync("newCoatNormal ("+this._material.name+")",t.CreateTextureWithFactorOperand(this.geometryNormalTexture,this.geometryNormalTexture?new t.Color4(1,1,1,1):new t.Color4(.5,.5,1,1),t.TextureChannel.RGBA),t.CreateTextureWithFactorOperand(T,T?new t.Color4(1,1,1,1):new t.Color4(.5,.5,1,1),t.TextureChannel.RGBA),t.CreateTextureWithFactorOperand(v,x,t.TextureChannel.R),this._material.getScene());if(e._disposed)return void(null===(f=n.texture)||void 0===f||f.dispose());n.texture&&(this.geometryCoatNormalTexture=n.texture)}}})}}var ha={__proto__:null,OpenPBRMaterialLoadingAdapter:da};class ma{constructor(e){this._specWorkflow=!1,this._material=e,this._material.enableSpecularAntiAliasing=!0}get material(){return this._material}finalizeAsync(e){return D(this,void 0,void 0,function*(){})}get isUnlit(){return this._material.unlit}set isUnlit(e){this._material.unlit=e}set backFaceCulling(e){this._material.backFaceCulling=e}get backFaceCulling(){return this._material.backFaceCulling}set twoSidedLighting(e){this._material.twoSidedLighting=e}get twoSidedLighting(){return this._material.twoSidedLighting}set alphaCutOff(e){this._material.alphaCutOff=e}get alphaCutOff(){return this._material.alphaCutOff}set useAlphaFromBaseColorTexture(e){this._material.useAlphaFromAlbedoTexture=e}get useAlphaFromBaseColorTexture(){return this._material.useAlphaFromAlbedoTexture}get transparencyAsAlphaCoverage(){return this._material.useRadianceOverAlpha||this._material.useSpecularOverAlpha}set transparencyAsAlphaCoverage(e){this._material.useRadianceOverAlpha=!e,this._material.useSpecularOverAlpha=!e}set baseColor(e){this._material.albedoColor=e}get baseColor(){return this._material.albedoColor}set baseColorTexture(e){this._material.albedoTexture=e}get baseColorTexture(){return this._material.albedoTexture}set baseDiffuseRoughness(e){this._material.baseDiffuseRoughness=e,e>0&&(this._material.brdf.baseDiffuseModel=t.Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR)}get baseDiffuseRoughness(){var e;return null!==(e=this._material.baseDiffuseRoughness)&&void 0!==e?e:0}set baseDiffuseRoughnessTexture(e){this._material.baseDiffuseRoughnessTexture=e}get baseDiffuseRoughnessTexture(){return this._material.baseDiffuseRoughnessTexture}set baseMetalness(e){this._material.metallic=e}get baseMetalness(){var e;return null!==(e=this._material.metallic)&&void 0!==e?e:1}set baseMetalnessTexture(e){this._material.metallicTexture=e}get baseMetalnessTexture(){return this._material.metallicTexture}set useRoughnessFromMetallicTextureGreen(e){this._material.useRoughnessFromMetallicTextureGreen=e,this._material.useRoughnessFromMetallicTextureAlpha=!e}set useMetallicFromMetallicTextureBlue(e){this._material.useMetallnessFromMetallicTextureBlue=e}enableSpecularEdgeColor(e=!1){e&&(this._material.brdf.dielectricSpecularModel=t.Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR,this._material.brdf.conductorSpecularModel=t.Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR)}configureSpecularGlossiness(){this._specWorkflow=!0,this._material.metallic=null,this._material.roughness=null,this._material.useMicroSurfaceFromReflectivityMapAlpha=!0}set specularWeight(e){this._material.metallicF0Factor=e}get specularWeight(){var e;return null!==(e=this._material.metallicF0Factor)&&void 0!==e?e:1}set specularWeightTexture(e){e?(this._material.metallicReflectanceTexture=e,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!0):(this._material.metallicReflectanceTexture=null,this._material.useOnlyMetallicFromMetallicReflectanceTexture=!1)}get specularWeightTexture(){return this._material.metallicReflectanceTexture}set specularColor(e){this._specWorkflow?this._material.reflectivityColor=e:this._material.metallicReflectanceColor=e}get specularColor(){return this._specWorkflow?this._material.reflectivityColor:this._material.metallicReflectanceColor}set specularColorTexture(e){this._specWorkflow?(this._material.reflectivityTexture=e,this._material.reflectivityTexture&&(this._material.reflectivityTexture.hasAlpha=!0)):this._material.reflectanceTexture=e}get specularColorTexture(){return this._specWorkflow?this._material.reflectivityTexture:this._material.reflectanceTexture}set specularRoughness(e){this._material.roughness=e}get specularRoughness(){var e;return null!==(e=this._material.roughness)&&void 0!==e?e:1}set specularRoughnessTexture(e){this.baseMetalnessTexture||(this._material.metallicTexture=e)}get specularRoughnessTexture(){return this._material.metallicTexture}set specularIor(e){this._material.indexOfRefraction=e}get specularIor(){return this._material.indexOfRefraction}get glossiness(){var e;return null!==(e=this._material.microSurface)&&void 0!==e?e:1}set glossiness(e){this._material.microSurface=e}set emissionColor(e){this._material.emissiveColor=e}get emissionColor(){return this._material.emissiveColor}set emissionLuminance(e){this._material.emissiveIntensity=e}get emissionLuminance(){return this._material.emissiveIntensity}set emissionColorTexture(e){this._material.emissiveTexture=e}get emissionColorTexture(){return this._material.emissiveTexture}set ambientOcclusionTexture(e){this._material.ambientTexture=e,e&&(this._material.useAmbientInGrayScale=!0)}get ambientOcclusionTexture(){return this._material.ambientTexture}set ambientOcclusionTextureStrength(e){this._material.ambientTextureStrength=e}get ambientOcclusionTextureStrength(){var e;return null!==(e=this._material.ambientTextureStrength)&&void 0!==e?e:1}configureCoat(){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.remapF0OnInterfaceChange=!1}set coatWeight(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.intensity=e}get coatWeight(){return this._material.clearCoat.intensity}set coatWeightTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.texture=e}get coatWeightTexture(){return this._material.clearCoat.texture}set coatColor(e){this._material.clearCoat.isTintEnabled=e!=t.Color3.White(),this._material.clearCoat.tintColor=e}set coatColorTexture(e){this._material.clearCoat.tintTexture=e}set coatRoughness(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.roughness=e}get coatRoughness(){var e;return null!==(e=this._material.clearCoat.roughness)&&void 0!==e?e:0}set coatRoughnessTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.useRoughnessFromMainTexture=!1,this._material.clearCoat.textureRoughness=e}get coatRoughnessTexture(){return this._material.clearCoat.textureRoughness}set coatIor(e){this._material.clearCoat.indexOfRefraction=e}set coatDarkening(e){}set coatDarkeningTexture(e){}set coatRoughnessAnisotropy(e){}get coatRoughnessAnisotropy(){return 0}set geometryCoatTangentAngle(e){}set geometryCoatTangentTexture(e){}get geometryCoatTangentTexture(){return null}set transmissionWeight(e){this._material.subSurface.isRefractionEnabled=e>0,this._material.subSurface.refractionIntensity=e}get transmissionWeight(){return this._material.subSurface.isRefractionEnabled?this._material.subSurface.refractionIntensity:0}set transmissionWeightTexture(e){this._material.subSurface.isRefractionEnabled=!0,this._material.subSurface.refractionIntensityTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set transmissionDepth(e){this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(new t.Color3(e,e,e))}get transmissionDepth(){return this.transmissionWeight>0?this._material.subSurface.tintColorAtDistance:0}set transmissionColor(e){this.transmissionWeight>0?this._material.subSurface.tintColor=e:this.subsurfaceWeight>0&&this._material.subSurface.diffusionDistance.multiplyInPlace(e)}get transmissionColor(){return this.transmissionWeight>0?this._material.subSurface.tintColor:this.subsurfaceWeight>0?this._material.subSurface.diffusionDistance:new t.Color3(0,0,0)}set transmissionScatter(e){this._material.subSurface.diffusionDistance=e}get transmissionScatter(){return this._material.subSurface.diffusionDistance}set transmissionScatterTexture(e){}set transmissionScatterAnisotropy(e){}set transmissionDispersionAbbeNumber(e){}set transmissionDispersionScale(e){e>0?(this._material.subSurface.isDispersionEnabled=!0,this._material.subSurface.dispersion=20/e):(this._material.subSurface.isDispersionEnabled=!1,this._material.subSurface.dispersion=0)}get refractionBackgroundTexture(){return this._material.subSurface.refractionTexture}set refractionBackgroundTexture(e){this._material.subSurface.refractionTexture=e}configureTransmission(){this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.useAlbedoToTintRefraction=!0,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0}configureVolume(){}set geometryThinWalled(e){}get geometryThinWalled(){return 0===this._material.subSurface.maximumThickness}set volumeThicknessTexture(e){this._material.subSurface.thicknessTexture=e,this._material.subSurface.useGltfStyleTextures=!0}set volumeThickness(e){this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=e,this._material.subSurface.useThicknessAsDepth=!0,e>0&&(this._material.subSurface.volumeIndexOfRefraction=this._material.indexOfRefraction)}configureSubsurface(){this._material.subSurface.useGltfStyleTextures=!0,this._material.subSurface.volumeIndexOfRefraction=1,this._material.subSurface.minimumThickness=0,this._material.subSurface.maximumThickness=0,this._material.subSurface.useAlbedoToTintTranslucency=!1}set subsurfaceWeight(e){this._material.subSurface.isTranslucencyEnabled=e>0,this._material.subSurface.translucencyIntensity=e}get subsurfaceWeight(){return this._material.subSurface.isTranslucencyEnabled?this._material.subSurface.translucencyIntensity:0}set subsurfaceWeightTexture(e){this._material.subSurface.translucencyIntensityTexture=e}set subsurfaceColor(e){const n=new t.Vector3(-Math.log(this.transmissionColor.r),-Math.log(this.transmissionColor.g),-Math.log(this.transmissionColor.b));n.scaleInPlace(1/Math.max(this.transmissionDepth,.001));const o=n,r=Math.max(o.x,Math.max(o.y,o.z)),a=r>0?1/r:1;this._material.subSurface.diffusionDistance=new t.Color3(Math.exp(-o.x*a),Math.exp(-o.y*a),Math.exp(-o.z*a))}set subsurfaceColorTexture(e){}set diffuseTransmissionTint(e){this._material.subSurface.tintColor=e}get diffuseTransmissionTint(){return this._material.subSurface.tintColor}set diffuseTransmissionTintTexture(e){this._material.subSurface.translucencyColorTexture=e}get subsurfaceRadius(){return 1}set subsurfaceRadius(e){}get subsurfaceRadiusScale(){var e;return null!==(e=this._material.subSurface.scatteringDiffusionProfile)&&void 0!==e?e:t.Color3.White()}set subsurfaceRadiusScale(e){this._material.subSurface.scatteringDiffusionProfile=e}set subsurfaceScatterAnisotropy(e){}isTranslucent(){return this.transmissionWeight>0||this.subsurfaceWeight>0}configureFuzz(){this._material.sheen.isEnabled=!0,this._material.sheen.useRoughnessFromMainTexture=!1,this._material.sheen.albedoScaling=!0}set fuzzWeight(e){this._material.sheen.isEnabled=!0,this._material.sheen.intensity=e}set fuzzWeightTexture(e){this._material.sheen.texture||(this._material.sheen.texture=e)}set fuzzColor(e){this._material.sheen.isEnabled=!0,this._material.sheen.color=e}set fuzzColorTexture(e){this._material.sheen.texture=e}set fuzzRoughness(e){this._material.sheen.isEnabled=!0,this._material.sheen.roughness=e}set fuzzRoughnessTexture(e){this._material.sheen.isEnabled=!0,this._material.sheen.textureRoughness=e}set specularRoughnessAnisotropy(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.intensity=e}get specularRoughnessAnisotropy(){return this._material.anisotropy.intensity}set geometryTangentAngle(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.angle=e}set geometryTangentTexture(e){this._material.anisotropy.isEnabled=!0,this._material.anisotropy.texture=e}get geometryTangentTexture(){return this._material.anisotropy.texture}configureGltfStyleAnisotropy(e=!0){}set thinFilmWeight(e){this._material.iridescence.isEnabled=e>0,this._material.iridescence.intensity=e}set thinFilmIor(e){this._material.iridescence.indexOfRefraction=e}set thinFilmThicknessMinimum(e){this._material.iridescence.minimumThickness=e}set thinFilmThicknessMaximum(e){this._material.iridescence.maximumThickness=e}set thinFilmWeightTexture(e){this._material.iridescence.texture=e}set thinFilmThicknessTexture(e){this._material.iridescence.thicknessTexture=e}set unlit(e){this._material.unlit=e}set geometryOpacity(e){this._material.alpha=e}get geometryOpacity(){return this._material.alpha}set geometryNormalTexture(e){this._material.bumpTexture=e,this._material.forceIrradianceInFragment=!0}get geometryNormalTexture(){return this._material.bumpTexture}setNormalMapInversions(e,t){this._material.invertNormalMapX=e,this._material.invertNormalMapY=t}set geometryCoatNormalTexture(e){this._material.clearCoat.isEnabled=!0,this._material.clearCoat.bumpTexture=e}get geometryCoatNormalTexture(){return this._material.clearCoat.bumpTexture}set geometryCoatNormalTextureScale(e){this._material.clearCoat.bumpTexture&&(this._material.clearCoat.bumpTexture.level=e)}}var pa={__proto__:null,PBRMaterialLoadingAdapter:ma},_a={__proto__:null,AddObjectAccessorToKey:V,AnimationPropertyInfo:Fn,ArrayItem:q,CloneKHRInteractivityGraph:Mo,CreateEffectiveKHRInteractivityGraph:Vo,CreateKHRInteractivityDocument:jo,CreateKHRInteractivityGraphModel:Uo,EXT_lights_area:$e,EXT_lights_ies:be,EXT_lights_image_based:ee,EXT_mesh_gpu_instancing:re,EXT_meshopt_compression:le,EXT_texture_avif:fe,EXT_texture_webp:he,ExtrasAsMetadata:Qr,FlowGraphEventReferenceBlock:aa,FlowGraphGLTFDataProvider:ea,FlowGraphObjectReferenceBlock:oa,FlowGraphUnsupportedInteractivityBlock:la,GLTFFileLoader:v,GLTFLoader:X,GetInteractivityNodeState:Er,GetInteractivityObjectReference:na,GetKHRInteractivityImportResult:dr,GetKHRInteractivityImportResults:hr,GetMappingForKey:P,GetPathToObjectConverter:G,InitializeInteractivityNodeState:Lr,InteractivityGraphToFlowGraphParser:Xo,KHR_INTERACTIVITY_SPECIFICATION_COMMIT:Ro,KHR_animation_pointer:Cn,KHR_draco_mesh_compression:we,KHR_gaussian_splatting:Se,KHR_interactivity:mr,KHR_lights:Ne,KHR_materials_anisotropy:ut,KHR_materials_clearcoat:Qe,KHR_materials_coat:tt,KHR_materials_diffuse_roughness:an,KHR_materials_diffuse_transmission:Kt,KHR_materials_dispersion:tn,KHR_materials_emissive_strength:mt,KHR_materials_fuzz:Tt,KHR_materials_ior:kt,KHR_materials_iridescence:at,KHR_materials_pbrSpecularGlossiness:Ke,KHR_materials_sheen:gt,KHR_materials_specular:Rt,KHR_materials_transmission:$t,KHR_materials_unlit:ze,KHR_materials_variants:Lt,KHR_materials_volume:zt,KHR_materials_volume_scatter:Qt,KHR_mesh_quantization:cn,KHR_node_hoverability:Ur,KHR_node_selectability:Gr,KHR_node_visibility:br,KHR_texture_basisu:pn,KHR_texture_transform:vn,KHR_xmp_json_ld:xn,LoadBoundingInfoFromPositionAccessor:Y,MSFT_audio_emitter:Qn,MSFT_lod:to,MSFT_minecraftMesh:ao,MSFT_sRGBFactors:uo,OpenPBRMaterialLoadingAdapter:da,PBRMaterialLoadingAdapter:ma,ParseDebugLogTemplate:xo,RegisterEXT_lights_area:De,RegisterEXT_lights_ies:xe,RegisterEXT_lights_image_based:ne,RegisterEXT_mesh_gpu_instancing:se,RegisterEXT_meshopt_compression:ce,RegisterEXT_texture_avif:ve,RegisterEXT_texture_webp:pe,RegisterExtrasAsMetadata:Zr,RegisterGLTF2Loader:J,RegisterGLTFLoaderAnimation:Bn,RegisterKHR_animation_pointer:Mn,RegisterKHR_draco_mesh_compression:Ce,RegisterKHR_gaussian_splatting:Le,RegisterKHR_interactivity:vr,RegisterKHR_lights:Ge,RegisterKHR_materials_anisotropy:dt,RegisterKHR_materials_clearcoat:Ze,RegisterKHR_materials_coat:ot,RegisterKHR_materials_diffuse_roughness:ln,RegisterKHR_materials_diffuse_transmission:Ut,RegisterKHR_materials_dispersion:on,RegisterKHR_materials_emissive_strength:_t,RegisterKHR_materials_fuzz:At,RegisterKHR_materials_ior:St,RegisterKHR_materials_iridescence:it,RegisterKHR_materials_pbrSpecularGlossiness:Ue,RegisterKHR_materials_sheen:yt,RegisterKHR_materials_specular:Ot,RegisterKHR_materials_transmission:Dt,RegisterKHR_materials_unlit:Ye,RegisterKHR_materials_variants:Nt,RegisterKHR_materials_volume:Yt,RegisterKHR_materials_volume_scatter:Zt,RegisterKHR_mesh_quantization:hn,RegisterKHR_node_hoverability:Yr,RegisterKHR_node_selectability:Dr,RegisterKHR_node_visibility:wr,RegisterKHR_texture_basisu:fn,RegisterKHR_texture_transform:bn,RegisterKHR_xmp_json_ld:wn,RegisterMSFT_audio_emitter:Zn,RegisterMSFT_lod:oo,RegisterMSFT_minecraftMesh:io,RegisterMSFT_sRGBFactors:ho,SetInteractivityNodeState:Nr,SetInterpolationForKey:$,TransformNodeAnimationPropertyInfo:Ln,TransmissionHelper:Bt,WeightAnimationPropertyInfo:En,_AddInteractivityObjectModel:pr,_RegisterKHRInteractivityRuntime:fr,_RegisterKHRNodeHoverabilityRuntime:zr,_RegisterKHRNodeSelectabilityRuntime:$r,_RegisterKHRNodeVisibilityRuntime:xr,addNewInteractivityFlowGraphMapping:fo,ensureTransmissionHelper:Gt,getAllSupportedNativeNodeTypes:wo,getMappingForDeclaration:po,getMappingForFullOperationName:mo,getNoOpMappingForDeclaration:_o,getQuaternion:In,getVector3:kn,getWeights:Sn,gltfTypeToBabylonType:Co,registerGLTFExtension:W,registeredGLTFExtensions:K,unregisterGLTFExtension:U};const fa=Object.assign({},ca),ga=Object.assign(Object.assign({},{__proto__:null}),{Extensions:fa}),va=Object.assign(Object.assign({},_a),{Loader:ga}),ya="undefined"!=typeof global?global:"undefined"!=typeof window?window:void 0;if(void 0!==ya){ya.BABYLON=ya.BABYLON||{};const e=ya.BABYLON;e.GLTF2=e.GLTF2||{},e.GLTF2.Loader=e.GLTF2.Loader||{},e.GLTF2.Loader.Extensions=e.GLTF2.Loader.Extensions||{};const t=["Loader"];for(const n in fa)e.GLTF2.Loader.Extensions[n]=fa[n],t.push(n);for(const n in ga)"Extensions"!==n&&(e.GLTF2.Loader[n]=ga[n],t.push(n));for(const n in va)t.indexOf(n)>-1||(e.GLTF2[n]=va[n])}e.GLTF2=va,e.GLTFFileLoader=v,e.GLTFLoaderDefaultOptions=f,e.GLTFValidation=r,e.RegisterGLTFFileLoader=b});
|
|
2
2
|
//# sourceMappingURL=babylon.glTF2FileLoader.min.js.map
|