@babylonjs/loaders 5.19.0 → 5.22.0

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.
Files changed (91) hide show
  1. package/OBJ/mtlFileLoader.js +25 -27
  2. package/OBJ/mtlFileLoader.js.map +1 -1
  3. package/OBJ/objFileLoader.js +112 -124
  4. package/OBJ/objFileLoader.js.map +1 -1
  5. package/OBJ/solidParser.js +118 -125
  6. package/OBJ/solidParser.js.map +1 -1
  7. package/STL/stlFileLoader.js +61 -63
  8. package/STL/stlFileLoader.js.map +1 -1
  9. package/glTF/1.0/glTFBinaryExtension.js +26 -30
  10. package/glTF/1.0/glTFBinaryExtension.js.map +1 -1
  11. package/glTF/1.0/glTFLoader.js +409 -432
  12. package/glTF/1.0/glTFLoader.js.map +1 -1
  13. package/glTF/1.0/glTFLoaderUtils.js +33 -37
  14. package/glTF/1.0/glTFLoaderUtils.js.map +1 -1
  15. package/glTF/1.0/glTFMaterialsCommonExtension.js +27 -31
  16. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +1 -1
  17. package/glTF/2.0/Extensions/EXT_lights_image_based.js +48 -59
  18. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +1 -1
  19. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +24 -29
  20. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +1 -1
  21. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +13 -16
  22. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +1 -1
  23. package/glTF/2.0/Extensions/EXT_texture_webp.js +13 -16
  24. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +1 -1
  25. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +22 -26
  26. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +1 -1
  27. package/glTF/2.0/Extensions/KHR_animation_pointer.js +63 -76
  28. package/glTF/2.0/Extensions/KHR_animation_pointer.js.map +1 -1
  29. package/glTF/2.0/Extensions/KHR_animation_pointer.map.js +90 -120
  30. package/glTF/2.0/Extensions/KHR_animation_pointer.map.js.map +1 -1
  31. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +25 -28
  32. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +1 -1
  33. package/glTF/2.0/Extensions/KHR_lights_punctual.js +27 -30
  34. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +1 -1
  35. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +25 -28
  36. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +1 -1
  37. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +15 -18
  38. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +1 -1
  39. package/glTF/2.0/Extensions/KHR_materials_ior.js +21 -24
  40. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +1 -1
  41. package/glTF/2.0/Extensions/KHR_materials_iridescence.js +27 -31
  42. package/glTF/2.0/Extensions/KHR_materials_iridescence.js.map +1 -1
  43. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +24 -27
  44. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +1 -1
  45. package/glTF/2.0/Extensions/KHR_materials_sheen.js +23 -26
  46. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +1 -1
  47. package/glTF/2.0/Extensions/KHR_materials_specular.js +23 -26
  48. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +1 -1
  49. package/glTF/2.0/Extensions/KHR_materials_translucency.js +20 -23
  50. package/glTF/2.0/Extensions/KHR_materials_translucency.js.map +1 -1
  51. package/glTF/2.0/Extensions/KHR_materials_transmission.js +82 -86
  52. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +1 -1
  53. package/glTF/2.0/Extensions/KHR_materials_unlit.js +19 -22
  54. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +1 -1
  55. package/glTF/2.0/Extensions/KHR_materials_variants.js +79 -97
  56. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +1 -1
  57. package/glTF/2.0/Extensions/KHR_materials_volume.js +20 -23
  58. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +1 -1
  59. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +6 -8
  60. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +1 -1
  61. package/glTF/2.0/Extensions/KHR_texture_basisu.js +13 -16
  62. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +1 -1
  63. package/glTF/2.0/Extensions/KHR_texture_transform.js +12 -15
  64. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +1 -1
  65. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +12 -15
  66. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +1 -1
  67. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +77 -95
  68. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +1 -1
  69. package/glTF/2.0/Extensions/MSFT_lod.js +114 -139
  70. package/glTF/2.0/Extensions/MSFT_lod.js.map +1 -1
  71. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +12 -15
  72. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +1 -1
  73. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +12 -15
  74. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +1 -1
  75. package/glTF/2.0/glTFLoader.js +739 -823
  76. package/glTF/2.0/glTFLoader.js.map +1 -1
  77. package/glTF/glTFFileLoader.js +337 -404
  78. package/glTF/glTFFileLoader.js.map +1 -1
  79. package/glTF/glTFValidation.js +32 -39
  80. package/glTF/glTFValidation.js.map +1 -1
  81. package/legacy/legacy-glTF.js +3 -3
  82. package/legacy/legacy-glTF.js.map +1 -1
  83. package/legacy/legacy-glTF1.js +2 -2
  84. package/legacy/legacy-glTF1.js.map +1 -1
  85. package/legacy/legacy-glTF2.js +12 -12
  86. package/legacy/legacy-glTF2.js.map +1 -1
  87. package/legacy/legacy-objFileLoader.js +2 -2
  88. package/legacy/legacy-objFileLoader.js.map +1 -1
  89. package/legacy/legacy-stlFileLoader.js +2 -2
  90. package/legacy/legacy-stlFileLoader.js.map +1 -1
  91. package/package.json +3 -6
@@ -23,9 +23,7 @@ import { BoundingInfo } from "@babylonjs/core/Culling/boundingInfo.js";
23
23
  /**
24
24
  * Helper class for working with arrays when loading the glTF asset
25
25
  */
