@galacean/engine-loader 1.1.0-beta.2 → 1.1.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -120,116 +120,116 @@ var BufferReader = /*#__PURE__*/ function() {
120
120
  this.data = data;
121
121
  this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength != null ? byteLength : data.byteLength - byteOffset);
122
122
  this._littleEndian = littleEndian;
123
- this._offset = 0;
123
+ this._position = 0;
124
124
  this._baseOffset = byteOffset;
125
125
  }
126
126
  var _proto = BufferReader.prototype;
127
127
  _proto.nextUint8 = function nextUint8() {
128
- var value = this._dataView.getUint8(this._offset);
129
- this._offset += 1;
128
+ var value = this._dataView.getUint8(this._position);
129
+ this._position += 1;
130
130
  return value;
131
131
  };
132
132
  _proto.nextUint16 = function nextUint16() {
133
- var value = this._dataView.getUint16(this._offset, this._littleEndian);
134
- this._offset += 2;
133
+ var value = this._dataView.getUint16(this._position, this._littleEndian);
134
+ this._position += 2;
135
135
  return value;
136
136
  };
137
137
  _proto.nextUint32 = function nextUint32() {
138
- var value = this._dataView.getUint32(this._offset, this._littleEndian);
139
- this._offset += 4;
138
+ var value = this._dataView.getUint32(this._position, this._littleEndian);
139
+ this._position += 4;
140
140
  return value;
141
141
  };
142
142
  _proto.nextInt32 = function nextInt32() {
143
- var value = this._dataView.getInt32(this._offset, this._littleEndian);
144
- this._offset += 4;
143
+ var value = this._dataView.getInt32(this._position, this._littleEndian);
144
+ this._position += 4;
145
145
  return value;
146
146
  };
147
147
  _proto.nextInt32Array = function nextInt32Array(len) {
148
- var value = new Int32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
149
- this._offset += 4 * len;
148
+ var value = new Int32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
149
+ this._position += 4 * len;
150
150
  return value;
151
151
  };
152
152
  _proto.nextFloat32 = function nextFloat32() {
153
- var value = this._dataView.getFloat32(this._offset, this._littleEndian);
154
- this._offset += 4;
153
+ var value = this._dataView.getFloat32(this._position, this._littleEndian);
154
+ this._position += 4;
155
155
  return value;
156
156
  };
157
157
  _proto.nextFloat32Array = function nextFloat32Array(len) {
158
- var value = new Float32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
159
- this._offset += 4 * len;
158
+ var value = new Float32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
159
+ this._position += 4 * len;
160
160
  return value;
161
161
  };
162
162
  _proto.nextUint32Array = function nextUint32Array(len) {
163
- var value = new Uint32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
164
- this._offset += 4 * len;
163
+ var value = new Uint32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
164
+ this._position += 4 * len;
165
165
  return value;
166
166
  };
167
167
  _proto.nextUint8Array = function nextUint8Array(len) {
168
- var value = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
169
- this._offset += len;
168
+ var value = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
169
+ this._position += len;
170
170
  return value;
171
171
  };
172
172
  _proto.nextUint64 = function nextUint64() {
173
- var left = this._dataView.getUint32(this._offset, this._littleEndian);
174
- var right = this._dataView.getUint32(this._offset + 4, this._littleEndian);
173
+ var left = this._dataView.getUint32(this._position, this._littleEndian);
174
+ var right = this._dataView.getUint32(this._position + 4, this._littleEndian);
175
175
  var value = left + Math.pow(2, 32) * right;
176
- this._offset += 8;
176
+ this._position += 8;
177
177
  return value;
178
178
  };
179
179
  _proto.nextStr = function nextStr() {
180
180
  var strByteLength = this.nextUint16();
181
- var uint8Array = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, strByteLength);
182
- this._offset += strByteLength;
181
+ var uint8Array = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, strByteLength);
182
+ this._position += strByteLength;
183
183
  return engineCore.Utils.decodeText(uint8Array);
184
184
  };
185
185
  /**
186
186
  * image data 放在最后
187
187
  */ _proto.nextImageData = function nextImageData(count) {
188
- return new Uint8Array(this.data.buffer, this.data.byteOffset + this._offset);
188
+ return new Uint8Array(this.data.buffer, this.data.byteOffset + this._position);
189
189
  };
190
190
  _proto.nextImagesData = function nextImagesData(count) {
191
191
  var imagesLen = new Array(count);
192
192
  // Start offset of Uint32Array should be a multiple of 4. ref: https://stackoverflow.com/questions/15417310/why-typed-array-constructors-require-offset-to-be-multiple-of-underlying-type-si
193
193
  for(var i = 0; i < count; i++){
194
- var len = this._dataView.getUint32(this._offset, this._littleEndian);
194
+ var len = this._dataView.getUint32(this._position, this._littleEndian);
195
195
  imagesLen[i] = len;
196
- this._offset += 4;
196
+ this._position += 4;
197
197
  }
198
198
  var imagesData = [];
199
199
  for(var i1 = 0; i1 < count; i1++){
200
200
  var len1 = imagesLen[i1];
201
- var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._offset, len1);
202
- this._offset += len1;
201
+ var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._position, len1);
202
+ this._position += len1;
203
203
  imagesData.push(buffer);
204
204
  }
205
205
  return imagesData;
206
206
  };
