@galacean/engine-loader 1.1.0-beta.4 → 1.1.0-beta.43

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,87 +526,50 @@ 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;
539
538
  if (position) entity.transform.position.copyFrom(position);
540
539
  if (rotation) entity.transform.rotation.copyFrom(rotation);
541
540
  if (scale) entity.transform.scale.copyFrom(scale);
541
+ var _entityConfig_layer;
542
+ entity.layer = (_entityConfig_layer = entityConfig.layer) != null ? _entityConfig_layer : entity.layer;
542
543
  return entity;
543
544
  });
544
545
  };
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;
546
+ _proto.parseClassObject = function parseClassObject(item) {
547
+ var _this = this;
565
548
  var Class = engineCore.Loader.getClass(item.class);
566
549
  var _item_constructParams;
567
550
  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
- }
551
+ return Promise.all(params.map(function(param) {
552
+ return _this.parseBasicType(param);
553
+ })).then(function(resultParams) {
554
+ return _construct(Class, [].concat(resultParams));
555
+ }).then(function(instance) {
556
+ return _this.parsePropsAndMethods(instance, item);
557
+ });
592
558
  };
593
- ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
594
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
595
- var _this = this;
559
+ _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
596
560
  var promises = [];
597
561
  if (item.methods) {
598
562
  for(var methodName in item.methods){
599
563
  var methodParams = item.methods[methodName];
600
564
  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);
565
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
604
566
  }
605
567
  }
606
568
  }
607
569
  if (item.props) {
608
- var _this1 = this, _loop = function(key) {
570
+ var _this = this, _loop = function(key) {
609
571
  var value = item.props[key];
610
- var promise = _this1.parseBasicType(value, engine).then(function(v) {
572
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
611
573
  return instance[key] = v;
612
574
  });
613
575
  promises.push(promise);
@@ -615,27 +577,96 @@ var ReflectionParser = /*#__PURE__*/ function() {
615
577
  for(var key in item.props)_loop(key);
616
578
  }
617
579
  return Promise.all(promises).then(function() {
618
- var handle = _this.customParseComponentHandles[instance.constructor.name];
619
- if (handle) return handle(instance, item, engine);
580
+ var handle = ReflectionParser.customParseComponentHandles[instance.constructor.name];
581
+ if (handle) return handle(instance, item);
620
582
  else return instance;
621
583
  });
622
584
  };
623
- ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
624
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
585
+ _proto.parseMethod = function parseMethod(instance, methodName, methodParams) {
625
586
  var _this = this;
626
587
  return Promise.all(methodParams.map(function(param) {
627
- return _this.parseBasicType(param, engine, resourceManager);
588
+ return _this.parseBasicType(param);
628
589
  })).then(function(result) {
629
590
  var _instance;
630
591
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
631
592
  });
632
593
  };
594
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
595
+ var _this = this;
596
+ if (Array.isArray(value)) {
597
+ return Promise.all(value.map(function(item) {
598
+ return _this.parseBasicType(item);
599
+ }));
600
+ } else if (typeof value === "object" && value != null) {
601
+ if (ReflectionParser._isClass(value)) {
602
+ // class object
603
+ return this.parseClassObject(value);
604
+ } else if (ReflectionParser._isAssetRef(value)) {
605
+ // reference object
606
+ // @ts-ignore
607
+ return this._context.resourceManager.getResourceByRef(value);
608
+ } else if (ReflectionParser._isEntityRef(value)) {
609
+ // entity reference
610
+ return Promise.resolve(this._context.entityMap.get(value.entityId));
611
+ } else if (originValue) {
612
+ var _this1 = this, _loop = function(key) {
613
+ if (key === "methods") {
614
+ var methods = value[key];
615
+ for(var methodName in methods){
616
+ var methodParams = methods[methodName];
617
+ for(var i = 0, count = methodParams.length; i < count; i++){
618
+ var params = methodParams[i];
619
+ var promise = _this1.parseMethod(originValue, methodName, params);
620
+ promises.push(promise);
621
+ }
622
+ }
623
+ } else {
624
+ promises.push(_this1.parseBasicType(value[key], originValue[key]).then(function(v) {
625
+ return originValue[key] = v;
626
+ }));
627
+ }
628
+ };
629
+ var promises = [];
630
+ for(var key in value)_loop(key);
631
+ return Promise.all(promises).then(function() {
632
+ return originValue;
633
+ });
634
+ }
635
+ }
636
+ // primitive type
637
+ return Promise.resolve(value);
638
+ };
639
+ _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
640
+ // @ts-ignore
641
+ var assetRefId = entityConfig.assetRefId;
642
+ var engine = this._context.engine;
643
+ if (assetRefId) {
644
+ return engine.resourceManager// @ts-ignore
645
+ .getResourceByRef({
646
+ refId: assetRefId,
647
+ key: entityConfig.key,
648
+ isClone: entityConfig.isClone
649
+ }).then(function(entity) {
650
+ entity.name = entityConfig.name;
651
+ return entity;
652
+ });
653
+ } else {
654
+ var entity = new engineCore.Entity(engine, entityConfig.name);
655
+ return Promise.resolve(entity);
656
+ }
657
+ };
658
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
659
+ this.customParseComponentHandles[componentType] = handle;
660
+ };
633
661
  ReflectionParser._isClass = function _isClass(value) {
634
662
  return value["class"] != undefined;
635
663
  };