26
- var ArrayItem = /** @class */ (function () {
27
- function ArrayItem() {
28
- }
26
+ export class ArrayItem {
29
27
  /**
30
28
  * Gets an item from the given array.
31
29
  * @param context The context when loading the asset
@@ -33,39 +31,33 @@ var ArrayItem = /** @class */ (function () {
33
31
  * @param index The index to the array
34
32
  * @returns The array item
35
33
  */
36
- ArrayItem.Get = function (context, array, index) {
34
+ static Get(context, array, index) {
37
35
  if (!array || index == undefined || !array[index]) {
38
- throw new Error("".concat(context, ": Failed to find index (").concat(index, ")"));
36
+ throw new Error(`${context}: Failed to find index (${index})`);
39
37
  }
40
38
  return array[index];
41
- };
39
+ }
42
40
  /**
43
41
  * Assign an `index` field to each item of the given array.
44
42
  * @param array The array of items
45
43
  */
46
- ArrayItem.Assign = function (array) {
44
+ static Assign(array) {
47
45
  if (array) {
48
- for (var index = 0; index < array.length; index++) {
46
+ for (let index = 0; index < array.length; index++) {
49
47
  array[index].index = index;
50
48
  }
51
49
  }
52
- };
53
- return ArrayItem;
54
- }());
55
- export { ArrayItem };
50
+ }
51
+ }
56
52
  // https://stackoverflow.com/a/48218209
57
- function mergeDeep() {
58
- var objects = [];
59
- for (var _i = 0; _i < arguments.length; _i++) {
60
- objects[_i] = arguments[_i];
61
- }
62
- var isObject = function (obj) { return obj && typeof obj === "object"; };
63
- return objects.reduce(function (prev, obj) {
64
- Object.keys(obj).forEach(function (key) {
65
- var pVal = prev[key];
66
- var oVal = obj[key];
53
+ function mergeDeep(...objects) {
54
+ const isObject = (obj) => obj && typeof obj === "object";
55
+ return objects.reduce((prev, obj) => {
56
+ Object.keys(obj).forEach((key) => {
57
+ const pVal = prev[key];
58
+ const oVal = obj[key];
67
59
  if (Array.isArray(pVal) && Array.isArray(oVal)) {
68
- prev[key] = pVal.concat.apply(pVal, oVal);
60
+ prev[key] = pVal.concat(...oVal);
69
61
  }
70
62
  else if (isObject(pVal) && isObject(oVal)) {
71
63
  prev[key] = mergeDeep(pVal, oVal);
@@ -80,12 +72,12 @@ function mergeDeep() {
80
72
  /**
81
73
  * The glTF 2.0 loader
82
74
  */
83
- var GLTFLoader = /** @class */ (function () {
75
+ export class GLTFLoader {
84
76
  /**
85
77
  * @param parent
86
78
  * @hidden
87
79
  */
88
- function GLTFLoader(parent) {
80
+ constructor(parent) {
89
81
  /** @hidden */
90
82
  this._completePromises = new Array();
91
83
  /** @hidden */
@@ -110,90 +102,70 @@ var GLTFLoader = /** @class */ (function () {
110
102
  * @param name The name of the loader extension.
111
103
  * @param factory The factory function that creates the loader extension.
112
104
  */
113
- GLTFLoader.RegisterExtension = function (name, factory) {
105
+ static RegisterExtension(name, factory) {
114
106
  if (GLTFLoader.UnregisterExtension(name)) {
115
- Logger.Warn("Extension with the name '".concat(name, "' already exists"));
107
+ Logger.Warn(`Extension with the name '${name}' already exists`);
116
108
  }
117
109
  GLTFLoader._RegisteredExtensions[name] = {
118
110
  factory: factory,
119
111
  };
120
- };
112
+ }
121
113
  /**
122
114
  * Unregisters a loader extension.
123
115
  * @param name The name of the loader extension.
124
116
  * @returns A boolean indicating whether the extension has been unregistered
125
117
  */
126
- GLTFLoader.UnregisterExtension = function (name) {
118
+ static UnregisterExtension(name) {
127
119
  if (!GLTFLoader._RegisteredExtensions[name]) {
128
120
  return false;
129
121
  }
130
122
  delete GLTFLoader._RegisteredExtensions[name];
131
123
  return true;
132
- };
133
- Object.defineProperty(GLTFLoader.prototype, "gltf", {
134
- /**
135
- * The object that represents the glTF JSON.
136
- */
137
- get: function () {
138
- if (!this._gltf) {
139
- throw new Error("glTF JSON is not available");
140
- }
141
- return this._gltf;
142
- },
143
- enumerable: false,
144
- configurable: true
145
- });
146
- Object.defineProperty(GLTFLoader.prototype, "bin", {
147
- /**
148
- * The BIN chunk of a binary glTF.
149
- */
150
- get: function () {
151
- return this._bin;
152
- },
153
- enumerable: false,
154
- configurable: true
155
- });
156
- Object.defineProperty(GLTFLoader.prototype, "parent", {
157
- /**
158
- * The parent file loader.
159
- */
160
- get: function () {
161
- return this._parent;
162
- },
163
- enumerable: false,
164
- configurable: true
165
- });
166
- Object.defineProperty(GLTFLoader.prototype, "babylonScene", {
167
- /**
168
- * The Babylon scene when loading the asset.
169
- */
170
- get: function () {
171
- if (!this._babylonScene) {
172
- throw new Error("Scene is not available");
173
- }
174
- return this._babylonScene;
175
- },
176
- enumerable: false,
177
- configurable: true
178
- });
179
- Object.defineProperty(GLTFLoader.prototype, "rootBabylonMesh", {
180
- /**
181
- * The root Babylon mesh when loading the asset.
182
- */
183
- get: function () {
184
- return this._rootBabylonMesh;
185
- },
186
- enumerable: false,
187
- configurable: true
188
- });
124
+ }
125
+ /**
126
+ * The object that represents the glTF JSON.
127
+ */
128
+ get gltf() {
129
+ if (!this._gltf) {
130
+ throw new Error("glTF JSON is not available");
131
+ }
132
+ return this._gltf;
133
+ }
134
+ /**
135
+ * The BIN chunk of a binary glTF.
136
+ */
137
+ get bin() {
138
+ return this._bin;
139
+ }
140
+ /**
141
+ * The parent file loader.
142
+ */
143
+ get parent() {
144
+ return this._parent;
145
+ }
146
+ /**
147
+ * The Babylon scene when loading the asset.
148
+ */
149
+ get babylonScene() {
150
+ if (!this._babylonScene) {
151
+ throw new Error("Scene is not available");
152
+ }
153
+ return this._babylonScene;
154
+ }
155
+ /**
156
+ * The root Babylon mesh when loading the asset.
157
+ */
158
+ get rootBabylonMesh() {
159
+ return this._rootBabylonMesh;
160
+ }
189
161
  /** @hidden */
190
- GLTFLoader.prototype.dispose = function () {
162
+ dispose() {
191
163
  if (this._disposed) {
192
164
  return;
193
165
  }
194
166
  this._disposed = true;
195
167
  this._completePromises.length = 0;
196
- this._extensions.forEach(function (extension) { return extension.dispose && extension.dispose(); });
168
+ this._extensions.forEach((extension) => extension.dispose && extension.dispose());
197
169
  this._extensions.length = 0;
198
170
  this._gltf = null; // TODO
199
171
  this._bin = null;
@@ -202,7 +174,7 @@ var GLTFLoader = /** @class */ (function () {
202
174
  this._defaultBabylonMaterialData = {};
203
175
  this._postSceneLoadActions.length = 0;
204
176
  this._parent.dispose();
205
- };
177
+ }
206
178
  /**
207
179
  * @param meshesNames
208
180
  * @param scene
@@ -213,46 +185,43 @@ var GLTFLoader = /** @class */ (function () {
213
185
  * @param fileName
214
186
  * @hidden
215
187
  */
216
- GLTFLoader.prototype.importMeshAsync = function (meshesNames, scene, container, data, rootUrl, onProgress, fileName) {
217
- var _this = this;
218
- if (fileName === void 0) { fileName = ""; }
219
- return Promise.resolve().then(function () {
220
- _this._babylonScene = scene;
221
- _this._assetContainer = container;
222
- _this._loadData(data);
223
- var nodes = null;
188
+ importMeshAsync(meshesNames, scene, container, data, rootUrl, onProgress, fileName = "") {
189
+ return Promise.resolve().then(() => {
190
+ this._babylonScene = scene;
191
+ this._assetContainer = container;
192
+ this._loadData(data);
193
+ let nodes = null;
224
194
  if (meshesNames) {
225
- var nodeMap_1 = {};
226
- if (_this._gltf.nodes) {
227
- for (var _i = 0, _a = _this._gltf.nodes; _i < _a.length; _i++) {
228
- var node = _a[_i];
195
+ const nodeMap = {};
196
+ if (this._gltf.nodes) {
197
+ for (const node of this._gltf.nodes) {
229
198
  if (node.name) {
230
- nodeMap_1[node.name] = node.index;
199
+ nodeMap[node.name] = node.index;
231
200
  }
232
201
  }
233
202
  }
234
- var names = meshesNames instanceof Array ? meshesNames : [meshesNames];
235
- nodes = names.map(function (name) {
236
- var node = nodeMap_1[name];
203
+ const names = meshesNames instanceof Array ? meshesNames : [meshesNames];
204
+ nodes = names.map((name) => {
205
+ const node = nodeMap[name];
237
206
  if (node === undefined) {
238
- throw new Error("Failed to find node '".concat(name, "'"));
207
+ throw new Error(`Failed to find node '${name}'`);
239
208
  }
240
209
  return node;
241
210
  });
242
211
  }
243
- return _this._loadAsync(rootUrl, fileName, nodes, function () {
212
+ return this._loadAsync(rootUrl, fileName, nodes, () => {
244
213
  return {
245
- meshes: _this._getMeshes(),
214
+ meshes: this._getMeshes(),
246
215
  particleSystems: [],
247
- skeletons: _this._getSkeletons(),
248
- animationGroups: _this._getAnimationGroups(),
249
- lights: _this._babylonLights,
250
- transformNodes: _this._getTransformNodes(),
251
- geometries: _this._getGeometries(),
216
+ skeletons: this._getSkeletons(),
217
+ animationGroups: this._getAnimationGroups(),
218
+ lights: this._babylonLights,
219
+ transformNodes: this._getTransformNodes(),
220
+ geometries: this._getGeometries(),
252
221
  };
253
222
  });
254
223
  });
255
- };
224
+ }
256
225
  /**
257
226
  * @param scene
258
227
  * @param data
@@ -261,106 +230,103 @@ var GLTFLoader = /** @class */ (function () {
261
230
  * @param fileName
262
231
  * @hidden
263
232
  */
264
- GLTFLoader.prototype.loadAsync = function (scene, data, rootUrl, onProgress, fileName) {
265
- var _this = this;
266
- if (fileName === void 0) { fileName = ""; }
267
- return Promise.resolve().then(function () {
268
- _this._babylonScene = scene;
269
- _this._loadData(data);
270
- return _this._loadAsync(rootUrl, fileName, null, function () { return undefined; });
233
+ loadAsync(scene, data, rootUrl, onProgress, fileName = "") {
234
+ return Promise.resolve().then(() => {
235
+ this._babylonScene = scene;
236
+ this._loadData(data);
237
+ return this._loadAsync(rootUrl, fileName, null, () => undefined);
271
238
  });
272
- };
273
- GLTFLoader.prototype._loadAsync = function (rootUrl, fileName, nodes, resultFunc) {
274
- var _this = this;
239
+ }
240
+ _loadAsync(rootUrl, fileName, nodes, resultFunc) {
275
241
  return Promise.resolve()
276
- .then(function () {
277
- _this._rootUrl = rootUrl;
278
- _this._uniqueRootUrl = !rootUrl.startsWith("file:") && fileName ? rootUrl : "".concat(rootUrl).concat(Date.now(), "/");
279
- _this._fileName = fileName;
280
- _this._loadExtensions();
281
- _this._checkExtensions();
282
- var loadingToReadyCounterName = "".concat(GLTFLoaderState[GLTFLoaderState.LOADING], " => ").concat(GLTFLoaderState[GLTFLoaderState.READY]);
283
- var loadingToCompleteCounterName = "".concat(GLTFLoaderState[GLTFLoaderState.LOADING], " => ").concat(GLTFLoaderState[GLTFLoaderState.COMPLETE]);
284
- _this._parent._startPerformanceCounter(loadingToReadyCounterName);
285
- _this._parent._startPerformanceCounter(loadingToCompleteCounterName);
286
- _this._parent._setState(GLTFLoaderState.LOADING);
287
- _this._extensionsOnLoading();
288
- var promises = new Array();
242
+ .then(() => {
243
+ this._rootUrl = rootUrl;
244
+ this._uniqueRootUrl = !rootUrl.startsWith("file:") && fileName ? rootUrl : `${rootUrl}${Date.now()}/`;
245
+ this._fileName = fileName;
246
+ this._loadExtensions();
247
+ this._checkExtensions();
248
+ const loadingToReadyCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.READY]}`;
249
+ const loadingToCompleteCounterName = `${GLTFLoaderState[GLTFLoaderState.LOADING]} => ${GLTFLoaderState[GLTFLoaderState.COMPLETE]}`;
250
+ this._parent._startPerformanceCounter(loadingToReadyCounterName);
251
+ this._parent._startPerformanceCounter(loadingToCompleteCounterName);
252
+ this._parent._setState(GLTFLoaderState.LOADING);
253
+ this._extensionsOnLoading();
254
+ const promises = new Array();
289
255
  // Block the marking of materials dirty until the scene is loaded.
290
- var oldBlockMaterialDirtyMechanism = _this._babylonScene.blockMaterialDirtyMechanism;
291
- _this._babylonScene.blockMaterialDirtyMechanism = true;
292
- if (!_this.parent.loadOnlyMaterials) {
256
+ const oldBlockMaterialDirtyMechanism = this._babylonScene.blockMaterialDirtyMechanism;
257
+ this._babylonScene.blockMaterialDirtyMechanism = true;
258
+ if (!this.parent.loadOnlyMaterials) {
293
259
  if (nodes) {
294
- promises.push(_this.loadSceneAsync("/nodes", { nodes: nodes, index: -1 }));
260
+ promises.push(this.loadSceneAsync("/nodes", { nodes: nodes, index: -1 }));
295
261
  }
296
- else if (_this._gltf.scene != undefined || (_this._gltf.scenes && _this._gltf.scenes[0])) {
297
- var scene = ArrayItem.Get("/scene", _this._gltf.scenes, _this._gltf.scene || 0);
298
- promises.push(_this.loadSceneAsync("/scenes/".concat(scene.index), scene));
262
+ else if (this._gltf.scene != undefined || (this._gltf.scenes && this._gltf.scenes[0])) {
263
+ const scene = ArrayItem.Get(`/scene`, this._gltf.scenes, this._gltf.scene || 0);
264
+ promises.push(this.loadSceneAsync(`/scenes/${scene.index}`, scene));
299
265
  }
300
266
  }
301
- if (!_this.parent.skipMaterials && _this.parent.loadAllMaterials && _this._gltf.materials) {
302
- for (var m = 0; m < _this._gltf.materials.length; ++m) {
303
- var material = _this._gltf.materials[m];
304
- var context_1 = "/materials/" + m;
305
- var babylonDrawMode = Material.TriangleFillMode;
306
- promises.push(_this._loadMaterialAsync(context_1, material, null, babylonDrawMode, function () { }));
267
+ if (!this.parent.skipMaterials && this.parent.loadAllMaterials && this._gltf.materials) {
268
+ for (let m = 0; m < this._gltf.materials.length; ++m) {
269
+ const material = this._gltf.materials[m];
270
+ const context = "/materials/" + m;
271
+ const babylonDrawMode = Material.TriangleFillMode;
272
+ promises.push(this._loadMaterialAsync(context, material, null, babylonDrawMode, () => { }));
307
273
  }
308
274
  }
309
275
  // Restore the blocking of material dirty.
310
- _this._babylonScene.blockMaterialDirtyMechanism = oldBlockMaterialDirtyMechanism;
311
- if (_this._parent.compileMaterials) {
312
- promises.push(_this._compileMaterialsAsync());
276
+ this._babylonScene.blockMaterialDirtyMechanism = oldBlockMaterialDirtyMechanism;
277
+ if (this._parent.compileMaterials) {
278
+ promises.push(this._compileMaterialsAsync());
313
279
  }
314
- if (_this._parent.compileShadowGenerators) {
315
- promises.push(_this._compileShadowGeneratorsAsync());
280
+ if (this._parent.compileShadowGenerators) {
281
+ promises.push(this._compileShadowGeneratorsAsync());
316
282
  }
317
- var resultPromise = Promise.all(promises).then(function () {
318
- if (_this._rootBabylonMesh) {
319
- _this._rootBabylonMesh.setEnabled(true);
283
+ const resultPromise = Promise.all(promises).then(() => {
284
+ if (this._rootBabylonMesh) {
285
+ this._rootBabylonMesh.setEnabled(true);
320
286
  }
321
- _this._extensionsOnReady();
322
- _this._parent._setState(GLTFLoaderState.READY);
323
- _this._startAnimations();
287
+ this._extensionsOnReady();
288
+ this._parent._setState(GLTFLoaderState.READY);
289
+ this._startAnimations();
324
290
  return resultFunc();
325
291
  });
326
- return resultPromise.then(function (result) {
327
- _this._parent._endPerformanceCounter(loadingToReadyCounterName);
328
- Tools.SetImmediate(function () {
329
- if (!_this._disposed) {
330
- Promise.all(_this._completePromises).then(function () {
331
- _this._parent._endPerformanceCounter(loadingToCompleteCounterName);
332
- _this._parent._setState(GLTFLoaderState.COMPLETE);
333
- _this._parent.onCompleteObservable.notifyObservers(undefined);
334
- _this._parent.onCompleteObservable.clear();
335
- _this.dispose();
336
- }, function (error) {
337
- _this._parent.onErrorObservable.notifyObservers(error);
338
- _this._parent.onErrorObservable.clear();
339
- _this.dispose();
292
+ return resultPromise.then((result) => {
293
+ this._parent._endPerformanceCounter(loadingToReadyCounterName);
294
+ Tools.SetImmediate(() => {
295
+ if (!this._disposed) {
296
+ Promise.all(this._completePromises).then(() => {
297
+ this._parent._endPerformanceCounter(loadingToCompleteCounterName);
298
+ this._parent._setState(GLTFLoaderState.COMPLETE);
299
+ this._parent.onCompleteObservable.notifyObservers(undefined);
300
+ this._parent.onCompleteObservable.clear();
301
+ this.dispose();
302
+ }, (error) => {
303
+ this._parent.onErrorObservable.notifyObservers(error);
304
+ this._parent.onErrorObservable.clear();
305
+ this.dispose();
340
306
  });
341
307
  }
342
308
  });
343
309
  return result;
344
310
  });
345
311
  })
346
- .catch(function (error) {
347
- if (!_this._disposed) {
348
- _this._parent.onErrorObservable.notifyObservers(error);
349
- _this._parent.onErrorObservable.clear();
350
- _this.dispose();
312
+ .catch((error) => {
313
+ if (!this._disposed) {
314
+ this._parent.onErrorObservable.notifyObservers(error);
315
+ this._parent.onErrorObservable.clear();
316
+ this.dispose();
351
317
  }
352
318
  throw error;
353
319
  });
354
- };
355
- GLTFLoader.prototype._loadData = function (data) {
320
+ }
321
+ _loadData(data) {
356
322
  this._gltf = data.json;
357
323
  this._setupData();
358
324
  if (data.bin) {
359
- var buffers = this._gltf.buffers;
325
+ const buffers = this._gltf.buffers;
360
326
  if (buffers && buffers[0] && !buffers[0].uri) {
361
- var binaryBuffer = buffers[0];
327
+ const binaryBuffer = buffers[0];
362
328
  if (binaryBuffer.byteLength < data.bin.byteLength - 3 || binaryBuffer.byteLength > data.bin.byteLength) {
363
- Logger.Warn("Binary buffer length (".concat(binaryBuffer.byteLength, ") from JSON does not match chunk length (").concat(data.bin.byteLength, ")"));
329
+ Logger.Warn(`Binary buffer length (${binaryBuffer.byteLength}) from JSON does not match chunk length (${data.bin.byteLength})`);
364
330
  }
365
331
  this._bin = data.bin;
366
332
  }
@@ -368,8 +334,8 @@ var GLTFLoader = /** @class */ (function () {
368
334
  Logger.Warn("Unexpected BIN chunk");
369
335
  }
370
336
  }
371
- };
372
- GLTFLoader.prototype._setupData = function () {
337
+ }
338
+ _setupData() {
373
339
  ArrayItem.Assign(this._gltf.accessors);
374
340
  ArrayItem.Assign(this._gltf.animations);
375
341
  ArrayItem.Assign(this._gltf.buffers);
@@ -384,58 +350,50 @@ var GLTFLoader = /** @class */ (function () {
384
350
  ArrayItem.Assign(this._gltf.skins);
385
351
  ArrayItem.Assign(this._gltf.textures);
386
352
  if (this._gltf.nodes) {
387
- var nodeParents = {};
388
- for (var _i = 0, _a = this._gltf.nodes; _i < _a.length; _i++) {
389
- var node = _a[_i];
353
+ const nodeParents = {};
354
+ for (const node of this._gltf.nodes) {
390
355
  if (node.children) {
391
- for (var _b = 0, _c = node.children; _b < _c.length; _b++) {
392
- var index = _c[_b];
356
+ for (const index of node.children) {
393
357
  nodeParents[index] = node.index;
394
358
  }
395
359
  }
396
360
  }
397
- var rootNode = this._createRootNode();
398
- for (var _d = 0, _e = this._gltf.nodes; _d < _e.length; _d++) {
399
- var node = _e[_d];
400
- var parentIndex = nodeParents[node.index];
361
+ const rootNode = this._createRootNode();
362
+ for (const node of this._gltf.nodes) {
363
+ const parentIndex = nodeParents[node.index];
401
364
  node.parent = parentIndex === undefined ? rootNode : this._gltf.nodes[parentIndex];
402
365
  }
403
366
  }
404
- };
405
- GLTFLoader.prototype._loadExtensions = function () {
406
- for (var name_1 in GLTFLoader._RegisteredExtensions) {
407
- var extension = GLTFLoader._RegisteredExtensions[name_1].factory(this);
408
- if (extension.name !== name_1) {
409
- Logger.Warn("The name of the glTF loader extension instance does not match the registered name: ".concat(extension.name, " !== ").concat(name_1));
367
+ }
368
+ _loadExtensions() {
369
+ for (const name in GLTFLoader._RegisteredExtensions) {
370
+ const extension = GLTFLoader._RegisteredExtensions[name].factory(this);
371
+ if (extension.name !== name) {
372
+ Logger.Warn(`The name of the glTF loader extension instance does not match the registered name: ${extension.name} !== ${name}`);
410
373
  }
411
374
  this._extensions.push(extension);
412
375
  this._parent.onExtensionLoadedObservable.notifyObservers(extension);
413
376
  }
414
- this._extensions.sort(function (a, b) { return (a.order || Number.MAX_VALUE) - (b.order || Number.MAX_VALUE); });
377
+ this._extensions.sort((a, b) => (a.order || Number.MAX_VALUE) - (b.order || Number.MAX_VALUE));
415
378
  this._parent.onExtensionLoadedObservable.clear();
416
- };
417
- GLTFLoader.prototype._checkExtensions = function () {
379
+ }
380
+ _checkExtensions() {
418
381
  if (this._gltf.extensionsRequired) {
419
- var _loop_1 = function (name_2) {
420
- var available = this_1._extensions.some(function (extension) { return extension.name === name_2 && extension.enabled; });
382
+ for (const name of this._gltf.extensionsRequired) {
383
+ const available = this._extensions.some((extension) => extension.name === name && extension.enabled);
421
384
  if (!available) {
422
- throw new Error("Require extension ".concat(name_2, " is not available"));
385
+ throw new Error(`Require extension ${name} is not available`);
423
386
  }
424
- };
425
- var this_1 = this;
426
- for (var _i = 0, _a = this._gltf.extensionsRequired; _i < _a.length; _i++) {
427
- var name_2 = _a[_i];
428
- _loop_1(name_2);
429
387
  }
430
388
  }
431
- };
432
- GLTFLoader.prototype._createRootNode = function () {
389
+ }
390
+ _createRootNode() {
433
391
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
434
392
  this._rootBabylonMesh = new Mesh("__root__", this._babylonScene);
435
393
  this._rootBabylonMesh._parentContainer = this._assetContainer;
436
394
  this._babylonScene._blockEntityCollection = false;
437
395
  this._rootBabylonMesh.setEnabled(false);
438
- var rootNode = {
396
+ const rootNode = {
439
397
  _babylonTransformNode: this._rootBabylonMesh,
440
398
  index: -1,
441
399
  };
@@ -453,59 +411,54 @@ var GLTFLoader = /** @class */ (function () {
453
411
  break;
454
412
  }
455
413
  default: {
456
- throw new Error("Invalid coordinate system mode (".concat(this._parent.coordinateSystemMode, ")"));
414
+ throw new Error(`Invalid coordinate system mode (${this._parent.coordinateSystemMode})`);
457
415
  }
458
416
  }
459
417
  this._parent.onMeshLoadedObservable.notifyObservers(this._rootBabylonMesh);
460
418
  return rootNode;
461
- };
419
+ }
462
420
  /**
463
421
  * Loads a glTF scene.
464
422
  * @param context The context when loading the asset
465
423
  * @param scene The glTF scene property
466
424
  * @returns A promise that resolves when the load is complete
467
425
  */
468
- GLTFLoader.prototype.loadSceneAsync = function (context, scene) {
469
- var _this = this;
470
- var extensionPromise = this._extensionsLoadSceneAsync(context, scene);
426
+ loadSceneAsync(context, scene) {
427
+ const extensionPromise = this._extensionsLoadSceneAsync(context, scene);
471
428
  if (extensionPromise) {
472
429
  return extensionPromise;
473
430
  }
474
- var promises = new Array();
475
- this.logOpen("".concat(context, " ").concat(scene.name || ""));
431
+ const promises = new Array();
432
+ this.logOpen(`${context} ${scene.name || ""}`);
476
433
  if (scene.nodes) {
477
- for (var _i = 0, _a = scene.nodes; _i < _a.length; _i++) {
478
- var index = _a[_i];
479
- var node = ArrayItem.Get("".concat(context, "/nodes/").concat(index), this._gltf.nodes, index);
480
- promises.push(this.loadNodeAsync("/nodes/".concat(node.index), node, function (babylonMesh) {
481
- babylonMesh.parent = _this._rootBabylonMesh;
434
+ for (const index of scene.nodes) {
435
+ const node = ArrayItem.Get(`${context}/nodes/${index}`, this._gltf.nodes, index);
436
+ promises.push(this.loadNodeAsync(`/nodes/${node.index}`, node, (babylonMesh) => {
437
+ babylonMesh.parent = this._rootBabylonMesh;
482
438
  }));
483
439
  }
484
440
  }
485
- for (var _b = 0, _c = this._postSceneLoadActions; _b < _c.length; _b++) {
486
- var action = _c[_b];
441
+ for (const action of this._postSceneLoadActions) {
487
442
  action();
488
443
  }
489
444
  promises.push(this._loadAnimationsAsync());
490
445
  this.logClose();
491
- return Promise.all(promises).then(function () { });
492
- };
493
- GLTFLoader.prototype._forEachPrimitive = function (node, callback) {
446
+ return Promise.all(promises).then(() => { });
447
+ }
448
+ _forEachPrimitive(node, callback) {
494
449
  if (node._primitiveBabylonMeshes) {
495
- for (var _i = 0, _a = node._primitiveBabylonMeshes; _i < _a.length; _i++) {
496
- var babylonMesh = _a[_i];
450
+ for (const babylonMesh of node._primitiveBabylonMeshes) {
497
451
  callback(babylonMesh);
498
452
  }
499
453
  }
500
- };
501
- GLTFLoader.prototype._getGeometries = function () {
502
- var geometries = new Array();
503
- var nodes = this._gltf.nodes;
454
+ }
455
+ _getGeometries() {
456
+ const geometries = new Array();
457
+ const nodes = this._gltf.nodes;
504
458
  if (nodes) {
505
- for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
506
- var node = nodes_1[_i];
507
- this._forEachPrimitive(node, function (babylonMesh) {
508
- var geometry = babylonMesh.geometry;
459
+ for (const node of nodes) {
460
+ this._forEachPrimitive(node, (babylonMesh) => {
461
+ const geometry = babylonMesh.geometry;
509
462
  if (geometry && geometries.indexOf(geometry) === -1) {
510
463
  geometries.push(geometry);
511
464
  }
@@ -513,30 +466,28 @@ var GLTFLoader = /** @class */ (function () {
513
466
  }
514
467
  }
515
468
  return geometries;
516
- };
517
- GLTFLoader.prototype._getMeshes = function () {
518
- var meshes = new Array();
469
+ }
470
+ _getMeshes() {
471
+ const meshes = new Array();
519
472
  // Root mesh is always first, if available.
520
473
  if (this._rootBabylonMesh) {
521
474
  meshes.push(this._rootBabylonMesh);
522
475
  }
523
- var nodes = this._gltf.nodes;
476
+ const nodes = this._gltf.nodes;
524
477
  if (nodes) {
525
- for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
526
- var node = nodes_2[_i];
527
- this._forEachPrimitive(node, function (babylonMesh) {
478
+ for (const node of nodes) {
479
+ this._forEachPrimitive(node, (babylonMesh) => {
528
480
  meshes.push(babylonMesh);
529
481
  });
530
482
  }
531
483
  }
532
484
  return meshes;
533
- };
534
- GLTFLoader.prototype._getTransformNodes = function () {
535
- var transformNodes = new Array();
536
- var nodes = this._gltf.nodes;
485
+ }
486
+ _getTransformNodes() {
487
+ const transformNodes = new Array();
488
+ const nodes = this._gltf.nodes;
537
489
  if (nodes) {
538
- for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {
539
- var node = nodes_3[_i];
490
+ for (const node of nodes) {
540
491
  if (node._babylonTransformNode && node._babylonTransformNode.getClassName() === "TransformNode") {
541
492
  transformNodes.push(node._babylonTransformNode);
542
493
  }
@@ -546,60 +497,57 @@ var GLTFLoader = /** @class */ (function () {
546
497
  }
547
498
  }
548
499
  return transformNodes;
549
- };
550
- GLTFLoader.prototype._getSkeletons = function () {
551
- var skeletons = new Array();
552
- var skins = this._gltf.skins;
500
+ }
501
+ _getSkeletons() {
502
+ const skeletons = new Array();
503
+ const skins = this._gltf.skins;
553
504
  if (skins) {
554
- for (var _i = 0, skins_1 = skins; _i < skins_1.length; _i++) {
555
- var skin = skins_1[_i];
505
+ for (const skin of skins) {
556
506
  if (skin._data) {
557
507
  skeletons.push(skin._data.babylonSkeleton);
558
508
  }
559
509
  }
560
510
  }
561
511
  return skeletons;
562
- };
563
- GLTFLoader.prototype._getAnimationGroups = function () {
564
- var animationGroups = new Array();
565
- var animations = this._gltf.animations;
512
+ }
513
+ _getAnimationGroups() {
514
+ const animationGroups = new Array();
515
+ const animations = this._gltf.animations;
566
516
  if (animations) {
567
- for (var _i = 0, animations_1 = animations; _i < animations_1.length; _i++) {
568
- var animation = animations_1[_i];
517
+ for (const animation of animations) {
569
518
  if (animation._babylonAnimationGroup) {
570
519
  animationGroups.push(animation._babylonAnimationGroup);
571
520
  }
572
521
  }
573
522
  }
574
523
  return animationGroups;
575
- };
576
- GLTFLoader.prototype._startAnimations = function () {
524
+ }
525
+ _startAnimations() {
577
526
  switch (this._parent.animationStartMode) {
578
527
  case GLTFLoaderAnimationStartMode.NONE: {
579
528
  // do nothing
580
529
  break;
581
530
  }
582
531
  case GLTFLoaderAnimationStartMode.FIRST: {
583
- var babylonAnimationGroups = this._getAnimationGroups();
532
+ const babylonAnimationGroups = this._getAnimationGroups();
584
533
  if (babylonAnimationGroups.length !== 0) {
585
534
  babylonAnimationGroups[0].start(true);
586
535
  }
587
536
  break;
588
537
  }
589
538
  case GLTFLoaderAnimationStartMode.ALL: {
590
- var babylonAnimationGroups = this._getAnimationGroups();
591
- for (var _i = 0, babylonAnimationGroups_1 = babylonAnimationGroups; _i < babylonAnimationGroups_1.length; _i++) {
592
- var babylonAnimationGroup = babylonAnimationGroups_1[_i];
539
+ const babylonAnimationGroups = this._getAnimationGroups();
540
+ for (const babylonAnimationGroup of babylonAnimationGroups) {
593
541
  babylonAnimationGroup.start(true);
594
542
  }
595
543
  break;
596
544
  }
597
545
  default: {
598
- Logger.Error("Invalid animation start mode (".concat(this._parent.animationStartMode, ")"));
546
+ Logger.Error(`Invalid animation start mode (${this._parent.animationStartMode})`);
599
547
  return;
600
548
  }
601
549
  }
602
- };
550
+ }
603
551
  /**
604
552
  * Loads a glTF node.
605
553
  * @param context The context when loading the asset
@@ -607,32 +555,29 @@ var GLTFLoader = /** @class */ (function () {
607
555
  * @param assign A function called synchronously after parsing the glTF properties
608
556
  * @returns A promise that resolves with the loaded Babylon mesh when the load is complete
609
557
  */
610
- GLTFLoader.prototype.loadNodeAsync = function (context, node, assign) {
611
- var _this = this;
612
- if (assign === void 0) { assign = function () { }; }
613
- var extensionPromise = this._extensionsLoadNodeAsync(context, node, assign);
558
+ loadNodeAsync(context, node, assign = () => { }) {
559
+ const extensionPromise = this._extensionsLoadNodeAsync(context, node, assign);
614
560
  if (extensionPromise) {
615
561
  return extensionPromise;
616
562
  }
617
563
  if (node._babylonTransformNode) {
618
- throw new Error("".concat(context, ": Invalid recursive node hierarchy"));
564
+ throw new Error(`${context}: Invalid recursive node hierarchy`);
619
565
  }
620
- var promises = new Array();
621
- this.logOpen("".concat(context, " ").concat(node.name || ""));
622
- var loadNode = function (babylonTransformNode) {
566
+ const promises = new Array();
567
+ this.logOpen(`${context} ${node.name || ""}`);
568
+ const loadNode = (babylonTransformNode) => {
623
569
  GLTFLoader.AddPointerMetadata(babylonTransformNode, context);
624
570
  GLTFLoader._LoadTransform(node, babylonTransformNode);
625
571
  if (node.camera != undefined) {
626
- var camera = ArrayItem.Get("".concat(context, "/camera"), _this._gltf.cameras, node.camera);
627
- promises.push(_this.loadCameraAsync("/cameras/".concat(camera.index), camera, function (babylonCamera) {
572
+ const camera = ArrayItem.Get(`${context}/camera`, this._gltf.cameras, node.camera);
573
+ promises.push(this.loadCameraAsync(`/cameras/${camera.index}`, camera, (babylonCamera) => {
628
574
  babylonCamera.parent = babylonTransformNode;
629
575
  }));
630
576
  }
631
577
  if (node.children) {
632
- for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
633
- var index = _a[_i];
634
- var childNode = ArrayItem.Get("".concat(context, "/children/").concat(index), _this._gltf.nodes, index);
635
- promises.push(_this.loadNodeAsync("/nodes/".concat(childNode.index), childNode, function (childBabylonMesh) {
578
+ for (const index of node.children) {
579
+ const childNode = ArrayItem.Get(`${context}/children/${index}`, this._gltf.nodes, index);
580
+ promises.push(this.loadNodeAsync(`/nodes/${childNode.index}`, childNode, (childBabylonMesh) => {
636
581
  childBabylonMesh.parent = babylonTransformNode;
637
582
  }));
638
583
  }
@@ -640,9 +585,9 @@ var GLTFLoader = /** @class */ (function () {
640
585
  assign(babylonTransformNode);
641
586
  };
642
587
  if (node.mesh == undefined || node.skin != undefined) {
643
- var nodeName = node.name || "node".concat(node.index);
588
+ const nodeName = node.name || `node${node.index}`;
644
589
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
645
- var transformNode = new TransformNode(nodeName, this._babylonScene);
590
+ const transformNode = new TransformNode(nodeName, this._babylonScene);
646
591
  transformNode._parentContainer = this._assetContainer;
647
592
  this._babylonScene._blockEntityCollection = false;
648
593
  if (node.mesh == undefined) {
@@ -655,29 +600,29 @@ var GLTFLoader = /** @class */ (function () {
655
600
  }
656
601
  if (node.mesh != undefined) {
657
602
  if (node.skin == undefined) {
658
- var mesh = ArrayItem.Get("".concat(context, "/mesh"), this._gltf.meshes, node.mesh);
659
- promises.push(this._loadMeshAsync("/meshes/".concat(mesh.index), node, mesh, loadNode));
603
+ const mesh = ArrayItem.Get(`${context}/mesh`, this._gltf.meshes, node.mesh);
604
+ promises.push(this._loadMeshAsync(`/meshes/${mesh.index}`, node, mesh, loadNode));
660
605
  }
661
606
  else {
662
607
  // See https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins (second implementation note)
663
608
  // This code path will place the skinned mesh as a sibling of the skeleton root node without loading the
664
609
  // transform, which effectively ignores the transform of the skinned mesh, as per spec.
665
- var mesh = ArrayItem.Get("".concat(context, "/mesh"), this._gltf.meshes, node.mesh);
666
- promises.push(this._loadMeshAsync("/meshes/".concat(mesh.index), node, mesh, function (babylonTransformNode) {
667
- var babylonTransformNodeForSkin = node._babylonTransformNodeForSkin;
610
+ const mesh = ArrayItem.Get(`${context}/mesh`, this._gltf.meshes, node.mesh);
611
+ promises.push(this._loadMeshAsync(`/meshes/${mesh.index}`, node, mesh, (babylonTransformNode) => {
612
+ const babylonTransformNodeForSkin = node._babylonTransformNodeForSkin;
668
613
  // Merge the metadata from the skin node to the skinned mesh in case a loader extension added metadata.
669
614
  babylonTransformNode.metadata = mergeDeep(babylonTransformNodeForSkin.metadata, babylonTransformNode.metadata || {});
670
- var skin = ArrayItem.Get("".concat(context, "/skin"), _this._gltf.skins, node.skin);
671
- promises.push(_this._loadSkinAsync("/skins/".concat(skin.index), node, skin, function (babylonSkeleton) {
672
- _this._forEachPrimitive(node, function (babylonMesh) {
615
+ const skin = ArrayItem.Get(`${context}/skin`, this._gltf.skins, node.skin);
616
+ promises.push(this._loadSkinAsync(`/skins/${skin.index}`, node, skin, (babylonSkeleton) => {
617
+ this._forEachPrimitive(node, (babylonMesh) => {
673
618
  babylonMesh.skeleton = babylonSkeleton;
674
619
  });
675
620
  // Wait until all the nodes are parented before parenting the skinned mesh.
676
- _this._postSceneLoadActions.push(function () {
621
+ this._postSceneLoadActions.push(() => {
677
622
  if (skin.skeleton != undefined) {
678
623
  // Place the skinned mesh node as a sibling of the skeleton root node.
679
624
  // Handle special case when the parent of the skeleton root is the skinned mesh.
680
- var parentNode = ArrayItem.Get("/skins/".concat(skin.index, "/skeleton"), _this._gltf.nodes, skin.skeleton).parent;
625
+ const parentNode = ArrayItem.Get(`/skins/${skin.index}/skeleton`, this._gltf.nodes, skin.skeleton).parent;
681
626
  if (node.index === parentNode.index) {
682
627
  babylonTransformNode.parent = babylonTransformNodeForSkin.parent;
683
628
  }
@@ -686,17 +631,17 @@ var GLTFLoader = /** @class */ (function () {
686
631
  }
687
632
  }
688
633
  else {
689
- babylonTransformNode.parent = _this._rootBabylonMesh;
634
+ babylonTransformNode.parent = this._rootBabylonMesh;
690
635
  }
691
- _this._parent.onSkinLoadedObservable.notifyObservers({ node: babylonTransformNodeForSkin, skinnedNode: babylonTransformNode });
636
+ this._parent.onSkinLoadedObservable.notifyObservers({ node: babylonTransformNodeForSkin, skinnedNode: babylonTransformNode });
692
637
  });
693
638
  }));
694
639
  }));
695
640
  }
696
641
  }
697
642
  this.logClose();
698
- return Promise.all(promises).then(function () {
699
- _this._forEachPrimitive(node, function (babylonMesh) {
643
+ return Promise.all(promises).then(() => {
644
+ this._forEachPrimitive(node, (babylonMesh) => {
700
645
  if (babylonMesh.geometry && babylonMesh.geometry.useBoundingInfoFromGeometry) {
701
646
  // simply apply the world matrices to the bounding info - the extends are already ok
702
647
  babylonMesh._updateBoundingInfo();
@@ -707,21 +652,21 @@ var GLTFLoader = /** @class */ (function () {
707
652
  });
708
653
  return node._babylonTransformNode;
709
654
  });
710
- };
711
- GLTFLoader.prototype._loadMeshAsync = function (context, node, mesh, assign) {
712
- var primitives = mesh.primitives;
655
+ }
656
+ _loadMeshAsync(context, node, mesh, assign) {
657
+ const primitives = mesh.primitives;
713
658
  if (!primitives || !primitives.length) {
714
- throw new Error("".concat(context, ": Primitives are missing"));
659
+ throw new Error(`${context}: Primitives are missing`);
715
660
  }
716
661
  if (primitives[0].index == undefined) {
717
662
  ArrayItem.Assign(primitives);
718
663
  }
719
- var promises = new Array();
720
- this.logOpen("".concat(context, " ").concat(mesh.name || ""));
721
- var name = node.name || "node".concat(node.index);
664
+ const promises = new Array();
665
+ this.logOpen(`${context} ${mesh.name || ""}`);
666
+ const name = node.name || `node${node.index}`;
722
667
  if (primitives.length === 1) {
723
- var primitive = mesh.primitives[0];
724
- promises.push(this._loadMeshPrimitiveAsync("".concat(context, "/primitives/").concat(primitive.index), name, node, mesh, primitive, function (babylonMesh) {
668
+ const primitive = mesh.primitives[0];
669
+ promises.push(this._loadMeshPrimitiveAsync(`${context}/primitives/${primitive.index}`, name, node, mesh, primitive, (babylonMesh) => {
725
670
  node._babylonTransformNode = babylonMesh;
726
671
  node._primitiveBabylonMeshes = [babylonMesh];
727
672
  }));
@@ -732,9 +677,8 @@ var GLTFLoader = /** @class */ (function () {
732
677
  node._babylonTransformNode._parentContainer = this._assetContainer;
733
678
  this._babylonScene._blockEntityCollection = false;
734
679
  node._primitiveBabylonMeshes = [];
735
- for (var _i = 0, primitives_1 = primitives; _i < primitives_1.length; _i++) {
736
- var primitive = primitives_1[_i];
737
- promises.push(this._loadMeshPrimitiveAsync("".concat(context, "/primitives/").concat(primitive.index), "".concat(name, "_primitive").concat(primitive.index), node, mesh, primitive, function (babylonMesh) {
680
+ for (const primitive of primitives) {
681
+ promises.push(this._loadMeshPrimitiveAsync(`${context}/primitives/${primitive.index}`, `${name}_primitive${primitive.index}`, node, mesh, primitive, (babylonMesh) => {
738
682
  babylonMesh.parent = node._babylonTransformNode;
739
683
  node._primitiveBabylonMeshes.push(babylonMesh);
740
684
  }));
@@ -742,10 +686,10 @@ var GLTFLoader = /** @class */ (function () {
742
686
  }
743
687
  assign(node._babylonTransformNode);
744
688
  this.logClose();
745
- return Promise.all(promises).then(function () {
689
+ return Promise.all(promises).then(() => {
746
690
  return node._babylonTransformNode;
747
691
  });
748
- };
692
+ }
749
693
  /**
750
694
  * @hidden Define this method to modify the default behavior when loading data for mesh primitives.
751
695
  * @param context The context when loading the asset
@@ -756,16 +700,15 @@ var GLTFLoader = /** @class */ (function () {
756
700
  * @param assign A function called synchronously after parsing the glTF properties
757
701
  * @returns A promise that resolves with the loaded mesh when the load is complete or null if not handled
758
702
  */
759
- GLTFLoader.prototype._loadMeshPrimitiveAsync = function (context, name, node, mesh, primitive, assign) {
760
- var _this = this;
761
- var extensionPromise = this._extensionsLoadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign);
703
+ _loadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign) {
704
+ const extensionPromise = this._extensionsLoadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign);
762
705
  if (extensionPromise) {
763
706
  return extensionPromise;
764
707
  }
765
- this.logOpen("".concat(context));
766
- var shouldInstance = this._disableInstancedMesh === 0 && this._parent.createInstances && node.skin == undefined && !mesh.primitives[0].targets;
767
- var babylonAbstractMesh;
768
- var promise;
708
+ this.logOpen(`${context}`);
709
+ const shouldInstance = this._disableInstancedMesh === 0 && this._parent.createInstances && node.skin == undefined && !mesh.primitives[0].targets;
710
+ let babylonAbstractMesh;
711
+ let promise;
769
712
  if (shouldInstance && primitive._instanceData) {
770
713
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
771
714
  babylonAbstractMesh = primitive._instanceData.babylonSourceMesh.createInstance(name);
@@ -774,79 +717,78 @@ var GLTFLoader = /** @class */ (function () {
774
717
  promise = primitive._instanceData.promise;
775
718
  }
776
719
  else {
777
- var promises = new Array();
720
+ const promises = new Array();
778
721
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
779
- var babylonMesh_1 = new Mesh(name, this._babylonScene);
780
- babylonMesh_1._parentContainer = this._assetContainer;
722
+ const babylonMesh = new Mesh(name, this._babylonScene);
723
+ babylonMesh._parentContainer = this._assetContainer;
781
724
  this._babylonScene._blockEntityCollection = false;
782
- babylonMesh_1.overrideMaterialSideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;
783
- this._createMorphTargets(context, node, mesh, primitive, babylonMesh_1);
784
- promises.push(this._loadVertexDataAsync(context, primitive, babylonMesh_1).then(function (babylonGeometry) {
785
- return _this._loadMorphTargetsAsync(context, primitive, babylonMesh_1, babylonGeometry).then(function () {
786
- if (_this._disposed) {
725
+ babylonMesh.overrideMaterialSideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;
726
+ this._createMorphTargets(context, node, mesh, primitive, babylonMesh);
727
+ promises.push(this._loadVertexDataAsync(context, primitive, babylonMesh).then((babylonGeometry) => {
728
+ return this._loadMorphTargetsAsync(context, primitive, babylonMesh, babylonGeometry).then(() => {
729
+ if (this._disposed) {
787
730
  return;
788
731
  }
789
- _this._babylonScene._blockEntityCollection = !!_this._assetContainer;
790
- babylonGeometry.applyToMesh(babylonMesh_1);
791
- babylonGeometry._parentContainer = _this._assetContainer;
792
- _this._babylonScene._blockEntityCollection = false;
732
+ this._babylonScene._blockEntityCollection = !!this._assetContainer;
733
+ babylonGeometry.applyToMesh(babylonMesh);
734
+ babylonGeometry._parentContainer = this._assetContainer;
735
+ this._babylonScene._blockEntityCollection = false;
793
736
  });
794
737
  }));
795
- var babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
738
+ const babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
796
739
  if (primitive.material == undefined) {
797
- var babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
740
+ let babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
798
741
  if (!babylonMaterial) {
799
742
  babylonMaterial = this._createDefaultMaterial("__GLTFLoader._default", babylonDrawMode);
800
743
  this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
801
744
  this._defaultBabylonMaterialData[babylonDrawMode] = babylonMaterial;
802
745
  }
803
- babylonMesh_1.material = babylonMaterial;
746
+ babylonMesh.material = babylonMaterial;
804
747
  }
805
748
  else if (!this.parent.skipMaterials) {
806
- var material = ArrayItem.Get("".concat(context, "/material"), this._gltf.materials, primitive.material);
807
- promises.push(this._loadMaterialAsync("/materials/".concat(material.index), material, babylonMesh_1, babylonDrawMode, function (babylonMaterial) {
808
- babylonMesh_1.material = babylonMaterial;
749
+ const material = ArrayItem.Get(`${context}/material`, this._gltf.materials, primitive.material);
750
+ promises.push(this._loadMaterialAsync(`/materials/${material.index}`, material, babylonMesh, babylonDrawMode, (babylonMaterial) => {
751
+ babylonMesh.material = babylonMaterial;
809
752
  }));
810
753
  }
811
754
  promise = Promise.all(promises);
812
755
  if (shouldInstance) {
813
756
  primitive._instanceData = {
814
- babylonSourceMesh: babylonMesh_1,
757
+ babylonSourceMesh: babylonMesh,
815
758
  promise: promise,
816
759
  };
817
760
  }
818
- babylonAbstractMesh = babylonMesh_1;
761
+ babylonAbstractMesh = babylonMesh;
819
762
  }
820
763
  GLTFLoader.AddPointerMetadata(babylonAbstractMesh, context);
821
764
  this._parent.onMeshLoadedObservable.notifyObservers(babylonAbstractMesh);
822
765
  assign(babylonAbstractMesh);
823
766
  this.logClose();
824
- return promise.then(function () {
767
+ return promise.then(() => {
825
768
  return babylonAbstractMesh;
826
769
  });
827
- };
828
- GLTFLoader.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) {
829
- var _this = this;
830
- var extensionPromise = this._extensionsLoadVertexDataAsync(context, primitive, babylonMesh);
770
+ }
771
+ _loadVertexDataAsync(context, primitive, babylonMesh) {
772
+ const extensionPromise = this._extensionsLoadVertexDataAsync(context, primitive, babylonMesh);
831
773
  if (extensionPromise) {
832
774
  return extensionPromise;
833
775
  }
834
- var attributes = primitive.attributes;
776
+ const attributes = primitive.attributes;
835
777
  if (!attributes) {
836
- throw new Error("".concat(context, ": Attributes are missing"));
778
+ throw new Error(`${context}: Attributes are missing`);
837
779
  }
838
- var promises = new Array();
839
- var babylonGeometry = new Geometry(babylonMesh.name, this._babylonScene);
780
+ const promises = new Array();
781
+ const babylonGeometry = new Geometry(babylonMesh.name, this._babylonScene);
840
782
  if (primitive.indices == undefined) {
841
783
  babylonMesh.isUnIndexed = true;
842
784
  }
843
785
  else {
844
- var accessor = ArrayItem.Get("".concat(context, "/indices"), this._gltf.accessors, primitive.indices);
845
- promises.push(this._loadIndicesAccessorAsync("/accessors/".concat(accessor.index), accessor).then(function (data) {
786
+ const accessor = ArrayItem.Get(`${context}/indices`, this._gltf.accessors, primitive.indices);
787
+ promises.push(this._loadIndicesAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {
846
788
  babylonGeometry.setIndices(data);
847
789
  }));
848
790
  }
849
- var loadAttribute = function (attribute, kind, callback) {
791
+ const loadAttribute = (attribute, kind, callback) => {
850
792
  if (attributes[attribute] == undefined) {
851
793
  return;
852
794
  }
@@ -854,13 +796,13 @@ var GLTFLoader = /** @class */ (function () {
854
796
  if (babylonMesh._delayInfo.indexOf(kind) === -1) {
855
797
  babylonMesh._delayInfo.push(kind);
856
798
  }
857
- var accessor = ArrayItem.Get("".concat(context, "/attributes/").concat(attribute), _this._gltf.accessors, attributes[attribute]);
858
- promises.push(_this._loadVertexAccessorAsync("/accessors/".concat(accessor.index), accessor, kind).then(function (babylonVertexBuffer) {
859
- if (babylonVertexBuffer.getKind() === VertexBuffer.PositionKind && !_this.parent.alwaysComputeBoundingBox && !babylonMesh.skeleton) {
860
- var mmin = accessor.min, mmax = accessor.max;
799
+ const accessor = ArrayItem.Get(`${context}/attributes/${attribute}`, this._gltf.accessors, attributes[attribute]);
800
+ promises.push(this._loadVertexAccessorAsync(`/accessors/${accessor.index}`, accessor, kind).then((babylonVertexBuffer) => {
801
+ if (babylonVertexBuffer.getKind() === VertexBuffer.PositionKind && !this.parent.alwaysComputeBoundingBox && !babylonMesh.skeleton) {
802
+ const mmin = accessor.min, mmax = accessor.max;
861
803
  if (mmin !== undefined && mmax !== undefined) {
862
804
  if (accessor.normalized && accessor.componentType !== 5126 /* FLOAT */) {
863
- var divider = 1;
805
+ let divider = 1;
864
806
  switch (accessor.componentType) {
865
807
  case 5120 /* BYTE */:
866
808
  divider = 127.0;
@@ -875,14 +817,14 @@ var GLTFLoader = /** @class */ (function () {
875
817
  divider = 65535.0;
876
818
  break;
877
819
  }
878
- for (var i = 0; i < 3; ++i) {
820
+ for (let i = 0; i < 3; ++i) {
879
821
  mmin[i] = Math.max(mmin[i] / divider, -1.0);
880
822
  mmax[i] = Math.max(mmax[i] / divider, -1.0);
881
823
  }
882
824
  }
883
- var min = TmpVectors.Vector3[0], max = TmpVectors.Vector3[1];
884
- min.copyFromFloats.apply(min, mmin);
885
- max.copyFromFloats.apply(max, mmax);
825
+ const min = TmpVectors.Vector3[0], max = TmpVectors.Vector3[1];
826
+ min.copyFromFloats(...mmin);
827
+ max.copyFromFloats(...mmax);
886
828
  babylonGeometry._boundingInfo = new BoundingInfo(min, max);
887
829
  babylonGeometry.useBoundingInfoFromGeometry = true;
888
830
  }
@@ -909,16 +851,16 @@ var GLTFLoader = /** @class */ (function () {
909
851
  loadAttribute("WEIGHTS_0", VertexBuffer.MatricesWeightsKind);
910
852
  loadAttribute("JOINTS_1", VertexBuffer.MatricesIndicesExtraKind);
911
853
  loadAttribute("WEIGHTS_1", VertexBuffer.MatricesWeightsExtraKind);
912
- loadAttribute("COLOR_0", VertexBuffer.ColorKind, function (accessor) {
854
+ loadAttribute("COLOR_0", VertexBuffer.ColorKind, (accessor) => {
913
855
  if (accessor.type === "VEC4" /* VEC4 */) {
914
856
  babylonMesh.hasVertexAlpha = true;
915
857
  }
916
858
  });
917
- return Promise.all(promises).then(function () {
859
+ return Promise.all(promises).then(() => {
918
860
  return babylonGeometry;
919
861
  });
920
- };
921
- GLTFLoader.prototype._createMorphTargets = function (context, node, mesh, primitive, babylonMesh) {
862
+ }
863
+ _createMorphTargets(context, node, mesh, primitive, babylonMesh) {
922
864
  if (!primitive.targets) {
923
865
  return;
924
866
  }
@@ -926,66 +868,65 @@ var GLTFLoader = /** @class */ (function () {
926
868
  node._numMorphTargets = primitive.targets.length;
927
869
  }
928
870
  else if (primitive.targets.length !== node._numMorphTargets) {
929
- throw new Error("".concat(context, ": Primitives do not have the same number of targets"));
871
+ throw new Error(`${context}: Primitives do not have the same number of targets`);
930
872
  }
931
- var targetNames = mesh.extras ? mesh.extras.targetNames : null;
873
+ const targetNames = mesh.extras ? mesh.extras.targetNames : null;
932
874
  babylonMesh.morphTargetManager = new MorphTargetManager(babylonMesh.getScene());
933
875
  babylonMesh.morphTargetManager.areUpdatesFrozen = true;
934
- for (var index = 0; index < primitive.targets.length; index++) {
935
- var weight = node.weights ? node.weights[index] : mesh.weights ? mesh.weights[index] : 0;
936
- var name_3 = targetNames ? targetNames[index] : "morphTarget".concat(index);
937
- babylonMesh.morphTargetManager.addTarget(new MorphTarget(name_3, weight, babylonMesh.getScene()));
876
+ for (let index = 0; index < primitive.targets.length; index++) {
877
+ const weight = node.weights ? node.weights[index] : mesh.weights ? mesh.weights[index] : 0;
878
+ const name = targetNames ? targetNames[index] : `morphTarget${index}`;
879
+ babylonMesh.morphTargetManager.addTarget(new MorphTarget(name, weight, babylonMesh.getScene()));
938
880
  // TODO: tell the target whether it has positions, normals, tangents
939
881
  }
940
- };
941
- GLTFLoader.prototype._loadMorphTargetsAsync = function (context, primitive, babylonMesh, babylonGeometry) {
882
+ }
883
+ _loadMorphTargetsAsync(context, primitive, babylonMesh, babylonGeometry) {
942
884
  if (!primitive.targets) {
943
885
  return Promise.resolve();
944
886
  }
945
- var promises = new Array();
946
- var morphTargetManager = babylonMesh.morphTargetManager;
947
- for (var index = 0; index < morphTargetManager.numTargets; index++) {
948
- var babylonMorphTarget = morphTargetManager.getTarget(index);
949
- promises.push(this._loadMorphTargetVertexDataAsync("".concat(context, "/targets/").concat(index), babylonGeometry, primitive.targets[index], babylonMorphTarget));
887
+ const promises = new Array();
888
+ const morphTargetManager = babylonMesh.morphTargetManager;
889
+ for (let index = 0; index < morphTargetManager.numTargets; index++) {
890
+ const babylonMorphTarget = morphTargetManager.getTarget(index);
891
+ promises.push(this._loadMorphTargetVertexDataAsync(`${context}/targets/${index}`, babylonGeometry, primitive.targets[index], babylonMorphTarget));
950
892
  }
951
- return Promise.all(promises).then(function () {
893
+ return Promise.all(promises).then(() => {
952
894
  morphTargetManager.areUpdatesFrozen = false;
953
895
  });
954
- };
955
- GLTFLoader.prototype._loadMorphTargetVertexDataAsync = function (context, babylonGeometry, attributes, babylonMorphTarget) {
956
- var _this = this;
957
- var promises = new Array();
958
- var loadAttribute = function (attribute, kind, setData) {
896
+ }
897
+ _loadMorphTargetVertexDataAsync(context, babylonGeometry, attributes, babylonMorphTarget) {
898
+ const promises = new Array();
899
+ const loadAttribute = (attribute, kind, setData) => {
959
900
  if (attributes[attribute] == undefined) {
960
901
  return;
961
902
  }
962
- var babylonVertexBuffer = babylonGeometry.getVertexBuffer(kind);
903
+ const babylonVertexBuffer = babylonGeometry.getVertexBuffer(kind);
963
904
  if (!babylonVertexBuffer) {
964
905
  return;
965
906
  }
966
- var accessor = ArrayItem.Get("".concat(context, "/").concat(attribute), _this._gltf.accessors, attributes[attribute]);
967
- promises.push(_this._loadFloatAccessorAsync("/accessors/".concat(accessor.index), accessor).then(function (data) {
907
+ const accessor = ArrayItem.Get(`${context}/${attribute}`, this._gltf.accessors, attributes[attribute]);
908
+ promises.push(this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor).then((data) => {
968
909
  setData(babylonVertexBuffer, data);
969
910
  }));
970
911
  };
971
- loadAttribute("POSITION", VertexBuffer.PositionKind, function (babylonVertexBuffer, data) {
972
- var positions = new Float32Array(data.length);
973
- babylonVertexBuffer.forEach(data.length, function (value, index) {
912
+ loadAttribute("POSITION", VertexBuffer.PositionKind, (babylonVertexBuffer, data) => {
913
+ const positions = new Float32Array(data.length);
914
+ babylonVertexBuffer.forEach(data.length, (value, index) => {
974
915
  positions[index] = data[index] + value;
975
916
  });
976
917
  babylonMorphTarget.setPositions(positions);
977
918
  });
978
- loadAttribute("NORMAL", VertexBuffer.NormalKind, function (babylonVertexBuffer, data) {
979
- var normals = new Float32Array(data.length);
980
- babylonVertexBuffer.forEach(normals.length, function (value, index) {
919
+ loadAttribute("NORMAL", VertexBuffer.NormalKind, (babylonVertexBuffer, data) => {
920
+ const normals = new Float32Array(data.length);
921
+ babylonVertexBuffer.forEach(normals.length, (value, index) => {
981
922
  normals[index] = data[index] + value;
982
923
  });
983
924
  babylonMorphTarget.setNormals(normals);
984
925
  });
985
- loadAttribute("TANGENT", VertexBuffer.TangentKind, function (babylonVertexBuffer, data) {
986
- var tangents = new Float32Array((data.length / 3) * 4);
987
- var dataIndex = 0;
988
- babylonVertexBuffer.forEach((data.length / 3) * 4, function (value, index) {
926
+ loadAttribute("TANGENT", VertexBuffer.TangentKind, (babylonVertexBuffer, data) => {
927
+ const tangents = new Float32Array((data.length / 3) * 4);
928
+ let dataIndex = 0;
929
+ babylonVertexBuffer.forEach((data.length / 3) * 4, (value, index) => {
989
930
  // Tangent data for morph targets is stored as xyz delta.
990
931
  // The vertexData.tangent is stored as xyzw.
991
932
  // So we need to skip every fourth vertexData.tangent.
@@ -996,19 +937,19 @@ var GLTFLoader = /** @class */ (function () {
996
937
  });
997
938
  babylonMorphTarget.setTangents(tangents);
998
939
  });
999
- return Promise.all(promises).then(function () { });
1000
- };
1001
- GLTFLoader._LoadTransform = function (node, babylonNode) {
940
+ return Promise.all(promises).then(() => { });
941
+ }
942
+ static _LoadTransform(node, babylonNode) {
1002
943
  // Ignore the TRS of skinned nodes.
1003
944
  // See https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins (second implementation note)
1004
945
  if (node.skin != undefined) {
1005
946
  return;
1006
947
  }
1007
- var position = Vector3.Zero();
1008
- var rotation = Quaternion.Identity();
1009
- var scaling = Vector3.One();
948
+ let position = Vector3.Zero();
949
+ let rotation = Quaternion.Identity();
950
+ let scaling = Vector3.One();
1010
951
  if (node.matrix) {
1011
- var matrix = Matrix.FromArray(node.matrix);
952
+ const matrix = Matrix.FromArray(node.matrix);
1012
953
  matrix.decompose(scaling, rotation, position);
1013
954
  }
1014
955
  else {
@@ -1025,10 +966,9 @@ var GLTFLoader = /** @class */ (function () {
1025
966
  babylonNode.position = position;
1026
967
  babylonNode.rotationQuaternion = rotation;
1027
968
  babylonNode.scaling = scaling;
1028
- };
1029
- GLTFLoader.prototype._loadSkinAsync = function (context, node, skin, assign) {
1030
- var _this = this;
1031
- var extensionPromise = this._extensionsLoadSkinAsync(context, node, skin);
969
+ }
970
+ _loadSkinAsync(context, node, skin, assign) {
971
+ const extensionPromise = this._extensionsLoadSkinAsync(context, node, skin);
1032
972
  if (extensionPromise) {
1033
973
  return extensionPromise;
1034
974
  }
@@ -1036,14 +976,14 @@ var GLTFLoader = /** @class */ (function () {
1036
976
  assign(skin._data.babylonSkeleton);
1037
977
  return skin._data.promise;
1038
978
  }
1039
- var skeletonId = "skeleton".concat(skin.index);
979
+ const skeletonId = `skeleton${skin.index}`;
1040
980
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
1041
- var babylonSkeleton = new Skeleton(skin.name || skeletonId, skeletonId, this._babylonScene);
981
+ const babylonSkeleton = new Skeleton(skin.name || skeletonId, skeletonId, this._babylonScene);
1042
982
  babylonSkeleton._parentContainer = this._assetContainer;
1043
983
  this._babylonScene._blockEntityCollection = false;
1044
984
  this._loadBones(context, skin, babylonSkeleton);
1045
- var promise = this._loadSkinInverseBindMatricesDataAsync(context, skin).then(function (inverseBindMatricesData) {
1046
- _this._updateBoneMatrices(babylonSkeleton, inverseBindMatricesData);
985
+ const promise = this._loadSkinInverseBindMatricesDataAsync(context, skin).then((inverseBindMatricesData) => {
986
+ this._updateBoneMatrices(babylonSkeleton, inverseBindMatricesData);
1047
987
  });
1048
988
  skin._data = {
1049
989
  babylonSkeleton: babylonSkeleton,
@@ -1051,16 +991,16 @@ var GLTFLoader = /** @class */ (function () {
1051
991
  };
1052
992
  assign(babylonSkeleton);
1053
993
  return promise;
1054
- };
1055
- GLTFLoader.prototype._loadBones = function (context, skin, babylonSkeleton) {
994
+ }
995
+ _loadBones(context, skin, babylonSkeleton) {
1056
996
  if (skin.skeleton == undefined || this._parent.alwaysComputeSkeletonRootNode) {
1057
- var rootNode = this._findSkeletonRootNode("".concat(context, "/joints"), skin.joints);
997
+ const rootNode = this._findSkeletonRootNode(`${context}/joints`, skin.joints);
1058
998
  if (rootNode) {
1059
999
  if (skin.skeleton === undefined) {
1060
1000
  skin.skeleton = rootNode.index;
1061
1001
  }
1062
1002
  else {
1063
- var isParent = function (a, b) {
1003
+ const isParent = (a, b) => {
1064
1004
  for (; b.parent; b = b.parent) {
1065
1005
  if (b.parent === a) {
1066
1006
  return true;
@@ -1068,47 +1008,45 @@ var GLTFLoader = /** @class */ (function () {
1068
1008
  }
1069
1009
  return false;
1070
1010
  };
1071
- var skeletonNode = ArrayItem.Get("".concat(context, "/skeleton"), this._gltf.nodes, skin.skeleton);
1011
+ const skeletonNode = ArrayItem.Get(`${context}/skeleton`, this._gltf.nodes, skin.skeleton);
1072
1012
  if (skeletonNode !== rootNode && !isParent(skeletonNode, rootNode)) {
1073
- Logger.Warn("".concat(context, "/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root"));
1013
+ Logger.Warn(`${context}/skeleton: Overriding with nearest common ancestor as skeleton node is not a common root`);
1074
1014
  skin.skeleton = rootNode.index;
1075
1015
  }
1076
1016
  }
1077
1017
  }
1078
1018
  else {
1079
- Logger.Warn("".concat(context, ": Failed to find common root"));
1019
+ Logger.Warn(`${context}: Failed to find common root`);
1080
1020
  }
1081
1021
  }
1082
- var babylonBones = {};
1083
- for (var _i = 0, _a = skin.joints; _i < _a.length; _i++) {
1084
- var index = _a[_i];
1085
- var node = ArrayItem.Get("".concat(context, "/joints/").concat(index), this._gltf.nodes, index);
1022
+ const babylonBones = {};
1023
+ for (const index of skin.joints) {
1024
+ const node = ArrayItem.Get(`${context}/joints/${index}`, this._gltf.nodes, index);
1086
1025
  this._loadBone(node, skin, babylonSkeleton, babylonBones);
1087
1026
  }
1088
- };
1089
- GLTFLoader.prototype._findSkeletonRootNode = function (context, joints) {
1027
+ }
1028
+ _findSkeletonRootNode(context, joints) {
1090
1029
  if (joints.length === 0) {
1091
1030
  return null;
1092
1031
  }
1093
- var paths = {};
1094
- for (var _i = 0, joints_1 = joints; _i < joints_1.length; _i++) {
1095
- var index = joints_1[_i];
1096
- var path = new Array();
1097
- var node = ArrayItem.Get("".concat(context, "/").concat(index), this._gltf.nodes, index);
1032
+ const paths = {};
1033
+ for (const index of joints) {
1034
+ const path = new Array();
1035
+ let node = ArrayItem.Get(`${context}/${index}`, this._gltf.nodes, index);
1098
1036
  while (node.index !== -1) {
1099
1037
  path.unshift(node);
1100
1038
  node = node.parent;
1101
1039
  }
1102
1040
  paths[index] = path;
1103
1041
  }
1104
- var rootNode = null;
1105
- for (var i = 0;; ++i) {
1106
- var path = paths[joints[0]];
1042
+ let rootNode = null;
1043
+ for (let i = 0;; ++i) {
1044
+ let path = paths[joints[0]];
1107
1045
  if (i >= path.length) {
1108
1046
  return rootNode;
1109
1047
  }
1110
- var node = path[i];
1111
- for (var j = 1; j < joints.length; ++j) {
1048
+ const node = path[i];
1049
+ for (let j = 1; j < joints.length; ++j) {
1112
1050
  path = paths[joints[j]];
1113
1051
  if (i >= path.length || node !== path[i]) {
1114
1052
  return rootNode;
@@ -1116,61 +1054,60 @@ var GLTFLoader = /** @class */ (function () {
1116
1054
  }
1117
1055
  rootNode = node;
1118
1056
  }
1119
- };
1120
- GLTFLoader.prototype._loadBone = function (node, skin, babylonSkeleton, babylonBones) {
1121
- var babylonBone = babylonBones[node.index];
1057
+ }
1058
+ _loadBone(node, skin, babylonSkeleton, babylonBones) {
1059
+ let babylonBone = babylonBones[node.index];
1122
1060
  if (babylonBone) {
1123
1061
  return babylonBone;
1124
1062
  }
1125
- var parentBabylonBone = null;
1063
+ let parentBabylonBone = null;
1126
1064
  if (node.index !== skin.skeleton) {
1127
1065
  if (node.parent && node.parent.index !== -1) {
1128
1066
  parentBabylonBone = this._loadBone(node.parent, skin, babylonSkeleton, babylonBones);
1129
1067
  }
1130
1068
  else if (skin.skeleton !== undefined) {
1131
- Logger.Warn("/skins/".concat(skin.index, "/skeleton: Skeleton node is not a common root"));
1069
+ Logger.Warn(`/skins/${skin.index}/skeleton: Skeleton node is not a common root`);
1132
1070
  }
1133
1071
  }
1134
- var boneIndex = skin.joints.indexOf(node.index);
1135
- babylonBone = new Bone(node.name || "joint".concat(node.index), babylonSkeleton, parentBabylonBone, this._getNodeMatrix(node), null, null, boneIndex);
1072
+ const boneIndex = skin.joints.indexOf(node.index);
1073
+ babylonBone = new Bone(node.name || `joint${node.index}`, babylonSkeleton, parentBabylonBone, this._getNodeMatrix(node), null, null, boneIndex);
1136
1074
  babylonBones[node.index] = babylonBone;
1137
1075
  // Wait until the scene is loaded to ensure the transform nodes are loaded.
1138
- this._postSceneLoadActions.push(function () {
1076
+ this._postSceneLoadActions.push(() => {
1139
1077
  // Link the Babylon bone with the corresponding Babylon transform node.
1140
1078
  // A glTF joint is a pointer to a glTF node in the glTF node hierarchy similar to Unity3D.
1141
1079
  babylonBone.linkTransformNode(node._babylonTransformNode);
1142
1080
  });
1143
1081
  return babylonBone;
1144
- };
1145
- GLTFLoader.prototype._loadSkinInverseBindMatricesDataAsync = function (context, skin) {
1082
+ }
1083
+ _loadSkinInverseBindMatricesDataAsync(context, skin) {
1146
1084
  if (skin.inverseBindMatrices == undefined) {
1147
1085
  return Promise.resolve(null);
1148
1086
  }
1149
- var accessor = ArrayItem.Get("".concat(context, "/inverseBindMatrices"), this._gltf.accessors, skin.inverseBindMatrices);
1150
- return this._loadFloatAccessorAsync("/accessors/".concat(accessor.index), accessor);
1151
- };
1152
- GLTFLoader.prototype._updateBoneMatrices = function (babylonSkeleton, inverseBindMatricesData) {
1153
- for (var _i = 0, _a = babylonSkeleton.bones; _i < _a.length; _i++) {
1154
- var babylonBone = _a[_i];
1155
- var baseMatrix = Matrix.Identity();
1156
- var boneIndex = babylonBone._index;
1087
+ const accessor = ArrayItem.Get(`${context}/inverseBindMatrices`, this._gltf.accessors, skin.inverseBindMatrices);
1088
+ return this._loadFloatAccessorAsync(`/accessors/${accessor.index}`, accessor);
1089
+ }
1090
+ _updateBoneMatrices(babylonSkeleton, inverseBindMatricesData) {
1091
+ for (const babylonBone of babylonSkeleton.bones) {
1092
+ const baseMatrix = Matrix.Identity();
1093
+ const boneIndex = babylonBone._index;
1157
1094
  if (inverseBindMatricesData && boneIndex !== -1) {
1158
1095
  Matrix.FromArrayToRef(inverseBindMatricesData, boneIndex * 16, baseMatrix);
1159
1096
  baseMatrix.invertToRef(baseMatrix);
1160
1097
  }
1161
- var babylonParentBone = babylonBone.getParent();
1098
+ const babylonParentBone = babylonBone.getParent();
1162
1099
  if (babylonParentBone) {
1163
1100
  baseMatrix.multiplyToRef(babylonParentBone.getInvertedAbsoluteTransform(), baseMatrix);
1164
1101
  }
1165
1102
  babylonBone.updateMatrix(baseMatrix, false, false);
1166
1103
  babylonBone._updateDifferenceMatrix(undefined, false);
1167
1104
  }
1168
- };
1169
- GLTFLoader.prototype._getNodeMatrix = function (node) {
1105
+ }
1106
+ _getNodeMatrix(node) {
1170
1107
  return node.matrix
1171
1108
  ? Matrix.FromArray(node.matrix)
1172
1109
  : Matrix.Compose(node.scale ? Vector3.FromArray(node.scale) : Vector3.One(), node.rotation ? Quaternion.FromArray(node.rotation) : Quaternion.Identity(), node.translation ? Vector3.FromArray(node.translation) : Vector3.Zero());
1173
- };
1110
+ }
1174
1111
  /**
1175
1112
  * Loads a glTF camera.
1176
1113
  * @param context The context when loading the asset
@@ -1178,25 +1115,24 @@ var GLTFLoader = /** @class */ (function () {
1178
1115
  * @param assign A function called synchronously after parsing the glTF properties
1179
1116
  * @returns A promise that resolves with the loaded Babylon camera when the load is complete
1180
1117
  */
1181
- GLTFLoader.prototype.loadCameraAsync = function (context, camera, assign) {
1182
- if (assign === void 0) { assign = function () { }; }
1183
- var extensionPromise = this._extensionsLoadCameraAsync(context, camera, assign);
1118
+ loadCameraAsync(context, camera, assign = () => { }) {
1119
+ const extensionPromise = this._extensionsLoadCameraAsync(context, camera, assign);
1184
1120
  if (extensionPromise) {
1185
1121
  return extensionPromise;
1186
1122
  }
1187
- var promises = new Array();
1188
- this.logOpen("".concat(context, " ").concat(camera.name || ""));
1123
+ const promises = new Array();
1124
+ this.logOpen(`${context} ${camera.name || ""}`);
1189
1125
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
1190
- var babylonCamera = new FreeCamera(camera.name || "camera".concat(camera.index), Vector3.Zero(), this._babylonScene, false);
1126
+ const babylonCamera = new FreeCamera(camera.name || `camera${camera.index}`, Vector3.Zero(), this._babylonScene, false);
1191
1127
  babylonCamera._parentContainer = this._assetContainer;
1192
1128
  this._babylonScene._blockEntityCollection = false;
1193
1129
  babylonCamera.ignoreParentScaling = true;
1194
1130
  babylonCamera.rotation = new Vector3(0, Math.PI, 0);
1195
1131
  switch (camera.type) {
1196
1132
  case "perspective" /* PERSPECTIVE */: {
1197
- var perspective = camera.perspective;
1133
+ const perspective = camera.perspective;
1198
1134
  if (!perspective) {
1199
- throw new Error("".concat(context, ": Camera perspective properties are missing"));
1135
+ throw new Error(`${context}: Camera perspective properties are missing`);
1200
1136
  }
1201
1137
  babylonCamera.fov = perspective.yfov;
1202
1138
  babylonCamera.minZ = perspective.znear;
@@ -1205,7 +1141,7 @@ var GLTFLoader = /** @class */ (function () {
1205
1141
  }
1206
1142
  case "orthographic" /* ORTHOGRAPHIC */: {
1207
1143
  if (!camera.orthographic) {
1208
- throw new Error("".concat(context, ": Camera orthographic properties are missing"));
1144
+ throw new Error(`${context}: Camera orthographic properties are missing`);
1209
1145
  }
1210
1146
  babylonCamera.mode = Camera.ORTHOGRAPHIC_CAMERA;
1211
1147
  babylonCamera.orthoLeft = -camera.orthographic.xmag;
@@ -1217,7 +1153,7 @@ var GLTFLoader = /** @class */ (function () {
1217
1153
  break;
1218
1154
  }
1219
1155
  default: {
1220
- throw new Error("".concat(context, ": Invalid camera type (").concat(camera.type, ")"));
1156
+ throw new Error(`${context}: Invalid camera type (${camera.type})`);
1221
1157
  }
1222
1158
  }
1223
1159
  GLTFLoader.AddPointerMetadata(babylonCamera, context);
@@ -1226,44 +1162,43 @@ var GLTFLoader = /** @class */ (function () {
1226
1162
  // register the camera to be used later.
1227
1163
  camera._babylonCamera = babylonCamera;
1228
1164
  this.logClose();
1229
- return Promise.all(promises).then(function () {
1165
+ return Promise.all(promises).then(() => {
1230
1166
  return babylonCamera;
1231
1167
  });
1232
- };
1233
- GLTFLoader.prototype._loadAnimationsAsync = function () {
1234
- var animations = this._gltf.animations;
1168
+ }
1169
+ _loadAnimationsAsync() {
1170
+ const animations = this._gltf.animations;
1235
1171
  if (!animations) {
1236
1172
  return Promise.resolve();
1237
1173
  }
1238
- var promises = new Array();
1239
- for (var index = 0; index < animations.length; index++) {
1240
- var animation = animations[index];
1241
- promises.push(this.loadAnimationAsync("/animations/".concat(animation.index), animation).then(function (animationGroup) {
1174
+ const promises = new Array();
1175
+ for (let index = 0; index < animations.length; index++) {
1176
+ const animation = animations[index];
1177
+ promises.push(this.loadAnimationAsync(`/animations/${animation.index}`, animation).then((animationGroup) => {
1242
1178
  // Delete the animation group if it ended up not having any animations in it.
1243
1179
  if (animationGroup.targetedAnimations.length === 0) {
1244
1180
  animationGroup.dispose();
1245
1181
  }
1246
1182
  }));
1247
1183
  }
1248
- return Promise.all(promises).then(function () { });
1249
- };
1184
+ return Promise.all(promises).then(() => { });
1185
+ }
1250
1186
  /**
1251
1187
  * Loads a glTF animation.
1252
1188
  * @param context The context when loading the asset
1253
1189
  * @param animation The glTF animation property
1254
1190
  * @returns A promise that resolves with the loaded Babylon animation group when the load is complete
1255
1191
  */
1256
- GLTFLoader.prototype.loadAnimationAsync = function (context, animation) {
1192
+ loadAnimationAsync(context, animation) {
1257
1193
  // turn everything into pointer
1258
- for (var _i = 0, _a = animation.channels; _i < _a.length; _i++) {
1259
- var channel = _a[_i];
1194
+ for (const channel of animation.channels) {
1260
1195
  if (channel.target.path == "pointer" /* POINTER */) {
1261
1196
  continue;
1262
1197
  }
1263
1198
  // decorate the channel with a KHR_animation_pointer extension.
1264
1199
  channel.target.extensions = channel.target.extensions || {};
1265
1200
  channel.target.extensions.KHR_animation_pointer = {
1266
- pointer: "/nodes/".concat(channel.target.node, "/").concat(channel.target.path),
1201
+ pointer: `/nodes/${channel.target.node}/${channel.target.path}`,
1267
1202
  };
1268
1203
  channel.target.path = "pointer" /* POINTER */;
1269
1204
  delete channel.target.node;
@@ -1275,13 +1210,13 @@ var GLTFLoader = /** @class */ (function () {
1275
1210
  }
1276
1211
  // create the animation group to be passed to extension.
1277
1212
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
1278
- var babylonAnimationGroup = new AnimationGroup(animation.name || "animation".concat(animation.index), this._babylonScene);
1213
+ const babylonAnimationGroup = new AnimationGroup(animation.name || `animation${animation.index}`, this._babylonScene);
1279
1214
  babylonAnimationGroup._parentContainer = this._assetContainer;
1280
1215
  this._babylonScene._blockEntityCollection = false;
1281
1216
  animation._babylonAnimationGroup = babylonAnimationGroup;
1282
- var promise = this._extensionsLoadAnimationAsync(context, animation);
1283
- return promise !== null && promise !== void 0 ? promise : Promise.resolve(animation._babylonAnimationGroup);
1284
- };
1217
+ const promise = this._extensionsLoadAnimationAsync(context, animation);
1218
+ return promise ?? Promise.resolve(animation._babylonAnimationGroup);
1219
+ }
1285
1220
  /**
1286
1221
  * Loads a glTF buffer.
1287
1222
  * @param context The context when loading the asset
@@ -1290,103 +1225,101 @@ var GLTFLoader = /** @class */ (function () {
1290
1225
  * @param byteLength The byte length to use
1291
1226
  * @returns A promise that resolves with the loaded data when the load is complete
1292
1227
  */
1293
- GLTFLoader.prototype.loadBufferAsync = function (context, buffer, byteOffset, byteLength) {
1294
- var extensionPromise = this._extensionsLoadBufferAsync(context, buffer, byteOffset, byteLength);
1228
+ loadBufferAsync(context, buffer, byteOffset, byteLength) {
1229
+ const extensionPromise = this._extensionsLoadBufferAsync(context, buffer, byteOffset, byteLength);
1295
1230
  if (extensionPromise) {
1296
1231
  return extensionPromise;
1297
1232
  }
1298
1233
  if (!buffer._data) {
1299
1234
  if (buffer.uri) {
1300
- buffer._data = this.loadUriAsync("".concat(context, "/uri"), buffer, buffer.uri);
1235
+ buffer._data = this.loadUriAsync(`${context}/uri`, buffer, buffer.uri);
1301
1236
  }
1302
1237
  else {
1303
1238
  if (!this._bin) {
1304
- throw new Error("".concat(context, ": Uri is missing or the binary glTF is missing its binary chunk"));
1239
+ throw new Error(`${context}: Uri is missing or the binary glTF is missing its binary chunk`);
1305
1240
  }
1306
1241
  buffer._data = this._bin.readAsync(0, buffer.byteLength);
1307
1242
  }
1308
1243
  }
1309
- return buffer._data.then(function (data) {
1244
+ return buffer._data.then((data) => {
1310
1245
  try {
1311
1246
  return new Uint8Array(data.buffer, data.byteOffset + byteOffset, byteLength);
1312
1247
  }
1313
1248
  catch (e) {
1314
- throw new Error("".concat(context, ": ").concat(e.message));
1249
+ throw new Error(`${context}: ${e.message}`);
1315
1250
  }
1316
1251
  });
1317
- };
1252
+ }
1318
1253
  /**
1319
1254
  * Loads a glTF buffer view.
1320
1255
  * @param context The context when loading the asset
1321
1256
  * @param bufferView The glTF buffer view property
1322
1257
  * @returns A promise that resolves with the loaded data when the load is complete
1323
1258
  */
1324
- GLTFLoader.prototype.loadBufferViewAsync = function (context, bufferView) {
1325
- var extensionPromise = this._extensionsLoadBufferViewAsync(context, bufferView);
1259
+ loadBufferViewAsync(context, bufferView) {
1260
+ const extensionPromise = this._extensionsLoadBufferViewAsync(context, bufferView);
1326
1261
  if (extensionPromise) {
1327
1262
  return extensionPromise;
1328
1263
  }
1329
1264
  if (bufferView._data) {
1330
1265
  return bufferView._data;
1331
1266
  }
1332
- var buffer = ArrayItem.Get("".concat(context, "/buffer"), this._gltf.buffers, bufferView.buffer);
1333
- bufferView._data = this.loadBufferAsync("/buffers/".concat(buffer.index), buffer, bufferView.byteOffset || 0, bufferView.byteLength);
1267
+ const buffer = ArrayItem.Get(`${context}/buffer`, this._gltf.buffers, bufferView.buffer);
1268
+ bufferView._data = this.loadBufferAsync(`/buffers/${buffer.index}`, buffer, bufferView.byteOffset || 0, bufferView.byteLength);
1334
1269
  return bufferView._data;
1335
- };
1336
- GLTFLoader.prototype._loadAccessorAsync = function (context, accessor, constructor) {
1337
- var _this = this;
1270
+ }
1271
+ _loadAccessorAsync(context, accessor, constructor) {
1338
1272
  if (accessor._data) {
1339
1273
  return accessor._data;
1340
1274
  }
1341
- var numComponents = GLTFLoader._GetNumComponents(context, accessor.type);
1342
- var byteStride = numComponents * VertexBuffer.GetTypeByteLength(accessor.componentType);
1343
- var length = numComponents * accessor.count;
1275
+ const numComponents = GLTFLoader._GetNumComponents(context, accessor.type);
1276
+ const byteStride = numComponents * VertexBuffer.GetTypeByteLength(accessor.componentType);
1277
+ const length = numComponents * accessor.count;
1344
1278
  if (accessor.bufferView == undefined) {
1345
1279
  accessor._data = Promise.resolve(new constructor(length));
1346
1280
  }
1347
1281
  else {
1348
- var bufferView_1 = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, accessor.bufferView);
1349
- accessor._data = this.loadBufferViewAsync("/bufferViews/".concat(bufferView_1.index), bufferView_1).then(function (data) {
1350
- if (accessor.componentType === 5126 /* FLOAT */ && !accessor.normalized && (!bufferView_1.byteStride || bufferView_1.byteStride === byteStride)) {
1282
+ const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);
1283
+ accessor._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {
1284
+ if (accessor.componentType === 5126 /* FLOAT */ && !accessor.normalized && (!bufferView.byteStride || bufferView.byteStride === byteStride)) {
1351
1285
  return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, length);
1352
1286
  }
1353
1287
  else {
1354
- var typedArray_1 = new constructor(length);
1355
- VertexBuffer.ForEach(data, accessor.byteOffset || 0, bufferView_1.byteStride || byteStride, numComponents, accessor.componentType, typedArray_1.length, accessor.normalized || false, function (value, index) {
1356
- typedArray_1[index] = value;
1288
+ const typedArray = new constructor(length);
1289
+ VertexBuffer.ForEach(data, accessor.byteOffset || 0, bufferView.byteStride || byteStride, numComponents, accessor.componentType, typedArray.length, accessor.normalized || false, (value, index) => {
1290
+ typedArray[index] = value;
1357
1291
  });
1358
- return typedArray_1;
1292
+ return typedArray;
1359
1293
  }
1360
1294
  });
1361
1295
  }
1362
1296
  if (accessor.sparse) {
1363
- var sparse_1 = accessor.sparse;
1364
- accessor._data = accessor._data.then(function (data) {
1365
- var typedArray = data;
1366
- var indicesBufferView = ArrayItem.Get("".concat(context, "/sparse/indices/bufferView"), _this._gltf.bufferViews, sparse_1.indices.bufferView);
1367
- var valuesBufferView = ArrayItem.Get("".concat(context, "/sparse/values/bufferView"), _this._gltf.bufferViews, sparse_1.values.bufferView);
1297
+ const sparse = accessor.sparse;
1298
+ accessor._data = accessor._data.then((data) => {
1299
+ const typedArray = data;
1300
+ const indicesBufferView = ArrayItem.Get(`${context}/sparse/indices/bufferView`, this._gltf.bufferViews, sparse.indices.bufferView);
1301
+ const valuesBufferView = ArrayItem.Get(`${context}/sparse/values/bufferView`, this._gltf.bufferViews, sparse.values.bufferView);
1368
1302
  return Promise.all([
1369
- _this.loadBufferViewAsync("/bufferViews/".concat(indicesBufferView.index), indicesBufferView),
1370
- _this.loadBufferViewAsync("/bufferViews/".concat(valuesBufferView.index), valuesBufferView),
1371
- ]).then(function (_a) {
1372
- var indicesData = _a[0], valuesData = _a[1];
1373
- var indices = GLTFLoader._GetTypedArray("".concat(context, "/sparse/indices"), sparse_1.indices.componentType, indicesData, sparse_1.indices.byteOffset, sparse_1.count);
1374
- var sparseLength = numComponents * sparse_1.count;
1375
- var values;
1303
+ this.loadBufferViewAsync(`/bufferViews/${indicesBufferView.index}`, indicesBufferView),
1304
+ this.loadBufferViewAsync(`/bufferViews/${valuesBufferView.index}`, valuesBufferView),
1305
+ ]).then(([indicesData, valuesData]) => {
1306
+ const indices = GLTFLoader._GetTypedArray(`${context}/sparse/indices`, sparse.indices.componentType, indicesData, sparse.indices.byteOffset, sparse.count);
1307
+ const sparseLength = numComponents * sparse.count;
1308
+ let values;
1376
1309
  if (accessor.componentType === 5126 /* FLOAT */ && !accessor.normalized) {
1377
- values = GLTFLoader._GetTypedArray("".concat(context, "/sparse/values"), accessor.componentType, valuesData, sparse_1.values.byteOffset, sparseLength);
1310
+ values = GLTFLoader._GetTypedArray(`${context}/sparse/values`, accessor.componentType, valuesData, sparse.values.byteOffset, sparseLength);
1378
1311
  }
1379
1312
  else {
1380
- var sparseData = GLTFLoader._GetTypedArray("".concat(context, "/sparse/values"), accessor.componentType, valuesData, sparse_1.values.byteOffset, sparseLength);
1313
+ const sparseData = GLTFLoader._GetTypedArray(`${context}/sparse/values`, accessor.componentType, valuesData, sparse.values.byteOffset, sparseLength);
1381
1314
  values = new constructor(sparseLength);
1382
- VertexBuffer.ForEach(sparseData, 0, byteStride, numComponents, accessor.componentType, values.length, accessor.normalized || false, function (value, index) {
1315
+ VertexBuffer.ForEach(sparseData, 0, byteStride, numComponents, accessor.componentType, values.length, accessor.normalized || false, (value, index) => {
1383
1316
  values[index] = value;
1384
1317
  });
1385
1318
  }
1386
- var valuesIndex = 0;
1387
- for (var indicesIndex = 0; indicesIndex < indices.length; indicesIndex++) {
1388
- var dataIndex = indices[indicesIndex] * numComponents;
1389
- for (var componentIndex = 0; componentIndex < numComponents; componentIndex++) {
1319
+ let valuesIndex = 0;
1320
+ for (let indicesIndex = 0; indicesIndex < indices.length; indicesIndex++) {
1321
+ let dataIndex = indices[indicesIndex] * numComponents;
1322
+ for (let componentIndex = 0; componentIndex < numComponents; componentIndex++) {
1390
1323
  typedArray[dataIndex++] = values[valuesIndex++];
1391
1324
  }
1392
1325
  }
@@ -1395,84 +1328,83 @@ var GLTFLoader = /** @class */ (function () {
1395
1328
  });
1396
1329
  }
1397
1330
  return accessor._data;
1398
- };
1331
+ }
1399
1332
  /**
1400
1333
  * @param context
1401
1334
  * @param accessor
1402
1335
  * @hidden
1403
1336
  */
1404
- GLTFLoader.prototype._loadFloatAccessorAsync = function (context, accessor) {
1337
+ _loadFloatAccessorAsync(context, accessor) {
1405
1338
  return this._loadAccessorAsync(context, accessor, Float32Array);
1406
- };
1407
- GLTFLoader.prototype._loadIndicesAccessorAsync = function (context, accessor) {
1339
+ }
1340
+ _loadIndicesAccessorAsync(context, accessor) {
1408
1341
  if (accessor.type !== "SCALAR" /* SCALAR */) {
1409
- throw new Error("".concat(context, "/type: Invalid value ").concat(accessor.type));
1342
+ throw new Error(`${context}/type: Invalid value ${accessor.type}`);
1410
1343
  }
1411
1344
  if (accessor.componentType !== 5121 /* UNSIGNED_BYTE */ &&
1412
1345
  accessor.componentType !== 5123 /* UNSIGNED_SHORT */ &&
1413
1346
  accessor.componentType !== 5125 /* UNSIGNED_INT */) {
1414
- throw new Error("".concat(context, "/componentType: Invalid value ").concat(accessor.componentType));
1347
+ throw new Error(`${context}/componentType: Invalid value ${accessor.componentType}`);
1415
1348
  }
1416
1349
  if (accessor._data) {
1417
1350
  return accessor._data;
1418
1351
  }
1419
1352
  if (accessor.sparse) {
1420
- var constructor = GLTFLoader._GetTypedArrayConstructor("".concat(context, "/componentType"), accessor.componentType);
1353
+ const constructor = GLTFLoader._GetTypedArrayConstructor(`${context}/componentType`, accessor.componentType);
1421
1354
  accessor._data = this._loadAccessorAsync(context, accessor, constructor);
1422
1355
  }
1423
1356
  else {
1424
- var bufferView = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, accessor.bufferView);
1425
- accessor._data = this.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView).then(function (data) {
1357
+ const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);
1358
+ accessor._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {
1426
1359
  return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, accessor.count);
1427
1360
  });
1428
1361
  }
1429
1362
  return accessor._data;
1430
- };
1431
- GLTFLoader.prototype._loadVertexBufferViewAsync = function (bufferView) {
1363
+ }
1364
+ _loadVertexBufferViewAsync(bufferView) {
1432
1365
  if (bufferView._babylonBuffer) {
1433
1366
  return bufferView._babylonBuffer;
1434
1367
  }
1435
- var engine = this._babylonScene.getEngine();
1436
- bufferView._babylonBuffer = this.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView).then(function (data) {
1368
+ const engine = this._babylonScene.getEngine();
1369
+ bufferView._babylonBuffer = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {
1437
1370
  return new Buffer(engine, data, false);
1438
1371
  });
1439
1372
  return bufferView._babylonBuffer;
1440
- };
1441
- GLTFLoader.prototype._loadVertexAccessorAsync = function (context, accessor, kind) {
1442
- var _a;
1443
- if ((_a = accessor._babylonVertexBuffer) === null || _a === void 0 ? void 0 : _a[kind]) {
1373
+ }
1374
+ _loadVertexAccessorAsync(context, accessor, kind) {
1375
+ if (accessor._babylonVertexBuffer?.[kind]) {
1444
1376
  return accessor._babylonVertexBuffer[kind];
1445
1377
  }
1446
1378
  if (!accessor._babylonVertexBuffer) {
1447
1379
  accessor._babylonVertexBuffer = {};
1448
1380
  }
1449
- var engine = this._babylonScene.getEngine();
1381
+ const engine = this._babylonScene.getEngine();
1450
1382
  if (accessor.sparse) {
1451
- accessor._babylonVertexBuffer[kind] = this._loadFloatAccessorAsync(context, accessor).then(function (data) {
1383
+ accessor._babylonVertexBuffer[kind] = this._loadFloatAccessorAsync(context, accessor).then((data) => {
1452
1384
  return new VertexBuffer(engine, data, kind, false);
1453
1385
  });
1454
1386
  }
1455
1387
  // Load joint indices as a float array since the shaders expect float data but glTF uses unsigned byte/short.
1456
1388
  // This prevents certain platforms (e.g. D3D) from having to convert the data to float on the fly.
1457
1389
  else if (kind === VertexBuffer.MatricesIndicesKind || kind === VertexBuffer.MatricesIndicesExtraKind) {
1458
- accessor._babylonVertexBuffer[kind] = this._loadFloatAccessorAsync(context, accessor).then(function (data) {
1390
+ accessor._babylonVertexBuffer[kind] = this._loadFloatAccessorAsync(context, accessor).then((data) => {
1459
1391
  return new VertexBuffer(engine, data, kind, false);
1460
1392
  });
1461
1393
  }
1462
1394
  else {
1463
- var bufferView_2 = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, accessor.bufferView);
1464
- accessor._babylonVertexBuffer[kind] = this._loadVertexBufferViewAsync(bufferView_2).then(function (babylonBuffer) {
1465
- var size = GLTFLoader._GetNumComponents(context, accessor.type);
1466
- return new VertexBuffer(engine, babylonBuffer, kind, false, false, bufferView_2.byteStride, false, accessor.byteOffset, size, accessor.componentType, accessor.normalized, true, 1, true);
1395
+ const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);
1396
+ accessor._babylonVertexBuffer[kind] = this._loadVertexBufferViewAsync(bufferView).then((babylonBuffer) => {
1397
+ const size = GLTFLoader._GetNumComponents(context, accessor.type);
1398
+ return new VertexBuffer(engine, babylonBuffer, kind, false, false, bufferView.byteStride, false, accessor.byteOffset, size, accessor.componentType, accessor.normalized, true, 1, true);
1467
1399
  });
1468
1400
  }
1469
1401
  return accessor._babylonVertexBuffer[kind];
1470
- };
1471
- GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, properties, babylonMaterial) {
1402
+ }
1403
+ _loadMaterialMetallicRoughnessPropertiesAsync(context, properties, babylonMaterial) {
1472
1404
  if (!(babylonMaterial instanceof PBRMaterial)) {
1473
- throw new Error("".concat(context, ": Material type not supported"));
1405
+ throw new Error(`${context}: Material type not supported`);
1474
1406
  }
1475
- var promises = new Array();
1407
+ const promises = new Array();
1476
1408
  if (properties) {
1477
1409
  if (properties.baseColorFactor) {
1478
1410
  babylonMaterial.albedoColor = Color3.FromArray(properties.baseColorFactor);
@@ -1484,15 +1416,15 @@ var GLTFLoader = /** @class */ (function () {
1484
1416
  babylonMaterial.metallic = properties.metallicFactor == undefined ? 1 : properties.metallicFactor;
1485
1417
  babylonMaterial.roughness = properties.roughnessFactor == undefined ? 1 : properties.roughnessFactor;
1486
1418
  if (properties.baseColorTexture) {
1487
- promises.push(this.loadTextureInfoAsync("".concat(context, "/baseColorTexture"), properties.baseColorTexture, function (texture) {
1488
- texture.name = "".concat(babylonMaterial.name, " (Base Color)");
1419
+ promises.push(this.loadTextureInfoAsync(`${context}/baseColorTexture`, properties.baseColorTexture, (texture) => {
1420
+ texture.name = `${babylonMaterial.name} (Base Color)`;
1489
1421
  babylonMaterial.albedoTexture = texture;
1490
1422
  }));
1491
1423
  }
1492
1424
  if (properties.metallicRoughnessTexture) {
1493
1425
  properties.metallicRoughnessTexture.nonColorData = true;
1494
- promises.push(this.loadTextureInfoAsync("".concat(context, "/metallicRoughnessTexture"), properties.metallicRoughnessTexture, function (texture) {
1495
- texture.name = "".concat(babylonMaterial.name, " (Metallic Roughness)");
1426
+ promises.push(this.loadTextureInfoAsync(`${context}/metallicRoughnessTexture`, properties.metallicRoughnessTexture, (texture) => {
1427
+ texture.name = `${babylonMaterial.name} (Metallic Roughness)`;
1496
1428
  babylonMaterial.metallicTexture = texture;
1497
1429
  }));
1498
1430
  babylonMaterial.useMetallnessFromMetallicTextureBlue = true;
@@ -1500,8 +1432,8 @@ var GLTFLoader = /** @class */ (function () {
1500
1432
  babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;
1501
1433
  }
1502
1434
  }
1503
- return Promise.all(promises).then(function () { });
1504
- };
1435
+ return Promise.all(promises).then(() => { });
1436
+ }
1505
1437
  /**
1506
1438
  * @param context
1507
1439
  * @param material
@@ -1510,17 +1442,16 @@ var GLTFLoader = /** @class */ (function () {
1510
1442
  * @param assign
1511
1443
  * @hidden
1512
1444
  */
1513
- GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
1514
- if (assign === void 0) { assign = function () { }; }
1515
- var extensionPromise = this._extensionsLoadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign);
1445
+ _loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign = () => { }) {
1446
+ const extensionPromise = this._extensionsLoadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign);
1516
1447
  if (extensionPromise) {
1517
1448
  return extensionPromise;
1518
1449
  }
1519
1450
  material._data = material._data || {};
1520
- var babylonData = material._data[babylonDrawMode];
1451
+ let babylonData = material._data[babylonDrawMode];
1521
1452
  if (!babylonData) {
1522
- this.logOpen("".concat(context, " ").concat(material.name || ""));
1523
- var babylonMaterial = this.createMaterial(context, material, babylonDrawMode);
1453
+ this.logOpen(`${context} ${material.name || ""}`);
1454
+ const babylonMaterial = this.createMaterial(context, material, babylonDrawMode);
1524
1455
  babylonData = {
1525
1456
  babylonMaterial: babylonMaterial,
1526
1457
  babylonMeshes: [],
@@ -1533,21 +1464,21 @@ var GLTFLoader = /** @class */ (function () {
1533
1464
  }
1534
1465
  if (babylonMesh) {
1535
1466
  babylonData.babylonMeshes.push(babylonMesh);
1536
- babylonMesh.onDisposeObservable.addOnce(function () {
1537
- var index = babylonData.babylonMeshes.indexOf(babylonMesh);
1467
+ babylonMesh.onDisposeObservable.addOnce(() => {
1468
+ const index = babylonData.babylonMeshes.indexOf(babylonMesh);
1538
1469
  if (index !== -1) {
1539
1470
  babylonData.babylonMeshes.splice(index, 1);
1540
1471
  }
1541
1472
  });
1542
1473
  }
1543
1474
  assign(babylonData.babylonMaterial);
1544
- return babylonData.promise.then(function () {
1475
+ return babylonData.promise.then(() => {
1545
1476
  return babylonData.babylonMaterial;
1546
1477
  });
1547
- };
1548
- GLTFLoader.prototype._createDefaultMaterial = function (name, babylonDrawMode) {
1478
+ }
1479
+ _createDefaultMaterial(name, babylonDrawMode) {
1549
1480
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
1550
- var babylonMaterial = new PBRMaterial(name, this._babylonScene);
1481
+ const babylonMaterial = new PBRMaterial(name, this._babylonScene);
1551
1482
  babylonMaterial._parentContainer = this._assetContainer;
1552
1483
  this._babylonScene._blockEntityCollection = false;
1553
1484
  // Moved to mesh so user can change materials on gltf meshes: babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;
@@ -1559,7 +1490,7 @@ var GLTFLoader = /** @class */ (function () {
1559
1490
  babylonMaterial.metallic = 1;
1560
1491
  babylonMaterial.roughness = 1;
1561
1492
  return babylonMaterial;
1562
- };
1493
+ }
1563
1494
  /**
1564
1495
  * Creates a Babylon material from a glTF material.
1565
1496
  * @param context The context when loading the asset
@@ -1567,15 +1498,15 @@ var GLTFLoader = /** @class */ (function () {
1567
1498
  * @param babylonDrawMode The draw mode for the Babylon material
1568
1499
  * @returns The Babylon material
1569
1500
  */
1570
- GLTFLoader.prototype.createMaterial = function (context, material, babylonDrawMode) {
1571
- var extensionPromise = this._extensionsCreateMaterial(context, material, babylonDrawMode);
1501
+ createMaterial(context, material, babylonDrawMode) {
1502
+ const extensionPromise = this._extensionsCreateMaterial(context, material, babylonDrawMode);
1572
1503
  if (extensionPromise) {
1573
1504
  return extensionPromise;
1574
1505
  }
1575
- var name = material.name || "material".concat(material.index);
1576
- var babylonMaterial = this._createDefaultMaterial(name, babylonDrawMode);
1506
+ const name = material.name || `material${material.index}`;
1507
+ const babylonMaterial = this._createDefaultMaterial(name, babylonDrawMode);
1577
1508
  return babylonMaterial;
1578
- };
1509
+ }
1579
1510
  /**
1580
1511
  * Loads properties from a glTF material into a Babylon material.
1581
1512
  * @param context The context when loading the asset
@@ -1583,19 +1514,19 @@ var GLTFLoader = /** @class */ (function () {
1583
1514
  * @param babylonMaterial The Babylon material
1584
1515
  * @returns A promise that resolves when the load is complete
1585
1516
  */
1586
- GLTFLoader.prototype.loadMaterialPropertiesAsync = function (context, material, babylonMaterial) {
1587
- var extensionPromise = this._extensionsLoadMaterialPropertiesAsync(context, material, babylonMaterial);
1517
+ loadMaterialPropertiesAsync(context, material, babylonMaterial) {
1518
+ const extensionPromise = this._extensionsLoadMaterialPropertiesAsync(context, material, babylonMaterial);
1588
1519
  if (extensionPromise) {
1589
1520
  return extensionPromise;
1590
1521
  }
1591
- var promises = new Array();
1522
+ const promises = new Array();
1592
1523
  promises.push(this.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
1593
1524
  if (material.pbrMetallicRoughness) {
1594
- promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync("".concat(context, "/pbrMetallicRoughness"), material.pbrMetallicRoughness, babylonMaterial));
1525
+ promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(`${context}/pbrMetallicRoughness`, material.pbrMetallicRoughness, babylonMaterial));
1595
1526
  }
1596
1527
  this.loadMaterialAlphaProperties(context, material, babylonMaterial);
1597
- return Promise.all(promises).then(function () { });
1598
- };
1528
+ return Promise.all(promises).then(() => { });
1529
+ }
1599
1530
  /**
1600
1531
  * Loads the normal, occlusion, and emissive properties from a glTF material into a Babylon material.
1601
1532
  * @param context The context when loading the asset
@@ -1603,11 +1534,11 @@ var GLTFLoader = /** @class */ (function () {
1603
1534
  * @param babylonMaterial The Babylon material
1604
1535
  * @returns A promise that resolves when the load is complete
1605
1536
  */
1606
- GLTFLoader.prototype.loadMaterialBasePropertiesAsync = function (context, material, babylonMaterial) {
1537
+ loadMaterialBasePropertiesAsync(context, material, babylonMaterial) {
1607
1538
  if (!(babylonMaterial instanceof PBRMaterial)) {
1608
- throw new Error("".concat(context, ": Material type not supported"));
1539
+ throw new Error(`${context}: Material type not supported`);
1609
1540
  }
1610
- var promises = new Array();
1541
+ const promises = new Array();
1611
1542
  babylonMaterial.emissiveColor = material.emissiveFactor ? Color3.FromArray(material.emissiveFactor) : new Color3(0, 0, 0);
1612
1543
  if (material.doubleSided) {
1613
1544
  babylonMaterial.backFaceCulling = false;
@@ -1615,8 +1546,8 @@ var GLTFLoader = /** @class */ (function () {
1615
1546
  }
1616
1547
  if (material.normalTexture) {
1617
1548
  material.normalTexture.nonColorData = true;
1618
- promises.push(this.loadTextureInfoAsync("".concat(context, "/normalTexture"), material.normalTexture, function (texture) {
1619
- texture.name = "".concat(babylonMaterial.name, " (Normal)");
1549
+ promises.push(this.loadTextureInfoAsync(`${context}/normalTexture`, material.normalTexture, (texture) => {
1550
+ texture.name = `${babylonMaterial.name} (Normal)`;
1620
1551
  babylonMaterial.bumpTexture = texture;
1621
1552
  }));
1622
1553
  babylonMaterial.invertNormalMapX = !this._babylonScene.useRightHandedSystem;
@@ -1628,8 +1559,8 @@ var GLTFLoader = /** @class */ (function () {
1628
1559
  }
1629
1560
  if (material.occlusionTexture) {
1630
1561
  material.occlusionTexture.nonColorData = true;
1631
- promises.push(this.loadTextureInfoAsync("".concat(context, "/occlusionTexture"), material.occlusionTexture, function (texture) {
1632
- texture.name = "".concat(babylonMaterial.name, " (Occlusion)");
1562
+ promises.push(this.loadTextureInfoAsync(`${context}/occlusionTexture`, material.occlusionTexture, (texture) => {
1563
+ texture.name = `${babylonMaterial.name} (Occlusion)`;
1633
1564
  babylonMaterial.ambientTexture = texture;
1634
1565
  }));
1635
1566
  babylonMaterial.useAmbientInGrayScale = true;
@@ -1638,13 +1569,13 @@ var GLTFLoader = /** @class */ (function () {
1638
1569
  }
1639
1570
  }
1640
1571
  if (material.emissiveTexture) {
1641
- promises.push(this.loadTextureInfoAsync("".concat(context, "/emissiveTexture"), material.emissiveTexture, function (texture) {
1642
- texture.name = "".concat(babylonMaterial.name, " (Emissive)");
1572
+ promises.push(this.loadTextureInfoAsync(`${context}/emissiveTexture`, material.emissiveTexture, (texture) => {
1573
+ texture.name = `${babylonMaterial.name} (Emissive)`;
1643
1574
  babylonMaterial.emissiveTexture = texture;
1644
1575
  }));
1645
1576
  }
1646
- return Promise.all(promises).then(function () { });
1647
- };
1577
+ return Promise.all(promises).then(() => { });
1578
+ }
1648
1579
  /**
1649
1580
  * Loads the alpha properties from a glTF material into a Babylon material.
1650
1581
  * Must be called after the setting the albedo texture of the Babylon material when the material has an albedo texture.
@@ -1652,11 +1583,11 @@ var GLTFLoader = /** @class */ (function () {
1652
1583
  * @param material The glTF material property
1653
1584
  * @param babylonMaterial The Babylon material
1654
1585
  */
1655
- GLTFLoader.prototype.loadMaterialAlphaProperties = function (context, material, babylonMaterial) {
1586
+ loadMaterialAlphaProperties(context, material, babylonMaterial) {
1656
1587
  if (!(babylonMaterial instanceof PBRMaterial)) {
1657
- throw new Error("".concat(context, ": Material type not supported"));
1588
+ throw new Error(`${context}: Material type not supported`);
1658
1589
  }
1659
- var alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
1590
+ const alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
1660
1591
  switch (alphaMode) {
1661
1592
  case "OPAQUE" /* OPAQUE */: {
1662
1593
  babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_OPAQUE;
@@ -1679,10 +1610,10 @@ var GLTFLoader = /** @class */ (function () {
1679
1610
  break;
1680
1611
  }
1681
1612
  default: {
1682
- throw new Error("".concat(context, "/alphaMode: Invalid value (").concat(material.alphaMode, ")"));
1613
+ throw new Error(`${context}/alphaMode: Invalid value (${material.alphaMode})`);
1683
1614
  }
1684
1615
  }
1685
- };
1616
+ }
1686
1617
  /**
1687
1618
  * Loads a glTF texture info.
1688
1619
  * @param context The context when loading the asset
@@ -1690,47 +1621,44 @@ var GLTFLoader = /** @class */ (function () {
1690
1621
  * @param assign A function called synchronously after parsing the glTF properties
1691
1622
  * @returns A promise that resolves with the loaded Babylon texture when the load is complete
1692
1623
  */
1693
- GLTFLoader.prototype.loadTextureInfoAsync = function (context, textureInfo, assign) {
1694
- var _this = this;
1695
- if (assign === void 0) { assign = function () { }; }
1696
- var extensionPromise = this._extensionsLoadTextureInfoAsync(context, textureInfo, assign);
1624
+ loadTextureInfoAsync(context, textureInfo, assign = () => { }) {
1625
+ const extensionPromise = this._extensionsLoadTextureInfoAsync(context, textureInfo, assign);
1697
1626
  if (extensionPromise) {
1698
1627
  return extensionPromise;
1699
1628
  }
1700
- this.logOpen("".concat(context));
1629
+ this.logOpen(`${context}`);
1701
1630
  if (textureInfo.texCoord >= 6) {
1702
- throw new Error("".concat(context, "/texCoord: Invalid value (").concat(textureInfo.texCoord, ")"));
1631
+ throw new Error(`${context}/texCoord: Invalid value (${textureInfo.texCoord})`);
1703
1632
  }
1704
- var texture = ArrayItem.Get("".concat(context, "/index"), this._gltf.textures, textureInfo.index);
1633
+ const texture = ArrayItem.Get(`${context}/index`, this._gltf.textures, textureInfo.index);
1705
1634
  texture._textureInfo = textureInfo;
1706
- var promise = this._loadTextureAsync("/textures/".concat(textureInfo.index), texture, function (babylonTexture) {
1635
+ const promise = this._loadTextureAsync(`/textures/${textureInfo.index}`, texture, (babylonTexture) => {
1707
1636
  babylonTexture.coordinatesIndex = textureInfo.texCoord || 0;
1708
1637
  GLTFLoader.AddPointerMetadata(babylonTexture, context);
1709
- _this._parent.onTextureLoadedObservable.notifyObservers(babylonTexture);
1638
+ this._parent.onTextureLoadedObservable.notifyObservers(babylonTexture);
1710
1639
  assign(babylonTexture);
1711
1640
  });
1712
1641
  this.logClose();
1713
1642
  return promise;
1714
- };
1643
+ }
1715
1644
  /**
1716
1645
  * @param context
1717
1646
  * @param texture
1718
1647
  * @param assign
1719
1648
  * @hidden
1720
1649
  */
1721
- GLTFLoader.prototype._loadTextureAsync = function (context, texture, assign) {
1722
- if (assign === void 0) { assign = function () { }; }
1723
- var extensionPromise = this._extensionsLoadTextureAsync(context, texture, assign);
1650
+ _loadTextureAsync(context, texture, assign = () => { }) {
1651
+ const extensionPromise = this._extensionsLoadTextureAsync(context, texture, assign);
1724
1652
  if (extensionPromise) {
1725
1653
  return extensionPromise;
1726
1654
  }
1727
- this.logOpen("".concat(context, " ").concat(texture.name || ""));
1728
- var sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get("".concat(context, "/sampler"), this._gltf.samplers, texture.sampler);
1729
- var image = ArrayItem.Get("".concat(context, "/source"), this._gltf.images, texture.source);
1730
- var promise = this._createTextureAsync(context, sampler, image, assign, undefined, !texture._textureInfo.nonColorData);
1655
+ this.logOpen(`${context} ${texture.name || ""}`);
1656
+ const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._gltf.samplers, texture.sampler);
1657
+ const image = ArrayItem.Get(`${context}/source`, this._gltf.images, texture.source);
1658
+ const promise = this._createTextureAsync(context, sampler, image, assign, undefined, !texture._textureInfo.nonColorData);
1731
1659
  this.logClose();
1732
1660
  return promise;
1733
- };
1661
+ }
1734
1662
  /**
1735
1663
  * @param context
1736
1664
  * @param sampler
@@ -1740,78 +1668,76 @@ var GLTFLoader = /** @class */ (function () {
1740
1668
  * @param useSRGBBuffer
1741
1669
  * @hidden
1742
1670
  */
1743
- GLTFLoader.prototype._createTextureAsync = function (context, sampler, image, assign, textureLoaderOptions, useSRGBBuffer) {
1744
- var _this = this;
1745
- if (assign === void 0) { assign = function () { }; }
1746
- var samplerData = this._loadSampler("/samplers/".concat(sampler.index), sampler);
1747
- var promises = new Array();
1748
- var deferred = new Deferred();
1671
+ _createTextureAsync(context, sampler, image, assign = () => { }, textureLoaderOptions, useSRGBBuffer) {
1672
+ const samplerData = this._loadSampler(`/samplers/${sampler.index}`, sampler);
1673
+ const promises = new Array();
1674
+ const deferred = new Deferred();
1749
1675
  this._babylonScene._blockEntityCollection = !!this._assetContainer;
1750
- var textureCreationOptions = {
1676
+ const textureCreationOptions = {
1751
1677
  noMipmap: samplerData.noMipMaps,
1752
1678
  invertY: false,
1753
1679
  samplingMode: samplerData.samplingMode,
1754
- onLoad: function () {
1755
- if (!_this._disposed) {
1680
+ onLoad: () => {
1681
+ if (!this._disposed) {
1756
1682
  deferred.resolve();
1757
1683
  }
1758
1684
  },
1759
- onError: function (message, exception) {
1760
- if (!_this._disposed) {
1761
- deferred.reject(new Error("".concat(context, ": ").concat(exception && exception.message ? exception.message : message || "Failed to load texture")));
1685
+ onError: (message, exception) => {
1686
+ if (!this._disposed) {
1687
+ deferred.reject(new Error(`${context}: ${exception && exception.message ? exception.message : message || "Failed to load texture"}`));
1762
1688
  }
1763
1689
  },
1764
1690
  mimeType: image.mimeType,
1765
1691
  loaderOptions: textureLoaderOptions,
1766
1692
  useSRGBBuffer: !!useSRGBBuffer && this._parent.useSRGBBuffers,
1767
1693
  };
1768
- var babylonTexture = new Texture(null, this._babylonScene, textureCreationOptions);
1694
+ const babylonTexture = new Texture(null, this._babylonScene, textureCreationOptions);
1769
1695
  babylonTexture._parentContainer = this._assetContainer;
1770
1696
  this._babylonScene._blockEntityCollection = false;
1771
1697
  promises.push(deferred.promise);
1772
- promises.push(this.loadImageAsync("/images/".concat(image.index), image).then(function (data) {
1773
- var name = image.uri || "".concat(_this._fileName, "#image").concat(image.index);
1774
- var dataUrl = "data:".concat(_this._uniqueRootUrl).concat(name);
1698
+ promises.push(this.loadImageAsync(`/images/${image.index}`, image).then((data) => {
1699
+ const name = image.uri || `${this._fileName}#image${image.index}`;
1700
+ const dataUrl = `data:${this._uniqueRootUrl}${name}`;
1775
1701
  babylonTexture.updateURL(dataUrl, data);
1776
1702
  }));
1777
1703
  babylonTexture.wrapU = samplerData.wrapU;
1778
1704
  babylonTexture.wrapV = samplerData.wrapV;
1779
1705
  assign(babylonTexture);
1780
- return Promise.all(promises).then(function () {
1706
+ return Promise.all(promises).then(() => {
1781
1707
  return babylonTexture;
1782
1708
  });
1783
- };
1784
- GLTFLoader.prototype._loadSampler = function (context, sampler) {
1709
+ }
1710
+ _loadSampler(context, sampler) {
1785
1711
  if (!sampler._data) {
1786
1712
  sampler._data = {
1787
1713
  noMipMaps: sampler.minFilter === 9728 /* NEAREST */ || sampler.minFilter === 9729 /* LINEAR */,
1788
1714
  samplingMode: GLTFLoader._GetTextureSamplingMode(context, sampler),
1789
- wrapU: GLTFLoader._GetTextureWrapMode("".concat(context, "/wrapS"), sampler.wrapS),
1790
- wrapV: GLTFLoader._GetTextureWrapMode("".concat(context, "/wrapT"), sampler.wrapT),
1715
+ wrapU: GLTFLoader._GetTextureWrapMode(`${context}/wrapS`, sampler.wrapS),
1716
+ wrapV: GLTFLoader._GetTextureWrapMode(`${context}/wrapT`, sampler.wrapT),
1791
1717
  };
1792
1718
  }
1793
1719
  return sampler._data;
1794
- };
1720
+ }
1795
1721
  /**
1796
1722
  * Loads a glTF image.
1797
1723
  * @param context The context when loading the asset
1798
1724
  * @param image The glTF image property
1799
1725
  * @returns A promise that resolves with the loaded data when the load is complete
1800
1726
  */
1801
- GLTFLoader.prototype.loadImageAsync = function (context, image) {
1727
+ loadImageAsync(context, image) {
1802
1728
  if (!image._data) {
1803
- this.logOpen("".concat(context, " ").concat(image.name || ""));
1729
+ this.logOpen(`${context} ${image.name || ""}`);
1804
1730
  if (image.uri) {
1805
- image._data = this.loadUriAsync("".concat(context, "/uri"), image, image.uri);
1731
+ image._data = this.loadUriAsync(`${context}/uri`, image, image.uri);
1806
1732
  }
1807
1733
  else {
1808
- var bufferView = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, image.bufferView);
1809
- image._data = this.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView);
1734
+ const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, image.bufferView);
1735
+ image._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView);
1810
1736
  }
1811
1737
  this.logClose();
1812
1738
  }
1813
1739
  return image._data;
1814
- };
1740
+ }
1815
1741
  /**
1816
1742
  * Loads a glTF uri.
1817
1743
  * @param context The context when loading the asset
@@ -1819,47 +1745,46 @@ var GLTFLoader = /** @class */ (function () {
1819
1745
  * @param uri The base64 or relative uri
1820
1746
  * @returns A promise that resolves with the loaded data when the load is complete
1821
1747
  */
1822
- GLTFLoader.prototype.loadUriAsync = function (context, property, uri) {
1823
- var _this = this;
1824
- var extensionPromise = this._extensionsLoadUriAsync(context, property, uri);
1748
+ loadUriAsync(context, property, uri) {
1749
+ const extensionPromise = this._extensionsLoadUriAsync(context, property, uri);
1825
1750
  if (extensionPromise) {
1826
1751
  return extensionPromise;
1827
1752
  }
1828
1753
  if (!GLTFLoader._ValidateUri(uri)) {
1829
- throw new Error("".concat(context, ": '").concat(uri, "' is invalid"));
1754
+ throw new Error(`${context}: '${uri}' is invalid`);
1830
1755
  }
1831
1756
  if (IsBase64DataUrl(uri)) {
1832
- var data = new Uint8Array(DecodeBase64UrlToBinary(uri));
1833
- this.log("".concat(context, ": Decoded ").concat(uri.substr(0, 64), "... (").concat(data.length, " bytes)"));
1757
+ const data = new Uint8Array(DecodeBase64UrlToBinary(uri));
1758
+ this.log(`${context}: Decoded ${uri.substr(0, 64)}... (${data.length} bytes)`);
1834
1759
  return Promise.resolve(data);
1835
1760
  }
1836
- this.log("".concat(context, ": Loading ").concat(uri));
1837
- return this._parent.preprocessUrlAsync(this._rootUrl + uri).then(function (url) {
1838
- return new Promise(function (resolve, reject) {
1839
- _this._parent._loadFile(_this._babylonScene, url, function (data) {
1840
- if (!_this._disposed) {
1841
- _this.log("".concat(context, ": Loaded ").concat(uri, " (").concat(data.byteLength, " bytes)"));
1761
+ this.log(`${context}: Loading ${uri}`);
1762
+ return this._parent.preprocessUrlAsync(this._rootUrl + uri).then((url) => {
1763
+ return new Promise((resolve, reject) => {
1764
+ this._parent._loadFile(this._babylonScene, url, (data) => {
1765
+ if (!this._disposed) {
1766
+ this.log(`${context}: Loaded ${uri} (${data.byteLength} bytes)`);
1842
1767
  resolve(new Uint8Array(data));
1843
1768
  }
1844
- }, true, function (request) {
1845
- reject(new LoadFileError("".concat(context, ": Failed to load '").concat(uri, "'").concat(request ? ": " + request.status + " " + request.statusText : ""), request));
1769
+ }, true, (request) => {
1770
+ reject(new LoadFileError(`${context}: Failed to load '${uri}'${request ? ": " + request.status + " " + request.statusText : ""}`, request));
1846
1771
  });
1847
1772
  });
1848
1773
  });
1849
- };
1774
+ }
1850
1775
  /**
1851
1776
  * Adds a JSON pointer to the metadata of the Babylon object at `<object>.metadata.gltf.pointers`.
1852
1777
  * @param babylonObject the Babylon object with metadata
1853
1778
  * @param babylonObject.metadata
1854
1779
  * @param pointer the JSON pointer
1855
1780
  */
1856
- GLTFLoader.AddPointerMetadata = function (babylonObject, pointer) {
1857
- var metadata = (babylonObject.metadata = babylonObject.metadata || {});
1858
- var gltf = (metadata.gltf = metadata.gltf || {});
1859
- var pointers = (gltf.pointers = gltf.pointers || []);
1781
+ static AddPointerMetadata(babylonObject, pointer) {
1782
+ const metadata = (babylonObject.metadata = babylonObject.metadata || {});
1783
+ const gltf = (metadata.gltf = metadata.gltf || {});
1784
+ const pointers = (gltf.pointers = gltf.pointers || []);
1860
1785
  pointers.push(pointer);
1861
- };
1862
- GLTFLoader._GetTextureWrapMode = function (context, mode) {
1786
+ }
1787
+ static _GetTextureWrapMode(context, mode) {
1863
1788
  // Set defaults if undefined
1864
1789
  mode = mode == undefined ? 10497 /* REPEAT */ : mode;
1865
1790
  switch (mode) {
@@ -1870,14 +1795,14 @@ var GLTFLoader = /** @class */ (function () {
1870
1795
  case 10497 /* REPEAT */:
1871
1796
  return Texture.WRAP_ADDRESSMODE;
1872
1797
  default:
1873
- Logger.Warn("".concat(context, ": Invalid value (").concat(mode, ")"));
1798
+ Logger.Warn(`${context}: Invalid value (${mode})`);
1874
1799
  return Texture.WRAP_ADDRESSMODE;
1875
1800
  }
1876
- };
1877
- GLTFLoader._GetTextureSamplingMode = function (context, sampler) {
1801
+ }
1802
+ static _GetTextureSamplingMode(context, sampler) {
1878
1803
  // Set defaults if undefined
1879
- var magFilter = sampler.magFilter == undefined ? 9729 /* LINEAR */ : sampler.magFilter;
1880
- var minFilter = sampler.minFilter == undefined ? 9987 /* LINEAR_MIPMAP_LINEAR */ : sampler.minFilter;
1804
+ const magFilter = sampler.magFilter == undefined ? 9729 /* LINEAR */ : sampler.magFilter;
1805
+ const minFilter = sampler.minFilter == undefined ? 9987 /* LINEAR_MIPMAP_LINEAR */ : sampler.minFilter;
1881
1806
  if (magFilter === 9729 /* LINEAR */) {
1882
1807
  switch (minFilter) {
1883
1808
  case 9728 /* NEAREST */:
@@ -1893,13 +1818,13 @@ var GLTFLoader = /** @class */ (function () {
1893
1818
  case 9987 /* LINEAR_MIPMAP_LINEAR */:
1894
1819
  return Texture.LINEAR_LINEAR_MIPLINEAR;
1895
1820
  default:
1896
- Logger.Warn("".concat(context, "/minFilter: Invalid value (").concat(minFilter, ")"));
1821
+ Logger.Warn(`${context}/minFilter: Invalid value (${minFilter})`);
1897
1822
  return Texture.LINEAR_LINEAR_MIPLINEAR;
1898
1823
  }
1899
1824
  }
1900
1825
  else {
1901
1826
  if (magFilter !== 9728 /* NEAREST */) {
1902
- Logger.Warn("".concat(context, "/magFilter: Invalid value (").concat(magFilter, ")"));
1827
+ Logger.Warn(`${context}/magFilter: Invalid value (${magFilter})`);
1903
1828
  }
1904
1829
  switch (minFilter) {
1905
1830
  case 9728 /* NEAREST */:
@@ -1915,12 +1840,12 @@ var GLTFLoader = /** @class */ (function () {
1915
1840
  case 9987 /* LINEAR_MIPMAP_LINEAR */:
1916
1841
  return Texture.NEAREST_LINEAR_MIPLINEAR;
1917
1842
  default:
1918
- Logger.Warn("".concat(context, "/minFilter: Invalid value (").concat(minFilter, ")"));
1843
+ Logger.Warn(`${context}/minFilter: Invalid value (${minFilter})`);
1919
1844
  return Texture.NEAREST_NEAREST_MIPNEAREST;
1920
1845
  }
1921
1846
  }
1922
- };
1923
- GLTFLoader._GetTypedArrayConstructor = function (context, componentType) {
1847
+ }
1848
+ static _GetTypedArrayConstructor(context, componentType) {
1924
1849
  switch (componentType) {
1925
1850
  case 5120 /* BYTE */:
1926
1851
  return Int8Array;
@@ -1935,22 +1860,22 @@ var GLTFLoader = /** @class */ (function () {
1935
1860
  case 5126 /* FLOAT */:
1936
1861
  return Float32Array;
1937
1862
  default:
1938
- throw new Error("".concat(context, ": Invalid component type ").concat(componentType));
1863
+ throw new Error(`${context}: Invalid component type ${componentType}`);
1939
1864
  }
1940
- };
1941
- GLTFLoader._GetTypedArray = function (context, componentType, bufferView, byteOffset, length) {
1942
- var buffer = bufferView.buffer;
1865
+ }
1866
+ static _GetTypedArray(context, componentType, bufferView, byteOffset, length) {
1867
+ const buffer = bufferView.buffer;
1943
1868
  byteOffset = bufferView.byteOffset + (byteOffset || 0);
1944
- var constructor = GLTFLoader._GetTypedArrayConstructor("".concat(context, "/componentType"), componentType);
1945
- var componentTypeLength = VertexBuffer.GetTypeByteLength(componentType);
1869
+ const constructor = GLTFLoader._GetTypedArrayConstructor(`${context}/componentType`, componentType);
1870
+ const componentTypeLength = VertexBuffer.GetTypeByteLength(componentType);
1946
1871
  if (byteOffset % componentTypeLength !== 0) {
1947
1872
  // HACK: Copy the buffer if byte offset is not a multiple of component type byte length.
1948
- Logger.Warn("".concat(context, ": Copying buffer as byte offset (").concat(byteOffset, ") is not a multiple of component type byte length (").concat(componentTypeLength, ")"));
1873
+ Logger.Warn(`${context}: Copying buffer as byte offset (${byteOffset}) is not a multiple of component type byte length (${componentTypeLength})`);
1949
1874
  return new constructor(buffer.slice(byteOffset, byteOffset + length * componentTypeLength), 0);
1950
1875
  }
1951
1876
  return new constructor(buffer, byteOffset, length);
1952
- };
1953
- GLTFLoader._GetNumComponents = function (context, type) {
1877
+ }
1878
+ static _GetNumComponents(context, type) {
1954
1879
  switch (type) {
1955
1880
  case "SCALAR":
1956
1881
  return 1;
@@ -1967,17 +1892,17 @@ var GLTFLoader = /** @class */ (function () {
1967
1892
  case "MAT4":
1968
1893
  return 16;
1969
1894
  }
1970
- throw new Error("".concat(context, ": Invalid type (").concat(type, ")"));
1971
- };
1972
- GLTFLoader._ValidateUri = function (uri) {
1895
+ throw new Error(`${context}: Invalid type (${type})`);
1896
+ }
1897
+ static _ValidateUri(uri) {
1973
1898
  return Tools.IsBase64(uri) || uri.indexOf("..") === -1;
1974
- };
1899
+ }
1975
1900
  /**
1976
1901
  * @param context
1977
1902
  * @param mode
1978
1903
  * @hidden
1979
1904
  */
1980
- GLTFLoader._GetDrawMode = function (context, mode) {
1905
+ static _GetDrawMode(context, mode) {
1981
1906
  if (mode == undefined) {
1982
1907
  mode = 4 /* TRIANGLES */;
1983
1908
  }
@@ -1997,23 +1922,20 @@ var GLTFLoader = /** @class */ (function () {
1997
1922
  case 6 /* TRIANGLE_FAN */:
1998
1923
  return Material.TriangleFanDrawMode;
1999
1924
  }
2000
- throw new Error("".concat(context, ": Invalid mesh primitive mode (").concat(mode, ")"));
2001
- };
2002
- GLTFLoader.prototype._compileMaterialsAsync = function () {
2003
- var _this = this;
1925
+ throw new Error(`${context}: Invalid mesh primitive mode (${mode})`);
1926
+ }
1927
+ _compileMaterialsAsync() {
2004
1928
  this._parent._startPerformanceCounter("Compile materials");
2005
- var promises = new Array();
1929
+ const promises = new Array();
2006
1930
  if (this._gltf.materials) {
2007
- for (var _i = 0, _a = this._gltf.materials; _i < _a.length; _i++) {
2008
- var material = _a[_i];
1931
+ for (const material of this._gltf.materials) {
2009
1932
  if (material._data) {
2010
- for (var babylonDrawMode in material._data) {
2011
- var babylonData = material._data[babylonDrawMode];
2012
- for (var _b = 0, _c = babylonData.babylonMeshes; _b < _c.length; _b++) {
2013
- var babylonMesh = _c[_b];
1933
+ for (const babylonDrawMode in material._data) {
1934
+ const babylonData = material._data[babylonDrawMode];
1935
+ for (const babylonMesh of babylonData.babylonMeshes) {
2014
1936
  // Ensure nonUniformScaling is set if necessary.
2015
1937
  babylonMesh.computeWorldMatrix(true);
2016
- var babylonMaterial = babylonData.babylonMaterial;
1938
+ const babylonMaterial = babylonData.babylonMaterial;
2017
1939
  promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
2018
1940
  promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { useInstances: true }));
2019
1941
  if (this._parent.useClipPlane) {
@@ -2025,46 +1947,42 @@ var GLTFLoader = /** @class */ (function () {
2025
1947
  }
2026
1948
  }
2027
1949
  }
2028
- return Promise.all(promises).then(function () {
2029
- _this._parent._endPerformanceCounter("Compile materials");
1950
+ return Promise.all(promises).then(() => {
1951
+ this._parent._endPerformanceCounter("Compile materials");
2030
1952
  });
2031
- };
2032
- GLTFLoader.prototype._compileShadowGeneratorsAsync = function () {
2033
- var _this = this;
1953
+ }
1954
+ _compileShadowGeneratorsAsync() {
2034
1955
  this._parent._startPerformanceCounter("Compile shadow generators");
2035
- var promises = new Array();
2036
- var lights = this._babylonScene.lights;
2037
- for (var _i = 0, lights_1 = lights; _i < lights_1.length; _i++) {
2038
- var light = lights_1[_i];
2039
- var generator = light.getShadowGenerator();
1956
+ const promises = new Array();
1957
+ const lights = this._babylonScene.lights;
1958
+ for (const light of lights) {
1959
+ const generator = light.getShadowGenerator();
2040
1960
  if (generator) {
2041
1961
  promises.push(generator.forceCompilationAsync());
2042
1962
  }
2043
1963
  }
2044
- return Promise.all(promises).then(function () {
2045
- _this._parent._endPerformanceCounter("Compile shadow generators");
1964
+ return Promise.all(promises).then(() => {
1965
+ this._parent._endPerformanceCounter("Compile shadow generators");
2046
1966
  });
2047
- };
2048
- GLTFLoader.prototype._forEachExtensions = function (action) {
2049
- for (var _i = 0, _a = this._extensions; _i < _a.length; _i++) {
2050
- var extension = _a[_i];
1967
+ }
1968
+ _forEachExtensions(action) {
1969
+ for (const extension of this._extensions) {
2051
1970
  if (extension.enabled) {
2052
1971
  action(extension);
2053
1972
  }
2054
1973
  }
2055
- };
2056
- GLTFLoader.prototype._applyExtensions = function (property, functionName, actionAsync) {
2057
- for (var _i = 0, _a = this._extensions; _i < _a.length; _i++) {
2058
- var extension = _a[_i];
1974
+ }
1975
+ _applyExtensions(property, functionName, actionAsync) {
1976
+ for (const extension of this._extensions) {
2059
1977
  if (extension.enabled) {
2060
- var id = "".concat(extension.name, ".").concat(functionName);
2061
- var loaderProperty = property;
1978
+ const id = `${extension.name}.${functionName}`;
1979
+ const loaderProperty = property;
2062
1980
  loaderProperty._activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions || {};
2063
- var activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions;
1981
+ const activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions;
2064
1982
  if (!activeLoaderExtensionFunctions[id]) {
2065
1983
  activeLoaderExtensionFunctions[id] = true;
2066
1984
  try {
2067
- var result = actionAsync(extension);
1985
+ const result = actionAsync(extension);
2068
1986
  if (result) {
2069
1987
  return result;
2070
1988
  }
@@ -2076,58 +1994,58 @@ var GLTFLoader = /** @class */ (function () {
2076
1994
  }
2077
1995
  }
2078
1996
  return null;
2079
- };
2080
- GLTFLoader.prototype._extensionsOnLoading = function () {
2081
- this._forEachExtensions(function (extension) { return extension.onLoading && extension.onLoading(); });
2082
- };
2083
- GLTFLoader.prototype._extensionsOnReady = function () {
2084
- this._forEachExtensions(function (extension) { return extension.onReady && extension.onReady(); });
2085
- };
2086
- GLTFLoader.prototype._extensionsLoadSceneAsync = function (context, scene) {
2087
- return this._applyExtensions(scene, "loadScene", function (extension) { return extension.loadSceneAsync && extension.loadSceneAsync(context, scene); });
2088
- };
2089
- GLTFLoader.prototype._extensionsLoadNodeAsync = function (context, node, assign) {
2090
- return this._applyExtensions(node, "loadNode", function (extension) { return extension.loadNodeAsync && extension.loadNodeAsync(context, node, assign); });
2091
- };
2092
- GLTFLoader.prototype._extensionsLoadCameraAsync = function (context, camera, assign) {
2093
- return this._applyExtensions(camera, "loadCamera", function (extension) { return extension.loadCameraAsync && extension.loadCameraAsync(context, camera, assign); });
2094
- };
2095
- GLTFLoader.prototype._extensionsLoadVertexDataAsync = function (context, primitive, babylonMesh) {
2096
- return this._applyExtensions(primitive, "loadVertexData", function (extension) { return extension._loadVertexDataAsync && extension._loadVertexDataAsync(context, primitive, babylonMesh); });
2097
- };
2098
- GLTFLoader.prototype._extensionsLoadMeshPrimitiveAsync = function (context, name, node, mesh, primitive, assign) {
2099
- return this._applyExtensions(primitive, "loadMeshPrimitive", function (extension) { return extension._loadMeshPrimitiveAsync && extension._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign); });
2100
- };
2101
- GLTFLoader.prototype._extensionsLoadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
2102
- return this._applyExtensions(material, "loadMaterial", function (extension) { return extension._loadMaterialAsync && extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign); });
2103
- };
2104
- GLTFLoader.prototype._extensionsCreateMaterial = function (context, material, babylonDrawMode) {
2105
- return this._applyExtensions(material, "createMaterial", function (extension) { return extension.createMaterial && extension.createMaterial(context, material, babylonDrawMode); });
2106
- };
2107
- GLTFLoader.prototype._extensionsLoadMaterialPropertiesAsync = function (context, material, babylonMaterial) {
2108
- return this._applyExtensions(material, "loadMaterialProperties", function (extension) { return extension.loadMaterialPropertiesAsync && extension.loadMaterialPropertiesAsync(context, material, babylonMaterial); });
2109
- };
2110
- GLTFLoader.prototype._extensionsLoadTextureInfoAsync = function (context, textureInfo, assign) {
2111
- return this._applyExtensions(textureInfo, "loadTextureInfo", function (extension) { return extension.loadTextureInfoAsync && extension.loadTextureInfoAsync(context, textureInfo, assign); });
2112
- };
2113
- GLTFLoader.prototype._extensionsLoadTextureAsync = function (context, texture, assign) {
2114
- return this._applyExtensions(texture, "loadTexture", function (extension) { return extension._loadTextureAsync && extension._loadTextureAsync(context, texture, assign); });
2115
- };
2116
- GLTFLoader.prototype._extensionsLoadAnimationAsync = function (context, animation) {
2117
- return this._applyExtensions(animation, "loadAnimation", function (extension) { return extension.loadAnimationAsync && extension.loadAnimationAsync(context, animation); });
2118
- };
2119
- GLTFLoader.prototype._extensionsLoadSkinAsync = function (context, node, skin) {
2120
- return this._applyExtensions(skin, "loadSkin", function (extension) { return extension._loadSkinAsync && extension._loadSkinAsync(context, node, skin); });
2121
- };
2122
- GLTFLoader.prototype._extensionsLoadUriAsync = function (context, property, uri) {
2123
- return this._applyExtensions(property, "loadUri", function (extension) { return extension._loadUriAsync && extension._loadUriAsync(context, property, uri); });
2124
- };
2125
- GLTFLoader.prototype._extensionsLoadBufferViewAsync = function (context, bufferView) {
2126
- return this._applyExtensions(bufferView, "loadBufferView", function (extension) { return extension.loadBufferViewAsync && extension.loadBufferViewAsync(context, bufferView); });
2127
- };
2128
- GLTFLoader.prototype._extensionsLoadBufferAsync = function (context, buffer, byteOffset, byteLength) {
2129
- return this._applyExtensions(buffer, "loadBuffer", function (extension) { return extension.loadBufferAsync && extension.loadBufferAsync(context, buffer, byteOffset, byteLength); });
2130
- };
1997
+ }
1998
+ _extensionsOnLoading() {
1999
+ this._forEachExtensions((extension) => extension.onLoading && extension.onLoading());
2000
+ }
2001
+ _extensionsOnReady() {
2002
+ this._forEachExtensions((extension) => extension.onReady && extension.onReady());
2003
+ }
2004
+ _extensionsLoadSceneAsync(context, scene) {
2005
+ return this._applyExtensions(scene, "loadScene", (extension) => extension.loadSceneAsync && extension.loadSceneAsync(context, scene));
2006
+ }
2007
+ _extensionsLoadNodeAsync(context, node, assign) {
2008
+ return this._applyExtensions(node, "loadNode", (extension) => extension.loadNodeAsync && extension.loadNodeAsync(context, node, assign));
2009
+ }
2010
+ _extensionsLoadCameraAsync(context, camera, assign) {
2011
+ return this._applyExtensions(camera, "loadCamera", (extension) => extension.loadCameraAsync && extension.loadCameraAsync(context, camera, assign));
2012
+ }
2013
+ _extensionsLoadVertexDataAsync(context, primitive, babylonMesh) {
2014
+ return this._applyExtensions(primitive, "loadVertexData", (extension) => extension._loadVertexDataAsync && extension._loadVertexDataAsync(context, primitive, babylonMesh));
2015
+ }
2016
+ _extensionsLoadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign) {
2017
+ return this._applyExtensions(primitive, "loadMeshPrimitive", (extension) => extension._loadMeshPrimitiveAsync && extension._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign));
2018
+ }
2019
+ _extensionsLoadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign) {
2020
+ return this._applyExtensions(material, "loadMaterial", (extension) => extension._loadMaterialAsync && extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign));
2021
+ }
2022
+ _extensionsCreateMaterial(context, material, babylonDrawMode) {
2023
+ return this._applyExtensions(material, "createMaterial", (extension) => extension.createMaterial && extension.createMaterial(context, material, babylonDrawMode));
2024
+ }
2025
+ _extensionsLoadMaterialPropertiesAsync(context, material, babylonMaterial) {
2026
+ return this._applyExtensions(material, "loadMaterialProperties", (extension) => extension.loadMaterialPropertiesAsync && extension.loadMaterialPropertiesAsync(context, material, babylonMaterial));
2027
+ }
2028
+ _extensionsLoadTextureInfoAsync(context, textureInfo, assign) {
2029
+ return this._applyExtensions(textureInfo, "loadTextureInfo", (extension) => extension.loadTextureInfoAsync && extension.loadTextureInfoAsync(context, textureInfo, assign));
2030
+ }
2031
+ _extensionsLoadTextureAsync(context, texture, assign) {
2032
+ return this._applyExtensions(texture, "loadTexture", (extension) => extension._loadTextureAsync && extension._loadTextureAsync(context, texture, assign));
2033
+ }
2034
+ _extensionsLoadAnimationAsync(context, animation) {
2035
+ return this._applyExtensions(animation, "loadAnimation", (extension) => extension.loadAnimationAsync && extension.loadAnimationAsync(context, animation));
2036
+ }
2037
+ _extensionsLoadSkinAsync(context, node, skin) {
2038
+ return this._applyExtensions(skin, "loadSkin", (extension) => extension._loadSkinAsync && extension._loadSkinAsync(context, node, skin));
2039
+ }
2040
+ _extensionsLoadUriAsync(context, property, uri) {
2041
+ return this._applyExtensions(property, "loadUri", (extension) => extension._loadUriAsync && extension._loadUriAsync(context, property, uri));
2042
+ }
2043
+ _extensionsLoadBufferViewAsync(context, bufferView) {
2044
+ return this._applyExtensions(bufferView, "loadBufferView", (extension) => extension.loadBufferViewAsync && extension.loadBufferViewAsync(context, bufferView));
2045
+ }
2046
+ _extensionsLoadBufferAsync(context, buffer, byteOffset, byteLength) {
2047
+ return this._applyExtensions(buffer, "loadBuffer", (extension) => extension.loadBufferAsync && extension.loadBufferAsync(context, buffer, byteOffset, byteLength));
2048
+ }
2131
2049
  /**
2132
2050
  * Helper method called by a loader extension to load an glTF extension.
2133
2051
  * @param context The context when loading the asset
@@ -2136,17 +2054,17 @@ var GLTFLoader = /** @class */ (function () {
2136
2054
  * @param actionAsync The action to run
2137
2055
  * @returns The promise returned by actionAsync or null if the extension does not exist
2138
2056
  */
2139
- GLTFLoader.LoadExtensionAsync = function (context, property, extensionName, actionAsync) {
2057
+ static LoadExtensionAsync(context, property, extensionName, actionAsync) {
2140
2058
  if (!property.extensions) {
2141
2059
  return null;
2142
2060
  }
2143
- var extensions = property.extensions;
2144
- var extension = extensions[extensionName];
2061
+ const extensions = property.extensions;
2062
+ const extension = extensions[extensionName];
2145
2063
  if (!extension) {
2146
2064
  return null;
2147
2065
  }
2148
- return actionAsync("".concat(context, "/extensions/").concat(extensionName), extension);
2149
- };
2066
+ return actionAsync(`${context}/extensions/${extensionName}`, extension);
2067
+ }
2150
2068
  /**
2151
2069
  * Helper method called by a loader extension to load a glTF extra.
2152
2070
  * @param context The context when loading the asset
@@ -2155,70 +2073,68 @@ var GLTFLoader = /** @class */ (function () {
2155
2073
  * @param actionAsync The action to run
2156
2074
  * @returns The promise returned by actionAsync or null if the extra does not exist
2157
2075
  */
2158
- GLTFLoader.LoadExtraAsync = function (context, property, extensionName, actionAsync) {
2076
+ static LoadExtraAsync(context, property, extensionName, actionAsync) {
2159
2077
  if (!property.extras) {
2160
2078
  return null;
2161
2079
  }
2162
- var extras = property.extras;
2163
- var extra = extras[extensionName];
2080
+ const extras = property.extras;
2081
+ const extra = extras[extensionName];
2164
2082
  if (!extra) {
2165
2083
  return null;
2166
2084
  }
2167
- return actionAsync("".concat(context, "/extras/").concat(extensionName), extra);
2168
- };
2085
+ return actionAsync(`${context}/extras/${extensionName}`, extra);
2086
+ }
2169
2087
  /**
2170
2088
  * Checks for presence of an extension.
2171
2089
  * @param name The name of the extension to check
2172
2090
  * @returns A boolean indicating the presence of the given extension name in `extensionsUsed`
2173
2091
  */
2174
- GLTFLoader.prototype.isExtensionUsed = function (name) {
2092
+ isExtensionUsed(name) {
2175
2093
  return !!this._gltf.extensionsUsed && this._gltf.extensionsUsed.indexOf(name) !== -1;
2176
- };
2094
+ }
2177
2095
  /**
2178
2096
  * Increments the indentation level and logs a message.
2179
2097
  * @param message The message to log
2180
2098
  */
2181
- GLTFLoader.prototype.logOpen = function (message) {
2099
+ logOpen(message) {
2182
2100
  this._parent._logOpen(message);
2183
- };
2101
+ }
2184
2102
  /**
2185
2103
  * Decrements the indentation level.
2186
2104
  */
2187
- GLTFLoader.prototype.logClose = function () {
2105
+ logClose() {
2188
2106
  this._parent._logClose();
2189
- };
2107
+ }
2190
2108
  /**
2191
2109
  * Logs a message
2192
2110
  * @param message The message to log
2193
2111
  */
2194
- GLTFLoader.prototype.log = function (message) {
2112
+ log(message) {
2195
2113
  this._parent._log(message);
2196
- };
2114
+ }
2197
2115
  /**
2198
2116
  * Starts a performance counter.
2199
2117
  * @param counterName The name of the performance counter
2200
2118
  */
2201
- GLTFLoader.prototype.startPerformanceCounter = function (counterName) {
2119
+ startPerformanceCounter(counterName) {
2202
2120
  this._parent._startPerformanceCounter(counterName);
2203
- };
2121
+ }
2204
2122
  /**
2205
2123
  * Ends a performance counter.
2206
2124
  * @param counterName The name of the performance counter
2207
2125
  */
2208
- GLTFLoader.prototype.endPerformanceCounter = function (counterName) {
2126
+ endPerformanceCounter(counterName) {
2209
2127
  this._parent._endPerformanceCounter(counterName);
2210
- };
2211
- /** @hidden */
2212
- // note : KHR_animation_pointer is used to load animation in ALL case, turning everything
2213
- // into pointer. This is the reason why this value is located here.
2214
- GLTFLoader._KHRAnimationPointerName = "KHR_animation_pointer";
2215
- GLTFLoader._RegisteredExtensions = {};
2216
- /**
2217
- * The default glTF sampler.
2218
- */
2219
- GLTFLoader.DefaultSampler = { index: -1 };
2220
- return GLTFLoader;
2221
- }());
2222
- export { GLTFLoader };
2223
- GLTFFileLoader._CreateGLTF2Loader = function (parent) { return new GLTFLoader(parent); };
2128
+ }
2129
+ }
2130
+ /** @hidden */
2131
+ // note : KHR_animation_pointer is used to load animation in ALL case, turning everything
2132
+ // into pointer. This is the reason why this value is located here.
2133
+ GLTFLoader._KHRAnimationPointerName = "KHR_animation_pointer";
2134
+ GLTFLoader._RegisteredExtensions = {};
2135
+ /**
2136
+ * The default glTF sampler.
2137
+ */
2138
+ GLTFLoader.DefaultSampler = { index: -1 };
2139
+ GLTFFileLoader._CreateGLTF2Loader = (parent) => new GLTFLoader(parent);
2224
2140
  //# sourceMappingURL=glTFLoader.js.map