207
207
  _proto.skip = function skip(bytes) {
208
- this._offset += bytes;
208
+ this._position += bytes;
209
209
  return this;
210
210
  };
211
211
  _proto.scan = function scan(maxByteLength, term) {
212
212
  if (term === void 0) term = 0x00;
213
- var byteOffset = this._offset;
213
+ var byteOffset = this._position;
214
214
  var byteLength = 0;
215
- while(this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength){
215
+ while(this._dataView.getUint8(this._position) !== term && byteLength < maxByteLength){
216
216
  byteLength++;
217
- this._offset++;
217
+ this._position++;
218
218
  }
219
- if (byteLength < maxByteLength) this._offset++;
219
+ if (byteLength < maxByteLength) this._position++;
220
220
  return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
221
221
  };
222
222
  _create_class(BufferReader, [
223
223
  {
224
224
  key: "position",
225
225
  get: function get() {
226
- return this._offset;
226
+ return this._position;
227
227
  }
228
228
  },
229
229
  {
230
230
  key: "offset",
231
231
  get: function get() {
232
- return this._offset + this._baseOffset;
232
+ return this._position + this._baseOffset;
233
233
  }
234
234
  }
235
235
  ]);
@@ -293,75 +293,74 @@ exports.MeshDecoder = /*#__PURE__*/ function() {
293
293
  var encodedMeshData = JSON.parse(jsonDataString);
294
294
  // @ts-ignore Vector3 is not compatible with {x: number, y: number, z: number}.
295
295
  encodedMeshData.bounds && modelMesh.bounds.copyFrom(encodedMeshData.bounds);
296
- var offset = Math.ceil(bufferReader.offset / 4) * 4;
296
+ var offset = Math.ceil(bufferReader.offset / 4) * 4 + bufferReader.data.byteOffset;
297
297
  var buffer = bufferReader.data.buffer;
298
- var byteOffset = bufferReader.data.byteOffset;
299
- var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset + byteOffset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
298
+ var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
300
299
  var vertexCount = float32Array.length / 3;
301
300
  var positions = float32ArrayToVector3(float32Array, vertexCount);
302
301
  modelMesh.setPositions(positions);
303
302
  if (encodedMeshData.normals) {
304
- var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset + byteOffset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
303
+ var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
305
304
  var normals = float32ArrayToVector3(float32Array1, vertexCount);
306
305
  modelMesh.setNormals(normals);
307
306
  }
308
307
  if (encodedMeshData.uvs) {
309
- var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset + byteOffset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
308
+ var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
310
309
  modelMesh.setUVs(float32ArrayToVector2(float32Array2, vertexCount));
311
310
  }
312
311
  if (encodedMeshData.uv1) {
313
- var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset + byteOffset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
312
+ var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
314
313
  modelMesh.setUVs(float32ArrayToVector2(float32Array3, vertexCount), 1);
315
314
  }
316
315
  if (encodedMeshData.uv2) {
317
- var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset + byteOffset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
316
+ var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
318
317
  modelMesh.setUVs(float32ArrayToVector2(float32Array4, vertexCount), 2);
319
318
  }
320
319
  if (encodedMeshData.uv3) {
321
- var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset + byteOffset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
320
+ var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
322
321
  modelMesh.setUVs(float32ArrayToVector2(float32Array5, vertexCount), 3);
323
322
  }
324
323
  if (encodedMeshData.uv4) {
325
- var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset + byteOffset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
324
+ var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
326
325
  modelMesh.setUVs(float32ArrayToVector2(float32Array6, vertexCount), 4);
327
326
  }
328
327
  if (encodedMeshData.uv5) {
329
- var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset + byteOffset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
328
+ var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
330
329
  modelMesh.setUVs(float32ArrayToVector2(float32Array7, vertexCount), 5);
331
330
  }
332
331
  if (encodedMeshData.uv6) {
333
- var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset + byteOffset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
332
+ var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
334
333
  modelMesh.setUVs(float32ArrayToVector2(float32Array8, vertexCount), 6);
335
334
  }
336
335
  if (encodedMeshData.uv7) {
337
- var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset + byteOffset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
336
+ var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
338
337
  modelMesh.setUVs(float32ArrayToVector2(float32Array9, vertexCount), 7);
339
338
  }
340
339
  if (encodedMeshData.colors) {
341
- var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset + byteOffset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
340
+ var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
342
341
  modelMesh.setColors(float32ArrayToVColor(float32Array10, vertexCount));
343
342
  }
344
343
  if (encodedMeshData.boneWeights) {
345
- var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset + byteOffset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
344
+ var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
346
345
  modelMesh.setBoneWeights(float32ArrayToVector4(float32Array11, vertexCount));
347
346
  }
348
347
  if (encodedMeshData.boneIndices) {
349
- var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset + byteOffset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
348
+ var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
350
349
  modelMesh.setBoneIndices(float32ArrayToVector4(float32Array12, vertexCount));
351
350
  }
352
351
  if (encodedMeshData.blendShapes) {
353
352
  encodedMeshData.blendShapes.forEach(function(blendShapeData) {
354
353
  var blendShape = new engineCore.BlendShape(blendShapeData.name);
355
354
  blendShapeData.frames.forEach(function(frameData) {
356
- var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset + byteOffset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
355
+ var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
357
356
  var count = positionArray.length / 3;
358
357
  var deltaPosition = float32ArrayToVector3(positionArray, count);
359
358
  if (frameData.deltaNormals) {
360
- var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset + byteOffset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
359
+ var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
361
360
  float32ArrayToVector3(normalsArray, count);
362
361
  }
363
362
  if (frameData.deltaTangents) {
364
- var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset + byteOffset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
363
+ var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
365
364
  float32ArrayToVector4(tangentsArray, count);
366
365
  }
367
366
  blendShape.addFrame(frameData.weight, deltaPosition);
@@ -372,9 +371,9 @@ exports.MeshDecoder = /*#__PURE__*/ function() {
372
371
  if (encodedMeshData.indices) {
373
372
  var indices = null;
374
373
  if (encodedMeshData.indices.type === 0) {
375
- indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
374
+ indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
376
375
  } else {
377
- indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
376
+ indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
378
377
  }
379
378
  modelMesh.setIndices(indices);
380
379
  }
@@ -527,12 +526,12 @@ function _construct(Parent, args, Class) {
527
526
  }
528
527
 
529
528
  var ReflectionParser = /*#__PURE__*/ function() {
530
- function ReflectionParser() {}
531
- ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
532
- this.customParseComponentHandles[componentType] = handle;
533
- };
534
- ReflectionParser.parseEntity = function parseEntity(entityConfig, engine) {
535
- return ReflectionParser.getEntityByConfig(entityConfig, engine).then(function(entity) {
529
+ function ReflectionParser(_context) {
530
+ this._context = _context;
531
+ }
532
+ var _proto = ReflectionParser.prototype;
533
+ _proto.parseEntity = function parseEntity(entityConfig) {
534
+ return this._getEntityByConfig(entityConfig).then(function(entity) {
536
535
  var _entityConfig_isActive;
537
536
  entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : true;
538
537
  var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
@@ -542,72 +541,33 @@ var ReflectionParser = /*#__PURE__*/ function() {
542
541
  return entity;
543
542
  });
544
543
  };
545
- ReflectionParser.getEntityByConfig = function getEntityByConfig(entityConfig, engine) {
546
- // @ts-ignore
547
- var assetRefId = entityConfig.assetRefId;
548
- if (assetRefId) {
549
- return engine.resourceManager// @ts-ignore
550
- .getResourceByRef({
551
- refId: assetRefId,
552
- key: entityConfig.key,
553
- isClone: entityConfig.isClone
554
- }).then(function(entity) {
555
- entity.name = entityConfig.name;
556
- return entity;
557
- });
558
- } else {
559
- var entity = new engineCore.Entity(engine, entityConfig.name);
560
- return Promise.resolve(entity);
561
- }
562
- };
563
- ReflectionParser.parseClassObject = function parseClassObject(item, engine, resourceManager) {
564
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
544
+ _proto.parseClassObject = function parseClassObject(item) {
545
+ var _this = this;
565
546
  var Class = engineCore.Loader.getClass(item.class);
566
547
  var _item_constructParams;
567
548
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
568
- var instance = _construct(Class, [].concat(params));
569
- return this.parsePropsAndMethods(instance, item, engine, resourceManager);
570
- };
571
- ReflectionParser.parseBasicType = function parseBasicType(value, engine, resourceManager) {
572
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
573
- var _this = this;
574
- if (Array.isArray(value)) {
575
- return Promise.all(value.map(function(item) {
576
- return _this.parseBasicType(item, engine, resourceManager);
577
- }));
578
- } else if (typeof value === "object" && value != null) {
579
- if (this._isClass(value)) {
580
- // class object
581
- return this.parseClassObject(value, engine, resourceManager);
582
- } else if (this._isRef(value)) {
583
- // reference object
584
- return resourceManager.getResourceByRef(value);
585
- } else {
586
- // basic type
587
- return Promise.resolve(value);
588
- }
589
- } else {
590
- return Promise.resolve(value);
591
- }
549
+ return Promise.all(params.map(function(param) {
550
+ return _this.parseBasicType(param);
551
+ })).then(function(resultParams) {
552
+ return _construct(Class, [].concat(resultParams));
553
+ }).then(function(instance) {
554
+ return _this.parsePropsAndMethods(instance, item);
555
+ });
592
556
  };
593
- ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
594
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
595
- var _this = this;
557
+ _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
596
558
  var promises = [];
597
559
  if (item.methods) {
598
560
  for(var methodName in item.methods){
599
561
  var methodParams = item.methods[methodName];
600
562
  for(var i = 0, count = methodParams.length; i < count; i++){
601
- var params = methodParams[i];
602
- var promise = this.parseMethod(instance, methodName, params, engine, resourceManager);
603
- promises.push(promise);
563
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
604
564
  }
605
565
  }
606
566
  }
607
567
  if (item.props) {
608
- var _this1 = this, _loop = function(key) {
568
+ var _this = this, _loop = function(key) {
609
569
  var value = item.props[key];
610
- var promise = _this1.parseBasicType(value, engine).then(function(v) {
570
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
611
571
  return instance[key] = v;
612
572
  });
613
573
  promises.push(promise);
@@ -615,27 +575,96 @@ var ReflectionParser = /*#__PURE__*/ function() {
615
575
  for(var key in item.props)_loop(key);
616
576
  }
617
577
  return Promise.all(promises).then(function() {
618
- var handle = _this.customParseComponentHandles[instance.constructor.name];
619
- if (handle) return handle(instance, item, engine);
578
+ var handle = ReflectionParser.customParseComponentHandles[instance.constructor.name];
579
+ if (handle) return handle(instance, item);
620
580
  else return instance;
621
581
  });
622
582
  };
623
- ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
624
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
583
+ _proto.parseMethod = function parseMethod(instance, methodName, methodParams) {
625
584
  var _this = this;
626
585
  return Promise.all(methodParams.map(function(param) {
627
- return _this.parseBasicType(param, engine, resourceManager);
586
+ return _this.parseBasicType(param);
628
587
  })).then(function(result) {
629
588
  var _instance;
630
589
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
631
590
  });
632
591
  };
592
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
593
+ var _this = this;
594
+ if (Array.isArray(value)) {
595
+ return Promise.all(value.map(function(item) {
596
+ return _this.parseBasicType(item);
597
+ }));
598
+ } else if (typeof value === "object" && value != null) {
599
+ if (ReflectionParser._isClass(value)) {
600
+ // class object
601
+ return this.parseClassObject(value);
602
+ } else if (ReflectionParser._isAssetRef(value)) {
603
+ // reference object
604
+ // @ts-ignore
605
+ return this._context.resourceManager.getResourceByRef(value);
606
+ } else if (ReflectionParser._isEntityRef(value)) {
607
+ // entity reference
608
+ return Promise.resolve(this._context.entityMap.get(value.entityId));
609
+ } else if (originValue) {
610
+ var _this1 = this, _loop = function(key) {
611
+ if (key === "methods") {
612
+ var methods = value[key];
613
+ for(var methodName in methods){
614
+ var methodParams = methods[methodName];
615
+ for(var i = 0, count = methodParams.length; i < count; i++){
616
+ var params = methodParams[i];
617
+ var promise = _this1.parseMethod(originValue, methodName, params);
618
+ promises.push(promise);
619
+ }
620
+ }
621
+ } else {
622
+ promises.push(_this1.parseBasicType(value[key], originValue[key]).then(function(v) {
623
+ return originValue[key] = v;
624
+ }));
625
+ }
626
+ };
627
+ var promises = [];
628
+ for(var key in value)_loop(key);
629
+ return Promise.all(promises).then(function() {
630
+ return originValue;
631
+ });
632
+ }
633
+ }
634
+ // primitive type
635
+ return Promise.resolve(value);
636
+ };
637
+ _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
638
+ // @ts-ignore
639
+ var assetRefId = entityConfig.assetRefId;
640
+ var engine = this._context.engine;
641
+ if (assetRefId) {
642
+ return engine.resourceManager// @ts-ignore
643
+ .getResourceByRef({
644
+ refId: assetRefId,
645
+ key: entityConfig.key,
646
+ isClone: entityConfig.isClone
647
+ }).then(function(entity) {
648
+ entity.name = entityConfig.name;
649
+ return entity;
650
+ });
651
+ } else {
652
+ var entity = new engineCore.Entity(engine, entityConfig.name);
653
+ return Promise.resolve(entity);
654
+ }
655
+ };
656
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
657
+ this.customParseComponentHandles[componentType] = handle;
658
+ };
633
659
  ReflectionParser._isClass = function _isClass(value) {
634
660
  return value["class"] != undefined;
635
661
  };
636
- ReflectionParser._isRef = function _isRef(value) {
662
+ ReflectionParser._isAssetRef = function _isAssetRef(value) {
637
663
  return value["refId"] != undefined;
638
664
  };
665
+ ReflectionParser._isEntityRef = function _isEntityRef(value) {
666
+ return value["entityId"] != undefined;
667
+ };
639
668
  return ReflectionParser;
640
669
  }();
641
670
  (function() {
@@ -903,6 +932,8 @@ var SceneParserContext = /*#__PURE__*/ function() {
903
932
  this.assets = new Map();
904
933
  this.entityConfigMap = new Map();
905
934
  this.rootIds = [];
935
+ this.engine = scene.engine;
936
+ this.resourceManager = scene.engine.resourceManager;
906
937
  }
907
938
  var _proto = SceneParserContext.prototype;
908
939
  _proto.destroy = function destroy() {
@@ -919,7 +950,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
919
950
  function SceneParser(context) {
920
951
  var _this = this;
921
952
  this.context = context;
922
- this._engine = this.context.scene.engine;
953
+ this._engine = context.scene.engine;
923
954
  this._organizeEntities = this._organizeEntities.bind(this);
924
955
  this._parseComponents = this._parseComponents.bind(this);
925
956
  this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
@@ -927,22 +958,24 @@ var SceneParserContext = /*#__PURE__*/ function() {
927
958
  _this._reject = reject;
928
959
  _this._resolve = resolve;
929
960
  });
961
+ this._reflectionParser = new ReflectionParser(context);
930
962
  }
931
963
  var _proto = SceneParser.prototype;
932
964
  /** start parse the scene */ _proto.start = function start() {
933
965
  this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
934
966
  };
935
967
  _proto._parseEntities = function _parseEntities() {
968
+ var _this = this;
936
969
  var entitiesConfig = this.context.originalData.entities;
937
970
  var entityConfigMap = this.context.entityConfigMap;
938
971
  var entitiesMap = this.context.entityMap;
939
972
  var rootIds = this.context.rootIds;
940
- var engine = this._engine;
973
+ this._engine;
941
974
  var promises = entitiesConfig.map(function(entityConfig) {
942
975
  entityConfigMap.set(entityConfig.id, entityConfig);
943
976
  // record root entities
944
977
  if (!entityConfig.parent) rootIds.push(entityConfig.id);
945
- return ReflectionParser.parseEntity(entityConfig, engine);
978
+ return _this._reflectionParser.parseEntity(entityConfig);
946
979
  });
947
980
  return Promise.all(promises).then(function(entities) {
948
981
  for(var i = 0, l = entities.length; i < l; i++){
@@ -980,7 +1013,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
980
1013
  component = entity.getComponent(engineCore.Loader.getClass(key));
981
1014
  }
982
1015
  component = component || entity.addComponent(engineCore.Loader.getClass(key));
983
- var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
1016
+ var promise = this._reflectionParser.parsePropsAndMethods(component, componentConfig);
984
1017
  promises.push(promise);
985
1018
  }
986
1019
  }
@@ -1536,10 +1569,10 @@ var TextureWrapMode;
1536
1569
  /**
1537
1570
  * @internal
1538
1571
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1539
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1572
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1540
1573
  this.glTFResource = glTFResource;
1541
1574
  this.resourceManager = resourceManager;
1542
- this.keepMeshData = keepMeshData;
1575
+ this.params = params;
1543
1576
  this.accessorBufferCache = {};
1544
1577
  this._resourceCache = new Map();
1545
1578
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1593,11 +1626,37 @@ var TextureWrapMode;
1593
1626
  _this.get(9),
1594
1627
  _this.get(2)
1595
1628
  ]).then(function() {
1629
+ var glTFResource = _this.glTFResource;
1630
+ if (glTFResource.skins || glTFResource.animations) {
1631
+ _this._createAnimator(_this, glTFResource.animations);
1632
+ }
1596
1633
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1597
- return _this.glTFResource;
1634
+ return glTFResource;
1598
1635
  });
1599
1636
  });
1600
1637
  };
1638
+ _proto._createAnimator = function _createAnimator(context, animations) {
1639
+ var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
1640
+ var animator = defaultSceneRoot.addComponent(engineCore.Animator);
1641
+ var animatorController = new engineCore.AnimatorController();
1642
+ var layer = new engineCore.AnimatorControllerLayer("layer");
1643
+ var animatorStateMachine = new engineCore.AnimatorStateMachine();
1644
+ animatorController.addLayer(layer);
1645
+ animator.animatorController = animatorController;
1646
+ layer.stateMachine = animatorStateMachine;
1647
+ if (animations) {
1648
+ for(var i = 0; i < animations.length; i++){
1649
+ var animationClip = animations[i];
1650
+ var name = animationClip.name;
1651
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
1652
+ if (uniqueName !== name) {
1653
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
1654
+ }
1655
+ var animatorState = animatorStateMachine.addState(uniqueName);
1656
+ animatorState.clip = animationClip;
1657
+ }
1658
+ }
1659
+ };
1601
1660
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1602
1661
  var _this = this;
1603
1662
  var glTFResourceKey = glTFResourceMap[type];
@@ -2237,7 +2296,7 @@ var SupercompressionScheme;
2237
2296
  alphaSliceByteLength: sgdReader.nextUint32()
2238
2297
  };
2239
2298
  }
2240
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2299
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2241
2300
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2242
2301
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2243
2302
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2429,6 +2488,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2429
2488
  }();
2430
2489
 
2431
2490
  /** @internal */ function TranscodeWorkerCode$1() {
2491
+ var initPromise;
2492
+ var init = function init(wasmBinary) {
2493
+ if (!initPromise) {
2494
+ initPromise = new Promise(function(resolve, reject) {
2495
+ var BasisModule = {
2496
+ wasmBinary: wasmBinary,
2497
+ onRuntimeInitialized: function() {
2498
+ return resolve(BasisModule);
2499
+ },
2500
+ onAbort: reject
2501
+ };
2502
+ self["BASIS"](BasisModule);
2503
+ }).then(function(BasisModule) {
2504
+ BasisModule.initializeBasis();
2505
+ return BasisModule.KTX2File;
2506
+ });
2507
+ }
2508
+ return initPromise;
2509
+ };
2432
2510
  self.onmessage = function onmessage(event) {
2433
2511
  var message = event.data;
2434
2512
  switch(message.type){
@@ -2543,6 +2621,10 @@ function transcode(buffer, targetFormat, KTX2File) {
2543
2621
  cleanup();
2544
2622
  throw new Error("Invalid or unsupported .ktx2 file");
2545
2623
  }
2624
+ if (!ktx2File.startTranscoding()) {
2625
+ cleanup();
2626
+ throw new Error("KTX2 startTranscoding failed");
2627
+ }
2546
2628
  var width = ktx2File.getWidth();
2547
2629
  var height = ktx2File.getHeight();
2548
2630
  var layerCount = ktx2File.getLayers() || 1;
@@ -2551,6 +2633,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2551
2633
  var faceCount = ktx2File.getFaces();
2552
2634
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2553
2635
  var faces = new Array(faceCount);
2636
+ var isBC = format === 2 || format === 3 || format === 7;
2554
2637
  for(var face = 0; face < faceCount; face++){
2555
2638
  var mipmaps = new Array(levelCount);
2556
2639
  for(var mip = 0; mip < levelCount; mip++){
@@ -2558,8 +2641,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2558
2641
  var mipWidth = void 0, mipHeight = void 0;
2559
2642
  for(var layer = 0; layer < layerCount; layer++){
2560
2643
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2561
- mipWidth = levelInfo.origWidth;
2562
- mipHeight = levelInfo.origHeight;
2644
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2645
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2646
+ width = mipWidth = levelInfo.width;
2647
+ height = mipHeight = levelInfo.height;
2648
+ console.warn("KTX2 transcode to BC will resize to width: " + width + ", height: " + height + ". You'd better use an image whose size if multiple of 4.");
2649
+ } else {
2650
+ mipWidth = levelInfo.origWidth;
2651
+ mipHeight = levelInfo.origHeight;
2652
+ }
2563
2653
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2564
2654
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2565
2655
  if (!status) {
@@ -2625,7 +2715,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2625
2715
  } else {
2626
2716
  var funcCode = TranscodeWorkerCode$1.toString();
2627
2717
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2628
- var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2718
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2629
2719
  var workerURL = URL.createObjectURL(new Blob([
2630
2720
  workerCode
2631
2721
  ], {
@@ -2874,6 +2964,7 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2874
2964
  _proto.initialize = function initialize(engine, configuration) {
2875
2965
  if (configuration.ktx2Loader) {
2876
2966
  var options = configuration.ktx2Loader;
2967
+ if (options.priorityFormats) exports.KTX2Loader._priorityFormats = options.priorityFormats;
2877
2968
  if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2878
2969
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2879
2970
  } else {
@@ -2894,25 +2985,7 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2894
2985
  });
2895
2986
  };
2896
2987
  _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2897
- if (priorityFormats === void 0) priorityFormats = [
2898
- exports.KTX2TargetFormat.ASTC,
2899
- exports.KTX2TargetFormat.ETC,
2900
- exports.KTX2TargetFormat.BC7,
2901
- exports.KTX2TargetFormat.BC1_BC3,
2902
- exports.KTX2TargetFormat.PVRTC,
2903
- exports.KTX2TargetFormat.R8G8B8A8
2904
- ];
2905
- var supportedList = new Array();
2906
- if (Array.isArray(priorityFormats[0])) {
2907
- for(var i = 0; i < priorityFormats.length; i++){
2908
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2909
- }
2910
- } else {
2911
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2912
- }
2913
- return supportedList.every(function(format) {
2914
- return KhronosTranscoder.transcoderMap[format];
2915
- });
2988
+ return !!KhronosTranscoder.transcoderMap[exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats)];
2916
2989
  };
2917
2990
  /**
2918
2991
  * Destroy ktx2 transcoder worker.
@@ -2926,7 +2999,8 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2926
2999
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2927
3000
  var _params;
2928
3001
  var ktx2Container = new KTX2Container(buffer);
2929
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3002
+ var _params_priorityFormats;
3003
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : exports.KTX2Loader._priorityFormats;
2930
3004
  var targetFormat = exports.KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2931
3005
  var transcodeResultPromise;
2932
3006
  if (exports.KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -2993,18 +3067,22 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2993
3067
  return targetFormat;
2994
3068
  };
2995
3069
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
2996
- if (priorityFormats === void 0) priorityFormats = [
2997
- exports.KTX2TargetFormat.ASTC,
2998
- exports.KTX2TargetFormat.ETC,
2999
- exports.KTX2TargetFormat.BC7,
3000
- exports.KTX2TargetFormat.BC1_BC3,
3001
- exports.KTX2TargetFormat.PVRTC
3002
- ];
3003
3070
  for(var i = 0; i < priorityFormats.length; i++){
3004
- var capabilities = this._supportedMap[priorityFormats[i]];
3005
- for(var j = 0; j < capabilities.length; j++){
3006
- if (renderer.canIUse(capabilities[j])) {
3007
- return priorityFormats[i];
3071
+ var format = priorityFormats[i];
3072
+ var capabilities = this._supportedMap[format];
3073
+ if (capabilities) {
3074
+ for(var j = 0; j < capabilities.length; j++){
3075
+ if (renderer.canIUse(capabilities[j])) {
3076
+ return format;
3077
+ }
3078
+ }
3079
+ } else {
3080
+ switch(priorityFormats[i]){
3081
+ case exports.KTX2TargetFormat.R8G8B8A8:
3082
+ return format;
3083
+ case exports.KTX2TargetFormat.R8:
3084
+ case exports.KTX2TargetFormat.R8G8:
3085
+ if (renderer.isWebGL2) return format;
3008
3086
  }
3009
3087
  }
3010
3088
  }
@@ -3041,6 +3119,14 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3041
3119
  return KTX2Loader1;
3042
3120
  }(engineCore.Loader), function() {
3043
3121
  _KTX2Loader._isBinomialInit = false;
3122
+ }(), function() {
3123
+ _KTX2Loader._priorityFormats = [
3124
+ exports.KTX2TargetFormat.BC7,
3125
+ exports.KTX2TargetFormat.ASTC,
3126
+ exports.KTX2TargetFormat.BC1_BC3,
3127
+ exports.KTX2TargetFormat.ETC,
3128
+ exports.KTX2TargetFormat.PVRTC
3129
+ ];
3044
3130
  }(), function() {
3045
3131
  var _obj;
3046
3132
  _KTX2Loader._supportedMap = (_obj = {}, _obj[exports.KTX2TargetFormat.ASTC] = [
@@ -3504,6 +3590,7 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3504
3590
  var promises = new Array();
3505
3591
  // parse samplers
3506
3592
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3593
+ promises.push(context.get(exports.GLTFParserType.Scene));
3507
3594
  return Promise.all(promises).then(function() {
3508
3595
  for(var j = 0, m = channels.length; j < m; j++){
3509
3596
  var gltfChannel = channels[j];
@@ -3515,6 +3602,10 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3515
3602
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3516
3603
  entity = entity.parent;
3517
3604
  }
3605
+ // If the target node is in the default scene, relativePath will be empty
3606
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3607
+ continue;
3608
+ }
3518
3609
  var ComponentType = void 0;
3519
3610
  var propertyName = void 0;
3520
3611
  switch(target.path){
@@ -3595,12 +3686,12 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3595
3686
  if (curve2.interpolation === engineCore.InterpolationType.CubicSpine) {
3596
3687
  keyframe2.inTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
3597
3688
  offset2 += outputSize;
3598
- keyframe2.value = output.subarray(offset2, offset2 + outputSize);
3689
+ keyframe2.value = output.slice(offset2, offset2 + outputSize);
3599
3690
  offset2 += outputSize;
3600
3691
  keyframe2.outTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
3601
3692
  offset2 += outputSize;
3602
3693
  } else {
3603
- keyframe2.value = output.subarray(offset2, offset2 + outputSize);
3694
+ keyframe2.value = output.slice(offset2, offset2 + outputSize);
3604
3695
  offset2 += outputSize;
3605
3696
  }
3606
3697
  curve2.addKey(keyframe2);
@@ -3851,7 +3942,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
3851
3942
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
3852
3943
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3853
3944
  });
3854
- }, context.keepMeshData).then(resolve);
3945
+ }, context.params.keepMeshData).then(resolve);
3855
3946
  }
3856
3947
  });
3857
3948
  };
@@ -4029,9 +4120,9 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4029
4120
  }
4030
4121
  var _proto = GLTFSceneParser.prototype;
4031
4122
  _proto.parse = function parse(context, index) {
4032
- var _this = this;
4033
4123
  var _context_glTF = context.glTF, scenes = _context_glTF.scenes, _context_glTF_scene = _context_glTF.scene, scene = _context_glTF_scene === void 0 ? 0 : _context_glTF_scene, glTFResource = context.glTFResource;
4034
4124
  var sceneInfo = scenes[index];
4125
+ var sceneExtensions = sceneInfo.extensions;
4035
4126
  var engine = glTFResource.engine;
4036
4127
  var isDefaultScene = scene === index;
4037
4128
  var sceneNodes = sceneInfo.nodes;
@@ -4057,18 +4148,7 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4057
4148
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4058
4149
  }
4059
4150
  return Promise.all(promises).then(function() {
4060
- if (isDefaultScene) {
4061
- return Promise.all([
4062
- context.get(exports.GLTFParserType.Skin),
4063
- context.get(exports.GLTFParserType.Animation)
4064
- ]).then(function(param) {
4065
- var skins = param[0], animations = param[1];
4066
- if (skins || animations) {
4067
- _this._createAnimator(context, animations);
4068
- }
4069
- return sceneRoot;
4070
- });
4071
- }
4151
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4072
4152
  return sceneRoot;
4073
4153
  });
4074
4154
  };
@@ -4180,28 +4260,6 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4180
4260
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4181
4261
  return Promise.all(promises);
4182
4262
  };
4183
- _proto._createAnimator = function _createAnimator(context, animations) {
4184
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4185
- var animator = defaultSceneRoot.addComponent(engineCore.Animator);
4186
- var animatorController = new engineCore.AnimatorController();
4187
- var layer = new engineCore.AnimatorControllerLayer("layer");
4188
- var animatorStateMachine = new engineCore.AnimatorStateMachine();
4189
- animatorController.addLayer(layer);
4190
- animator.animatorController = animatorController;
4191
- layer.stateMachine = animatorStateMachine;
4192
- if (animations) {
4193
- for(var i = 0; i < animations.length; i++){
4194
- var animationClip = animations[i];
4195
- var name = animationClip.name;
4196
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4197
- if (uniqueName !== name) {
4198
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4199
- }
4200
- var animatorState = animatorStateMachine.addState(uniqueName);
4201
- animatorState.clip = animationClip;
4202
- }
4203
- }
4204
- };
4205
4263
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4206
4264
  var rootBoneIndex = bones.indexOf(rootBone);
4207
4265
  if (rootBoneIndex !== -1) {
@@ -4351,8 +4409,7 @@ exports.GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFPar
4351
4409
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4352
4410
  }
4353
4411
  }).then(function(texture) {
4354
- var _texture;
4355
- (_texture = texture).name || (_texture.name = textureName || imageName || "texture_" + index);
4412
+ texture.name = textureName || imageName || texture.name || "texture_" + index;
4356
4413
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4357
4414
  return texture;
4358
4415
  });
@@ -4434,11 +4491,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4434
4491
  }
4435
4492
  var _proto = GLTFLoader.prototype;
4436
4493
  _proto.load = function load(item, resourceManager) {
4437
- var _params;
4438
4494
  var url = item.url;
4439
4495
  var params = item.params;
4440
4496
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4441
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4497
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4498
+ keepMeshData: false
4499
+ }, params));
4442
4500
  return context.parse();
4443
4501
  };
4444
4502
  return GLTFLoader;
@@ -5086,6 +5144,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5086
5144
  materialShaderData.setTexture(key, texture);
5087
5145
  }));
5088
5146
  break;
5147
+ case "Boolean":
5148
+ materialShaderData.setInt(key, value ? 1 : 0);
5149
+ break;
5150
+ case "Integer":
5151
+ materialShaderData.setInt(key, Number(value));
5152
+ break;
5089
5153
  }
5090
5154
  };
5091
5155
  var engine = resourceManager.engine;
@@ -5221,9 +5285,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5221
5285
  var _loop = function(i) {
5222
5286
  var atlasItem = atlasItems[i];
5223
5287
  if (atlasItem.img) {
5288
+ var _atlasItem_type;
5224
5289
  chainPromises.push(resourceManager.load({
5225
5290
  url: engineCore.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5226
- type: engineCore.AssetType.Texture2D,
5291
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : engineCore.AssetType.Texture2D,
5227
5292
  params: {
5228
5293
  format: format,
5229
5294
  mipmap: mipmap
@@ -5459,6 +5524,39 @@ TextureCubeLoader = __decorate([
5459
5524
  ])
5460
5525
  ], TextureCubeLoader);
5461
5526
 
5527
+ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5528
+ _inherits(ProjectLoader, Loader1);
5529
+ function ProjectLoader() {
5530
+ return Loader1.apply(this, arguments);
5531
+ }
5532
+ var _proto = ProjectLoader.prototype;
5533
+ _proto.load = function load(item, resourceManager) {
5534
+ var _this = this;
5535
+ var engine = resourceManager.engine;
5536
+ return new engineCore.AssetPromise(function(resolve, reject) {
5537
+ _this.request(item.url, {
5538
+ type: "json"
5539
+ }).then(function(data) {
5540
+ // @ts-ignore
5541
+ engine.resourceManager.initVirtualResources(data.files);
5542
+ return resourceManager.load({
5543
+ type: engineCore.AssetType.Scene,
5544
+ url: data.scene
5545
+ }).then(function(scene) {
5546
+ engine.sceneManager.activeScene = scene;
5547
+ resolve();
5548
+ });
5549
+ }).catch(reject);
5550
+ });
5551
+ };
5552
+ return ProjectLoader;
5553
+ }(engineCore.Loader);
5554
+ ProjectLoader = __decorate([
5555
+ engineCore.resourceLoader(engineCore.AssetType.Project, [
5556
+ "proj"
5557
+ ], false)
5558
+ ], ProjectLoader);
5559
+
5462
5560
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
5463
5561
  _inherits(SceneLoader, Loader1);
5464
5562
  function SceneLoader() {
@@ -5476,33 +5574,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5476
5574
  var promises = [];
5477
5575
  // parse ambient light
5478
5576
  var ambient = data.scene.ambient;
5479
- var useCustomAmbient = ambient.specularMode === "Custom";
5480
- if (useCustomAmbient && ambient.customAmbientLight) {
5481
- // @ts-ignore
5482
- // prettier-ignore
5483
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5484
- scene.ambientLight = ambientLight;
5485
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5486
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5487
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5488
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5489
- });
5490
- promises.push(customAmbientPromise);
5491
- } else if (!useCustomAmbient && ambient.ambientLight) {
5492
- // @ts-ignore
5493
- // prettier-ignore
5494
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5495
- scene.ambientLight = ambientLight;
5496
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5497
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5498
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5499
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5500
- });
5501
- promises.push(ambientLightPromise);
5502
- } else {
5577
+ if (ambient) {
5578
+ var useCustomAmbient = ambient.specularMode === "Custom";
5579
+ var useSH = ambient.diffuseMode === engineCore.DiffuseMode.SphericalHarmonics;
5503
5580
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5504
5581
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5582
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5505
5583
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5584
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5585
+ if (useCustomAmbient && ambient.customAmbientLight) {
5586
+ promises.push(// @ts-ignore
5587
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5588
+ var _ambientLight;
5589
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5590
+ }));
5591
+ }
5592
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5593
+ promises.push(// @ts-ignore
5594
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5595
+ if (!useCustomAmbient) {
5596
+ var _ambientLight;
5597
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5598
+ }
5599
+ if (useSH) {
5600
+ var _ambientLight1;
5601
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5602
+ }
5603
+ }));
5604
+ }
5506
5605
  }
5507
5606
  var background = data.scene.background;
5508
5607
  scene.background.mode = background.mode;
@@ -5559,13 +5658,13 @@ SceneLoader = __decorate([
5559
5658
  "scene"
5560
5659
  ], true)
5561
5660
  ], SceneLoader);
5562
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5661
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5563
5662
  var props;
5564
5663
  return __generator(this, function(_state) {
5565
5664
  props = item.props;
5566
5665
  if (!props.font) {
5567
5666
  // @ts-ignore
5568
- instance.font = engineCore.Font.createFromOS(engine, props.fontFamily || "Arial");
5667
+ instance.font = engineCore.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5569
5668
  }
5570
5669
  return [
5571
5670
  2,
@@ -5621,7 +5720,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5621
5720
  throw "BlendShape animation is not supported when using draco.";
5622
5721
  }, function() {
5623
5722
  return decodedGeometry.index.array;
5624
- }, context.keepMeshData);
5723
+ }, context.params.keepMeshData);
5625
5724
  });
5626
5725
  });
5627
5726
  };