636
- ReflectionParser._isRef = function _isRef(value) {
664
+ ReflectionParser._isAssetRef = function _isAssetRef(value) {
637
665
  return value["refId"] != undefined;
638
666
  };
667
+ ReflectionParser._isEntityRef = function _isEntityRef(value) {
668
+ return value["entityId"] != undefined;
669
+ };
639
670
  return ReflectionParser;
640
671
  }();
641
672
  (function() {
@@ -903,6 +934,8 @@ var SceneParserContext = /*#__PURE__*/ function() {
903
934
  this.assets = new Map();
904
935
  this.entityConfigMap = new Map();
905
936
  this.rootIds = [];
937
+ this.engine = scene.engine;
938
+ this.resourceManager = scene.engine.resourceManager;
906
939
  }
907
940
  var _proto = SceneParserContext.prototype;
908
941
  _proto.destroy = function destroy() {
@@ -919,7 +952,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
919
952
  function SceneParser(context) {
920
953
  var _this = this;
921
954
  this.context = context;
922
- this._engine = this.context.scene.engine;
955
+ this._engine = context.scene.engine;
923
956
  this._organizeEntities = this._organizeEntities.bind(this);
924
957
  this._parseComponents = this._parseComponents.bind(this);
925
958
  this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
@@ -927,22 +960,24 @@ var SceneParserContext = /*#__PURE__*/ function() {
927
960
  _this._reject = reject;
928
961
  _this._resolve = resolve;
929
962
  });
963
+ this._reflectionParser = new ReflectionParser(context);
930
964
  }
931
965
  var _proto = SceneParser.prototype;
932
966
  /** start parse the scene */ _proto.start = function start() {
933
967
  this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
934
968
  };
935
969
  _proto._parseEntities = function _parseEntities() {
970
+ var _this = this;
936
971
  var entitiesConfig = this.context.originalData.entities;
937
972
  var entityConfigMap = this.context.entityConfigMap;
938
973
  var entitiesMap = this.context.entityMap;
939
974
  var rootIds = this.context.rootIds;
940
- var engine = this._engine;
975
+ this._engine;
941
976
  var promises = entitiesConfig.map(function(entityConfig) {
942
977
  entityConfigMap.set(entityConfig.id, entityConfig);
943
978
  // record root entities
944
979
  if (!entityConfig.parent) rootIds.push(entityConfig.id);
945
- return ReflectionParser.parseEntity(entityConfig, engine);
980
+ return _this._reflectionParser.parseEntity(entityConfig);
946
981
  });
947
982
  return Promise.all(promises).then(function(entities) {
948
983
  for(var i = 0, l = entities.length; i < l; i++){
@@ -980,7 +1015,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
980
1015
  component = entity.getComponent(engineCore.Loader.getClass(key));
981
1016
  }
982
1017
  component = component || entity.addComponent(engineCore.Loader.getClass(key));
983
- var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
1018
+ var promise = this._reflectionParser.parsePropsAndMethods(component, componentConfig);
984
1019
  promises.push(promise);
985
1020
  }
986
1021
  }
@@ -1536,10 +1571,10 @@ var TextureWrapMode;
1536
1571
  /**
1537
1572
  * @internal
1538
1573
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1539
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1574
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1540
1575
  this.glTFResource = glTFResource;
1541
1576
  this.resourceManager = resourceManager;
1542
- this.keepMeshData = keepMeshData;
1577
+ this.params = params;
1543
1578
  this.accessorBufferCache = {};
1544
1579
  this._resourceCache = new Map();
1545
1580
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1593,11 +1628,37 @@ var TextureWrapMode;
1593
1628
  _this.get(9),
1594
1629
  _this.get(2)
1595
1630
  ]).then(function() {
1631
+ var glTFResource = _this.glTFResource;
1632
+ if (glTFResource.skins || glTFResource.animations) {
1633
+ _this._createAnimator(_this, glTFResource.animations);
1634
+ }
1596
1635
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1597
- return _this.glTFResource;
1636
+ return glTFResource;
1598
1637
  });
1599
1638
  });
1600
1639
  };
1640
+ _proto._createAnimator = function _createAnimator(context, animations) {
1641
+ var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
1642
+ var animator = defaultSceneRoot.addComponent(engineCore.Animator);
1643
+ var animatorController = new engineCore.AnimatorController();
1644
+ var layer = new engineCore.AnimatorControllerLayer("layer");
1645
+ var animatorStateMachine = new engineCore.AnimatorStateMachine();
1646
+ animatorController.addLayer(layer);
1647
+ animator.animatorController = animatorController;
1648
+ layer.stateMachine = animatorStateMachine;
1649
+ if (animations) {
1650
+ for(var i = 0; i < animations.length; i++){
1651
+ var animationClip = animations[i];
1652
+ var name = animationClip.name;
1653
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
1654
+ if (uniqueName !== name) {
1655
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
1656
+ }
1657
+ var animatorState = animatorStateMachine.addState(uniqueName);
1658
+ animatorState.clip = animationClip;
1659
+ }
1660
+ }
1661
+ };
1601
1662
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1602
1663
  var _this = this;
1603
1664
  var glTFResourceKey = glTFResourceMap[type];
@@ -2237,7 +2298,7 @@ var SupercompressionScheme;
2237
2298
  alphaSliceByteLength: sgdReader.nextUint32()
2238
2299
  };
2239
2300
  }
2240
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2301
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2241
2302
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2242
2303
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2243
2304
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2429,6 +2490,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2429
2490
  }();
2430
2491
 
2431
2492
  /** @internal */ function TranscodeWorkerCode$1() {
2493
+ var initPromise;
2494
+ var init = function init(wasmBinary) {
2495
+ if (!initPromise) {
2496
+ initPromise = new Promise(function(resolve, reject) {
2497
+ var BasisModule = {
2498
+ wasmBinary: wasmBinary,
2499
+ onRuntimeInitialized: function() {
2500
+ return resolve(BasisModule);
2501
+ },
2502
+ onAbort: reject
2503
+ };
2504
+ self["BASIS"](BasisModule);
2505
+ }).then(function(BasisModule) {
2506
+ BasisModule.initializeBasis();
2507
+ return BasisModule.KTX2File;
2508
+ });
2509
+ }
2510
+ return initPromise;
2511
+ };
2432
2512
  self.onmessage = function onmessage(event) {
2433
2513
  var message = event.data;
2434
2514
  switch(message.type){
@@ -2543,6 +2623,10 @@ function transcode(buffer, targetFormat, KTX2File) {
2543
2623
  cleanup();
2544
2624
  throw new Error("Invalid or unsupported .ktx2 file");
2545
2625
  }
2626
+ if (!ktx2File.startTranscoding()) {
2627
+ cleanup();
2628
+ throw new Error("KTX2 startTranscoding failed");
2629
+ }
2546
2630
  var width = ktx2File.getWidth();
2547
2631
  var height = ktx2File.getHeight();
2548
2632
  var layerCount = ktx2File.getLayers() || 1;
@@ -2551,6 +2635,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2551
2635
  var faceCount = ktx2File.getFaces();
2552
2636
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2553
2637
  var faces = new Array(faceCount);
2638
+ var isBC = format === 2 || format === 3 || format === 7;
2554
2639
  for(var face = 0; face < faceCount; face++){
2555
2640
  var mipmaps = new Array(levelCount);
2556
2641
  for(var mip = 0; mip < levelCount; mip++){
@@ -2558,8 +2643,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2558
2643
  var mipWidth = void 0, mipHeight = void 0;
2559
2644
  for(var layer = 0; layer < layerCount; layer++){
2560
2645
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2561
- mipWidth = levelInfo.origWidth;
2562
- mipHeight = levelInfo.origHeight;
2646
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2647
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2648
+ width = mipWidth = levelInfo.width;
2649
+ height = mipHeight = levelInfo.height;
2650
+ 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.");
2651
+ } else {
2652
+ mipWidth = levelInfo.origWidth;
2653
+ mipHeight = levelInfo.origHeight;
2654
+ }
2563
2655
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2564
2656
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2565
2657
  if (!status) {
@@ -2625,7 +2717,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2625
2717
  } else {
2626
2718
  var funcCode = TranscodeWorkerCode$1.toString();
2627
2719
  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 ";
2720
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2629
2721
  var workerURL = URL.createObjectURL(new Blob([
2630
2722
  workerCode
2631
2723
  ], {
@@ -2871,10 +2963,14 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2871
2963
  return Loader1.apply(this, arguments);
2872
2964
  }
2873
2965
  var _proto = KTX2Loader1.prototype;
2874
- _proto.initialize = function initialize(engine, configuration) {
2966
+ _proto.initialize = function initialize(_, configuration) {
2875
2967
  if (configuration.ktx2Loader) {
2876
2968
  var options = configuration.ktx2Loader;
2877
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2969
+ if (options.priorityFormats) {
2970
+ exports.KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2971
+ exports.KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2972
+ }
2973
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2878
2974
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2879
2975
  } else {
2880
2976
  return exports.KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2893,27 +2989,6 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2893
2989
  });
2894
2990
  });
2895
2991
  };
2896
- _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
- });
2916
- };
2917
2992
  /**
2918
2993
  * Destroy ktx2 transcoder worker.
2919
2994
  */ KTX2Loader1.destroy = function destroy() {
@@ -2926,7 +3001,8 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2926
3001
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2927
3002
  var _params;
2928
3003
  var ktx2Container = new KTX2Container(buffer);
2929
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3004
+ var _params_priorityFormats;
3005
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : exports.KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2930
3006
  var targetFormat = exports.KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2931
3007
  var transcodeResultPromise;
2932
3008
  if (exports.KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -2993,18 +3069,22 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2993
3069
  return targetFormat;
2994
3070
  };
2995
3071
  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
3072
  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];
3073
+ var format = priorityFormats[i];
3074
+ var capabilities = this._supportedMap[format];
3075
+ if (capabilities) {
3076
+ for(var j = 0; j < capabilities.length; j++){
3077
+ if (renderer.canIUse(capabilities[j])) {
3078
+ return format;
3079
+ }
3080
+ }
3081
+ } else {
3082
+ switch(priorityFormats[i]){
3083
+ case exports.KTX2TargetFormat.R8G8B8A8:
3084
+ return format;
3085
+ case exports.KTX2TargetFormat.R8:
3086
+ case exports.KTX2TargetFormat.R8G8:
3087
+ if (renderer.isWebGL2) return format;
3008
3088
  }
3009
3089
  }
3010
3090
  }
@@ -3041,6 +3121,23 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3041
3121
  return KTX2Loader1;
3042
3122
  }(engineCore.Loader), function() {
3043
3123
  _KTX2Loader._isBinomialInit = false;
3124
+ }(), function() {
3125
+ _KTX2Loader._priorityFormats = {
3126
+ etc1s: [
3127
+ exports.KTX2TargetFormat.ETC,
3128
+ exports.KTX2TargetFormat.BC7,
3129
+ exports.KTX2TargetFormat.ASTC,
3130
+ exports.KTX2TargetFormat.BC1_BC3,
3131
+ exports.KTX2TargetFormat.PVRTC
3132
+ ],
3133
+ uastc: [
3134
+ exports.KTX2TargetFormat.ASTC,
3135
+ exports.KTX2TargetFormat.BC7,
3136
+ exports.KTX2TargetFormat.ETC,
3137
+ exports.KTX2TargetFormat.BC1_BC3,
3138
+ exports.KTX2TargetFormat.PVRTC
3139
+ ]
3140
+ };
3044
3141
  }(), function() {
3045
3142
  var _obj;
3046
3143
  _KTX2Loader._supportedMap = (_obj = {}, _obj[exports.KTX2TargetFormat.ASTC] = [
@@ -3061,6 +3158,11 @@ exports.KTX2Loader = __decorate([
3061
3158
  "ktx2"
3062
3159
  ])
3063
3160
  ], exports.KTX2Loader);
3161
+ exports.KTX2Transcoder = void 0;
3162
+ (function(KTX2Transcoder) {
3163
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3164
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3165
+ })(exports.KTX2Transcoder || (exports.KTX2Transcoder = {}));
3064
3166
 
3065
3167
  /**
3066
3168
  * @internal
@@ -3504,6 +3606,7 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3504
3606
  var promises = new Array();
3505
3607
  // parse samplers
3506
3608
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3609
+ promises.push(context.get(exports.GLTFParserType.Scene));
3507
3610
  return Promise.all(promises).then(function() {
3508
3611
  for(var j = 0, m = channels.length; j < m; j++){
3509
3612
  var gltfChannel = channels[j];
@@ -3515,6 +3618,10 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3515
3618
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3516
3619
  entity = entity.parent;
3517
3620
  }
3621
+ // If the target node is in the default scene, relativePath will be empty
3622
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3623
+ continue;
3624
+ }
3518
3625
  var ComponentType = void 0;
3519
3626
  var propertyName = void 0;
3520
3627
  switch(target.path){
@@ -3851,7 +3958,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
3851
3958
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
3852
3959
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3853
3960
  });
3854
- }, context.keepMeshData).then(resolve);
3961
+ }, context.params.keepMeshData).then(resolve);
3855
3962
  }
3856
3963
  });
3857
3964
  };
@@ -4029,9 +4136,9 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4029
4136
  }
4030
4137
  var _proto = GLTFSceneParser.prototype;
4031
4138
  _proto.parse = function parse(context, index) {
4032
- var _this = this;
4033
4139
  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
4140
  var sceneInfo = scenes[index];
4141
+ var sceneExtensions = sceneInfo.extensions;
4035
4142
  var engine = glTFResource.engine;
4036
4143
  var isDefaultScene = scene === index;
4037
4144
  var sceneNodes = sceneInfo.nodes;
@@ -4057,18 +4164,7 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4057
4164
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4058
4165
  }
4059
4166
  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
- }
4167
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4072
4168
  return sceneRoot;
4073
4169
  });
4074
4170
  };
@@ -4180,28 +4276,6 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4180
4276
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4181
4277
  return Promise.all(promises);
4182
4278
  };
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
4279
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4206
4280
  var rootBoneIndex = bones.indexOf(rootBone);
4207
4281
  if (rootBoneIndex !== -1) {
@@ -4351,8 +4425,7 @@ exports.GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFPar
4351
4425
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4352
4426
  }
4353
4427
  }).then(function(texture) {
4354
- var _texture;
4355
- (_texture = texture).name || (_texture.name = textureName || imageName || "texture_" + index);
4428
+ texture.name = textureName || imageName || texture.name || "texture_" + index;
4356
4429
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4357
4430
  return texture;
4358
4431
  });
@@ -4434,11 +4507,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4434
4507
  }
4435
4508
  var _proto = GLTFLoader.prototype;
4436
4509
  _proto.load = function load(item, resourceManager) {
4437
- var _params;
4438
4510
  var url = item.url;
4439
4511
  var params = item.params;
4440
4512
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4441
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4513
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4514
+ keepMeshData: false
4515
+ }, params));
4442
4516
  return context.parse();
4443
4517
  };
4444
4518
  return GLTFLoader;
@@ -5086,6 +5160,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5086
5160
  materialShaderData.setTexture(key, texture);
5087
5161
  }));
5088
5162
  break;
5163
+ case "Boolean":
5164
+ materialShaderData.setInt(key, value ? 1 : 0);
5165
+ break;
5166
+ case "Integer":
5167
+ materialShaderData.setInt(key, Number(value));
5168
+ break;
5089
5169
  }
5090
5170
  };
5091
5171
  var engine = resourceManager.engine;
@@ -5221,9 +5301,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5221
5301
  var _loop = function(i) {
5222
5302
  var atlasItem = atlasItems[i];
5223
5303
  if (atlasItem.img) {
5304
+ var _atlasItem_type;
5224
5305
  chainPromises.push(resourceManager.load({
5225
5306
  url: engineCore.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5226
- type: engineCore.AssetType.Texture2D,
5307
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : engineCore.AssetType.Texture2D,
5227
5308
  params: {
5228
5309
  format: format,
5229
5310
  mipmap: mipmap
@@ -5263,7 +5344,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5263
5344
  };
5264
5345
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5265
5346
  // Generate a SpriteAtlas object.
5266
- var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
5347
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border, width = config.width, height = config.height;
5267
5348
  var sprite = new engineCore.Sprite(engine, texture, region ? this._tempRect.set(region.x, region.y, region.w, region.h) : undefined, pivot ? this._tempVec2.set(pivot.x, pivot.y) : undefined, border ? this._tempVec4.set(border.x, border.y, border.z, border.w) : undefined, config.name);
5268
5349
  if (texture) {
5269
5350
  var invW = 1 / texture.width;
@@ -5275,6 +5356,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5275
5356
  }
5276
5357
  config.atlasRotated && (sprite.atlasRotated = true);
5277
5358
  }
5359
+ isNaN(width) || (sprite.width = width);
5360
+ isNaN(height) || (sprite.height = height);
5278
5361
  return sprite;
5279
5362
  };
5280
5363
  return SpriteAtlasLoader;
@@ -5293,26 +5376,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5293
5376
  var _proto = SpriteLoader.prototype;
5294
5377
  _proto.load = function load(item, resourceManager) {
5295
5378
  var _this = this;
5296
- return new engineCore.AssetPromise(function(resolve, reject) {
5297
- _this.request(item.url, _extends({}, item, {
5298
- type: "json"
5299
- })).then(function(data) {
5300
- if (data.belongToAtlas) {
5301
- resourceManager// @ts-ignore
5302
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5303
- resolve(atlas.getSprite(data.fullPath));
5304
- }).catch(reject);
5305
- } else if (data.texture) {
5306
- resourceManager// @ts-ignore
5307
- .getResourceByRef(data.texture).then(function(texture) {
5308
- resolve(new engineCore.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5309
- }).catch(reject);
5310
- } else {
5311
- resolve(new engineCore.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5312
- }
5313
- }).catch(reject);
5379
+ return this.request(item.url, _extends({}, item, {
5380
+ type: "json"
5381
+ })).then(function(data) {
5382
+ return data.belongToAtlas ? _this._loadFromAtlas(resourceManager, data) : _this._loadFromTexture(resourceManager, data);
5383
+ });
5384
+ };
5385
+ _proto._loadFromAtlas = function _loadFromAtlas(resourceManager, data) {
5386
+ var _this = this;
5387
+ return resourceManager// @ts-ignore
5388
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5389
+ return atlas.getSprite(data.fullPath) || _this._loadFromTexture(resourceManager, data);
5314
5390
  });
5315
5391
  };
5392
+ _proto._loadFromTexture = function _loadFromTexture(resourceManager, data) {
5393
+ if (data.texture) {
5394
+ return resourceManager// @ts-ignore
5395
+ .getResourceByRef(data.texture).then(function(texture) {
5396
+ var sprite = new engineCore.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border);
5397
+ var width = data.width, height = data.height;
5398
+ isNaN(width) || (sprite.width = width);
5399
+ isNaN(height) || (sprite.height = height);
5400
+ return sprite;
5401
+ });
5402
+ } else {
5403
+ return new engineCore.AssetPromise(function(resolve) {
5404
+ var sprite = new engineCore.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border);
5405
+ var width = data.width, height = data.height;
5406
+ isNaN(width) || (sprite.width = width);
5407
+ isNaN(height) || (sprite.height = height);
5408
+ resolve(sprite);
5409
+ });
5410
+ }
5411
+ };
5316
5412
  return SpriteLoader;
5317
5413
  }(engineCore.Loader);
5318
5414
  SpriteLoader = __decorate([
@@ -5359,9 +5455,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5359
5455
  type: "image"
5360
5456
  });
5361
5457
  _this.request(url, requestConfig).then(function(image) {
5362
- var _params, _params1;
5363
- var params = item.params;
5364
- var texture = new engineCore.Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5458
+ var _item_params;
5459
+ var _ref = (_item_params = item.params) != null ? _item_params : {}, format = _ref.format, mipmap = _ref.mipmap, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode;
5460
+ var texture = new engineCore.Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5461
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5462
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5463
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5464
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5365
5465
  texture.setImageSource(image);
5366
5466
  texture.generateMipmaps();
5367
5467
  if (url.indexOf("data:") !== 0) {
@@ -5459,6 +5559,39 @@ TextureCubeLoader = __decorate([
5459
5559
  ])
5460
5560
  ], TextureCubeLoader);
5461
5561
 
5562
+ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5563
+ _inherits(ProjectLoader, Loader1);
5564
+ function ProjectLoader() {
5565
+ return Loader1.apply(this, arguments);
5566
+ }
5567
+ var _proto = ProjectLoader.prototype;
5568
+ _proto.load = function load(item, resourceManager) {
5569
+ var _this = this;
5570
+ var engine = resourceManager.engine;
5571
+ return new engineCore.AssetPromise(function(resolve, reject) {
5572
+ _this.request(item.url, {
5573
+ type: "json"
5574
+ }).then(function(data) {
5575
+ // @ts-ignore
5576
+ engine.resourceManager.initVirtualResources(data.files);
5577
+ return resourceManager.load({
5578
+ type: engineCore.AssetType.Scene,
5579
+ url: data.scene
5580
+ }).then(function(scene) {
5581
+ engine.sceneManager.activeScene = scene;
5582
+ resolve();
5583
+ });
5584
+ }).catch(reject);
5585
+ });
5586
+ };
5587
+ return ProjectLoader;
5588
+ }(engineCore.Loader);
5589
+ ProjectLoader = __decorate([
5590
+ engineCore.resourceLoader(engineCore.AssetType.Project, [
5591
+ "proj"
5592
+ ], false)
5593
+ ], ProjectLoader);
5594
+
5462
5595
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
5463
5596
  _inherits(SceneLoader, Loader1);
5464
5597
  function SceneLoader() {
@@ -5476,33 +5609,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5476
5609
  var promises = [];
5477
5610
  // parse ambient light
5478
5611
  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 {
5612
+ if (ambient) {
5613
+ var useCustomAmbient = ambient.specularMode === "Custom";
5614
+ var useSH = ambient.diffuseMode === engineCore.DiffuseMode.SphericalHarmonics;
5503
5615
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5504
5616
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5617
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5505
5618
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5619
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5620
+ if (useCustomAmbient && ambient.customAmbientLight) {
5621
+ promises.push(// @ts-ignore
5622
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5623
+ var _ambientLight;
5624
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5625
+ }));
5626
+ }
5627
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5628
+ promises.push(// @ts-ignore
5629
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5630
+ if (!useCustomAmbient) {
5631
+ var _ambientLight;
5632
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5633
+ }
5634
+ if (useSH) {
5635
+ var _ambientLight1;
5636
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5637
+ }
5638
+ }));
5639
+ }
5506
5640
  }
5507
5641
  var background = data.scene.background;
5508
5642
  scene.background.mode = background.mode;
@@ -5544,6 +5678,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5544
5678
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5545
5679
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5546
5680
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
5681
+ var _shadow_shadowTwoCascadeSplits;
5682
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
5683
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5547
5684
  }
5548
5685
  return Promise.all(promises).then(function() {
5549
5686
  resolve(scene);
@@ -5559,13 +5696,13 @@ SceneLoader = __decorate([
5559
5696
  "scene"
5560
5697
  ], true)
5561
5698
  ], SceneLoader);
5562
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5699
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5563
5700
  var props;
5564
5701
  return __generator(this, function(_state) {
5565
5702
  props = item.props;
5566
5703
  if (!props.font) {
5567
5704
  // @ts-ignore
5568
- instance.font = engineCore.Font.createFromOS(engine, props.fontFamily || "Arial");
5705
+ instance.font = engineCore.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5569
5706
  }
5570
5707
  return [
5571
5708
  2,
@@ -5621,7 +5758,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5621
5758
  throw "BlendShape animation is not supported when using draco.";
5622
5759
  }, function() {
5623
5760
  return decodedGeometry.index.array;
5624
- }, context.keepMeshData);
5761
+ }, context.params.keepMeshData);
5625
5762
  });
5626
5763
  });
5627
5764
  };