@galacean/effects-threejs 2.4.0-beta.0 → 2.4.0-beta.1

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/index.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects runtime threejs plugin for the web
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 燃然,飂兮,十弦,云垣,茂安,意绮
6
- * Version: v2.4.0-beta.0
6
+ * Version: v2.4.0-beta.1
7
7
  */
8
8
 
9
9
  import * as THREE from 'three';
@@ -2002,7 +2002,7 @@ function getDirectStore(target) {
2002
2002
  function EffectsObject(engine) {
2003
2003
  this.engine = engine;
2004
2004
  this.guid = generateGUID();
2005
- this.taggedProperties = {};
2005
+ this.defination = {};
2006
2006
  this.engine.addInstance(this);
2007
2007
  }
2008
2008
  var _proto = EffectsObject.prototype;
@@ -2027,11 +2027,7 @@ function getDirectStore(target) {
2027
2027
  * 反序列化函数
2028
2028
  *
2029
2029
  * @param data - 对象的序列化的数据
2030
- */ _proto.fromData = function fromData(data) {
2031
- if (data.id) {
2032
- this.setInstanceId(data.id);
2033
- }
2034
- };
2030
+ */ _proto.fromData = function fromData(data) {};
2035
2031
  /**
2036
2032
  *
2037
2033
  */ _proto.dispose = function dispose() {};
@@ -2127,9 +2123,6 @@ function getDirectStore(target) {
2127
2123
  };
2128
2124
  _proto.fromData = function fromData(data) {
2129
2125
  EffectsObject.prototype.fromData.call(this, data);
2130
- if (data.item) {
2131
- this.item = data.item;
2132
- }
2133
2126
  };
2134
2127
  _proto.dispose = function dispose() {
2135
2128
  if (this.isEnableCalled) {
@@ -2194,11 +2187,15 @@ function getDirectStore(target) {
2194
2187
  ]);
2195
2188
  return Component;
2196
2189
  }(EffectsObject);
2190
+ __decorate([
2191
+ serialize()
2192
+ ], Component.prototype, "item", void 0);
2197
2193
  __decorate([
2198
2194
  serialize()
2199
2195
  ], Component.prototype, "_enabled", void 0);
2200
2196
  /**
2201
2197
  * @since 2.0.0
2198
+ * @deprecated 2.4.0 Please use Component instead
2202
2199
  */ var Behaviour = /*#__PURE__*/ function(Component) {
2203
2200
  _inherits(Behaviour, Component);
2204
2201
  function Behaviour() {
@@ -2228,10 +2225,6 @@ __decorate([
2228
2225
  }
2229
2226
  var _proto = RendererComponent.prototype;
2230
2227
  _proto.render = function render(renderer) {};
2231
- _proto.setVFXItem = function setVFXItem(item) {
2232
- Component.prototype.setVFXItem.call(this, item);
2233
- this.item.rendererComponents.push(this);
2234
- };
2235
2228
  _proto.onEnable = function onEnable() {
2236
2229
  var _this_item_composition;
2237
2230
  (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.renderFrame.addMeshToDefaultRenderPass(this);
@@ -2240,18 +2233,6 @@ __decorate([
2240
2233
  var _this_item_composition;
2241
2234
  (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.renderFrame.removeMeshFromDefaultRenderPass(this);
2242
2235
  };
2243
- _proto.fromData = function fromData(data) {
2244
- Component.prototype.fromData.call(this, data);
2245
- };
2246
- _proto.toData = function toData() {
2247
- Component.prototype.toData.call(this);
2248
- };
2249
- _proto.dispose = function dispose() {
2250
- if (this.item) {
2251
- removeItem(this.item.rendererComponents, this);
2252
- }
2253
- Component.prototype.dispose.call(this);
2254
- };
2255
2236
  _create_class(RendererComponent, [
2256
2237
  {
2257
2238
  key: "priority",
@@ -3874,11 +3855,11 @@ EffectComponent = __decorate([
3874
3855
  effectsClass(DataType.EffectComponent)
3875
3856
  ], EffectComponent);
3876
3857
 
3877
- var PostProcessVolume = /*#__PURE__*/ function(Behaviour) {
3878
- _inherits(PostProcessVolume, Behaviour);
3858
+ var PostProcessVolume = /*#__PURE__*/ function(Component) {
3859
+ _inherits(PostProcessVolume, Component);
3879
3860
  function PostProcessVolume(engine) {
3880
3861
  var _this;
3881
- _this = Behaviour.call(this, engine) || this;
3862
+ _this = Component.call(this, engine) || this;
3882
3863
  _this.bloom = {
3883
3864
  threshold: 0,
3884
3865
  intensity: 0,
@@ -3909,7 +3890,7 @@ var PostProcessVolume = /*#__PURE__*/ function(Behaviour) {
3909
3890
  }
3910
3891
  };
3911
3892
  return PostProcessVolume;
3912
- }(Behaviour);
3893
+ }(Component);
3913
3894
  __decorate([
3914
3895
  serialize()
3915
3896
  ], PostProcessVolume.prototype, "bloom", void 0);
@@ -12746,6 +12727,10 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12746
12727
  RendererComponent.prototype.fromData.call(this, data);
12747
12728
  var _data_renderer;
12748
12729
  var renderer = (_data_renderer = data.renderer) != null ? _data_renderer : {};
12730
+ var maskProps = data.mask;
12731
+ if (maskProps && maskProps.ref) {
12732
+ maskProps.ref = this.engine.findObject(maskProps.ref);
12733
+ }
12749
12734
  var maskMode = this.maskManager.getMaskMode(data);
12750
12735
  // TODO 新蒙板上线后移除
12751
12736
  //-------------------------------------------------------------------------
@@ -12753,15 +12738,15 @@ function getBezier2DValue(out, t, p0, p1, cpx0, cpy0, cpx1, cpy1) {
12753
12738
  //@ts-expect-error
12754
12739
  var split = data.splits && !data.textureSheetAnimation ? data.splits[0] : undefined;
12755
12740
  var shapeGeometry = undefined;
12756
- if (shapeData !== undefined && !("aPoint" in shapeData && "index" in shapeData)) {
12741
+ if (shapeData !== undefined && shapeData !== null && !("aPoint" in shapeData && "index" in shapeData)) {
12757
12742
  shapeGeometry = getGeometryByShape(shapeData, split);
12758
12743
  }
12759
- var _renderer_renderMode, _renderer_blending, _renderer_texture, _renderer_side;
12744
+ var _renderer_renderMode, _renderer_blending, _renderer_side;
12760
12745
  //-------------------------------------------------------------------------
12761
12746
  this.renderer = {
12762
12747
  renderMode: (_renderer_renderMode = renderer.renderMode) != null ? _renderer_renderMode : RenderMode.MESH,
12763
12748
  blending: (_renderer_blending = renderer.blending) != null ? _renderer_blending : BlendingMode.ALPHA,
12764
- texture: (_renderer_texture = renderer.texture) != null ? _renderer_texture : this.engine.emptyTexture,
12749
+ texture: renderer.texture ? this.engine.findObject(renderer.texture) : this.engine.emptyTexture,
12765
12750
  occlusion: !!renderer.occlusion,
12766
12751
  transparentOcclusion: !!renderer.transparentOcclusion || maskMode === MaskMode.MASK,
12767
12752
  side: (_renderer_side = renderer.side) != null ? _renderer_side : SideMode.DOUBLE,
@@ -12978,14 +12963,14 @@ var ShapeComponent = /*#__PURE__*/ function(BaseRenderComponent) {
12978
12963
  var control2 = easingIns[pointIndex.easingIn];
12979
12964
  this.graphicsPath.bezierCurveTo(control1.x + lastPoint.x, control1.y + lastPoint.y, control2.x + point.x, control2.y + point.y, point.x, point.y, 1);
12980
12965
  }
12981
- var pointIndex1 = indices[0];
12982
- var lastPointIndex1 = indices[indices.length - 1];
12983
- var point1 = points[pointIndex1.point];
12984
- var lastPoint1 = points[lastPointIndex1.point];
12985
- var control11 = easingOuts[lastPointIndex1.easingOut];
12986
- var control21 = easingIns[pointIndex1.easingIn];
12987
- this.graphicsPath.bezierCurveTo(control11.x + lastPoint1.x, control11.y + lastPoint1.y, control21.x + point1.x, control21.y + point1.y, point1.x, point1.y, 1);
12988
12966
  if (shape.close) {
12967
+ var pointIndex1 = indices[0];
12968
+ var lastPointIndex1 = indices[indices.length - 1];
12969
+ var point1 = points[pointIndex1.point];
12970
+ var lastPoint1 = points[lastPointIndex1.point];
12971
+ var control11 = easingOuts[lastPointIndex1.easingOut];
12972
+ var control21 = easingIns[pointIndex1.easingIn];
12973
+ this.graphicsPath.bezierCurveTo(control11.x + lastPoint1.x, control11.y + lastPoint1.y, control21.x + point1.x, control21.y + point1.y, point1.x, point1.y, 1);
12989
12974
  this.graphicsPath.closePath();
12990
12975
  }
12991
12976
  }
@@ -13115,6 +13100,10 @@ var ShapeComponent = /*#__PURE__*/ function(BaseRenderComponent) {
13115
13100
  break;
13116
13101
  }
13117
13102
  }
13103
+ var maskProps = data.mask;
13104
+ if (maskProps && maskProps.ref) {
13105
+ maskProps.ref = this.engine.findObject(maskProps.ref);
13106
+ }
13118
13107
  var maskMode = this.maskManager.getMaskMode(data);
13119
13108
  var maskRef = this.maskManager.getRefValue();
13120
13109
  this.material.stencilRef = maskRef !== undefined ? [
@@ -13264,11 +13253,11 @@ var Fake3DAnimationMode;
13264
13253
  Fake3DAnimationMode[Fake3DAnimationMode["Linear"] = 1] = "Linear";
13265
13254
  })(Fake3DAnimationMode || (Fake3DAnimationMode = {}));
13266
13255
 
13267
- var CameraController = /*#__PURE__*/ function(Behaviour) {
13268
- _inherits(CameraController, Behaviour);
13256
+ var CameraController = /*#__PURE__*/ function(Component) {
13257
+ _inherits(CameraController, Component);
13269
13258
  function CameraController(engine, props) {
13270
13259
  var _this;
13271
- _this = Behaviour.call(this, engine) || this;
13260
+ _this = Component.call(this, engine) || this;
13272
13261
  if (props) {
13273
13262
  _this.fromData(props);
13274
13263
  }
@@ -13289,11 +13278,11 @@ var CameraController = /*#__PURE__*/ function(Behaviour) {
13289
13278
  }
13290
13279
  };
13291
13280
  _proto.fromData = function fromData(data) {
13292
- Behaviour.prototype.fromData.call(this, data);
13281
+ Component.prototype.fromData.call(this, data);
13293
13282
  this.options = data.options;
13294
13283
  };
13295
13284
  return CameraController;
13296
- }(Behaviour);
13285
+ }(Component);
13297
13286
  CameraController = __decorate([
13298
13287
  effectsClass(DataType.CameraController)
13299
13288
  ], CameraController);
@@ -19441,7 +19430,7 @@ var ParticleSystem = /*#__PURE__*/ function(Component) {
19441
19430
  mask: maskProps.maskRef,
19442
19431
  maskMode: maskProps.maskMode,
19443
19432
  forceTarget: forceTarget,
19444
- diffuse: renderer.texture,
19433
+ diffuse: renderer.texture ? this.engine.findObject(renderer.texture) : undefined,
19445
19434
  sizeOverLifetime: sizeOverLifetimeGetter,
19446
19435
  anchor: anchor
19447
19436
  };
@@ -19528,7 +19517,7 @@ var ParticleSystem = /*#__PURE__*/ function(Component) {
19528
19517
  maxTrailCount: options.maxCount,
19529
19518
  pointCountPerTrail: Math.round(trails.maxPointPerTrail) || 32,
19530
19519
  blending: trails.blending,
19531
- texture: trails.texture,
19520
+ texture: trails.texture ? this.engine.findObject(trails.texture) : undefined,
19532
19521
  opacityOverLifetime: createValueGetter(trails.opacityOverLifetime || 1),
19533
19522
  widthOverTrail: createValueGetter(trails.widthOverTrail || 1),
19534
19523
  // order: vfxItem.listIndex + (trails.orderOffset || 0),
@@ -19567,8 +19556,9 @@ var ParticleSystem = /*#__PURE__*/ function(Component) {
19567
19556
  var maskRef = 0;
19568
19557
  if (data.mask) {
19569
19558
  var _data_mask = data.mask, mode = _data_mask.mode, ref = _data_mask.ref;
19559
+ var refComponent = this.engine.findObject(ref);
19570
19560
  maskMode = mode;
19571
- maskRef = ref.maskManager.getRefValue();
19561
+ maskRef = refComponent.maskManager.getRefValue();
19572
19562
  }
19573
19563
  return {
19574
19564
  maskMode: maskMode,
@@ -20656,13 +20646,11 @@ Vector2PropertyPlayableAsset = __decorate([
20656
20646
  effectsClass(DataType.Vector2PropertyPlayableAsset)
20657
20647
  ], Vector2PropertyPlayableAsset);
20658
20648
 
20659
- /**
20660
- * @since 2.0.0
20661
- */ var CompositionComponent = /*#__PURE__*/ function(Behaviour) {
20662
- _inherits(CompositionComponent, Behaviour);
20649
+ var CompositionComponent = /*#__PURE__*/ function(Component) {
20650
+ _inherits(CompositionComponent, Component);
20663
20651
  function CompositionComponent() {
20664
20652
  var _this;
20665
- _this = Behaviour.apply(this, arguments) || this;
20653
+ _this = Component.apply(this, arguments) || this;
20666
20654
  _this.time = 0;
20667
20655
  _this.startTime = 0;
20668
20656
  _this.items = [] // 场景的所有元素
@@ -20838,13 +20826,10 @@ Vector2PropertyPlayableAsset = __decorate([
20838
20826
  return startOrder;
20839
20827
  };
20840
20828
  _proto.fromData = function fromData(data) {
20841
- Behaviour.prototype.fromData.call(this, data);
20829
+ Component.prototype.fromData.call(this, data);
20842
20830
  var compositionData = data;
20843
- this.items = compositionData.items;
20844
20831
  var _compositionData_startTime;
20845
20832
  this.startTime = (_compositionData_startTime = compositionData.startTime) != null ? _compositionData_startTime : 0;
20846
- this.sceneBindings = compositionData.sceneBindings;
20847
- this.timelineAsset = compositionData.timelineAsset;
20848
20833
  };
20849
20834
  _proto.resolveBindings = function resolveBindings() {
20850
20835
  for(var _iterator = _create_for_of_iterator_helper_loose(this.sceneBindings), _step; !(_step = _iterator()).done;){
@@ -20867,7 +20852,19 @@ Vector2PropertyPlayableAsset = __decorate([
20867
20852
  }
20868
20853
  };
20869
20854
  return CompositionComponent;
20870
- }(Behaviour);
20855
+ }(Component);
20856
+ __decorate([
20857
+ serialize()
20858
+ ], CompositionComponent.prototype, "items", void 0);
20859
+ __decorate([
20860
+ serialize()
20861
+ ], CompositionComponent.prototype, "sceneBindings", void 0);
20862
+ __decorate([
20863
+ serialize()
20864
+ ], CompositionComponent.prototype, "timelineAsset", void 0);
20865
+ CompositionComponent = __decorate([
20866
+ effectsClass("CompositionComponent")
20867
+ ], CompositionComponent);
20871
20868
 
20872
20869
  /**
20873
20870
  *
@@ -21059,482 +21056,6 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
21059
21056
  // }
21060
21057
  (TickData);
21061
21058
 
21062
- var SerializationHelper = /*#__PURE__*/ function() {
21063
- function SerializationHelper() {}
21064
- SerializationHelper.collectSerializableObject = function collectSerializableObject(effectsObject, res) {
21065
- if (res[effectsObject.getInstanceId()]) {
21066
- return;
21067
- }
21068
- effectsObject.toData();
21069
- res[effectsObject.getInstanceId()] = effectsObject;
21070
- var serializedProperties = getMergedStore(effectsObject);
21071
- if (serializedProperties) {
21072
- for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializedProperties)), _step; !(_step = _iterator()).done;){
21073
- var key = _step.value;
21074
- // TODO 待移除,序列化属性通过 effectsObject 对象直接获取
21075
- var value = effectsObject.taggedProperties[key];
21076
- if (value === undefined) {
21077
- value = effectsObject[key];
21078
- }
21079
- if (EffectsObject.is(value)) {
21080
- SerializationHelper.collectSerializableObject(value, res);
21081
- } else if (isArray(value)) {
21082
- for(var _iterator1 = _create_for_of_iterator_helper_loose(value), _step1; !(_step1 = _iterator1()).done;){
21083
- var arrayValue = _step1.value;
21084
- if (EffectsObject.is(arrayValue)) {
21085
- SerializationHelper.collectSerializableObject(arrayValue, res);
21086
- }
21087
- }
21088
- } else if (isObject(value)) {
21089
- // 非 EffectsObject 对象只递归一层
21090
- for(var _iterator2 = _create_for_of_iterator_helper_loose(Object.keys(value)), _step2; !(_step2 = _iterator2()).done;){
21091
- var objectKey = _step2.value;
21092
- var objectValue = value[objectKey];
21093
- if (EffectsObject.is(objectValue)) {
21094
- SerializationHelper.collectSerializableObject(objectValue, res);
21095
- }
21096
- }
21097
- }
21098
- }
21099
- }
21100
- };
21101
- SerializationHelper.serializeEffectObject = function serializeEffectObject(effectsObject) {
21102
- // 持有所有需要序列化的引擎对象
21103
- var serializableMap = {};
21104
- var engine = effectsObject.engine;
21105
- // 加入内存中已加载的资产数据,避免重复创建资产数据
21106
- var serializedDatas = _extends({}, engine.jsonSceneData);
21107
- // 递归收集所有需要序列化的对象
21108
- SerializationHelper.collectSerializableObject(effectsObject, serializableMap);
21109
- // 依次序列化
21110
- for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializableMap)), _step; !(_step = _iterator()).done;){
21111
- var guid = _step.value;
21112
- var serializeObject = serializableMap[guid];
21113
- if (!serializedDatas[serializeObject.getInstanceId()]) {
21114
- serializedDatas[serializeObject.getInstanceId()] = {};
21115
- }
21116
- SerializationHelper.serialize(serializeObject, serializedDatas[serializeObject.getInstanceId()]);
21117
- }
21118
- return serializedDatas;
21119
- };
21120
- SerializationHelper.serialize = function serialize(effectsObject, serializedData) {
21121
- effectsObject.toData();
21122
- if (!serializedData) {
21123
- serializedData = {};
21124
- }
21125
- var serializedProperties = getMergedStore(effectsObject);
21126
- if (serializedProperties) {
21127
- for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializedProperties)), _step; !(_step = _iterator()).done;){
21128
- var key = _step.value;
21129
- var value = effectsObject[key];
21130
- if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || SerializationHelper.checkTypedArray(value)) {
21131
- // TODO json 数据避免传 typedArray
21132
- serializedData[key] = value;
21133
- } else if (isArray(value)) {
21134
- if (!serializedData[key]) {
21135
- serializedData[key] = [];
21136
- }
21137
- SerializationHelper.serializeArrayProperty(value, serializedData[key], 0);
21138
- } else if (EffectsObject.is(value)) {
21139
- // TODO 处理 EffectsObject 递归序列化
21140
- serializedData[key] = {
21141
- id: value.getInstanceId()
21142
- };
21143
- } else if (isObject(value)) {
21144
- if (!serializedData[key]) {
21145
- serializedData[key] = {};
21146
- }
21147
- SerializationHelper.serializeObjectProperty(value, serializedData[key], 0);
21148
- }
21149
- }
21150
- }
21151
- // TODO 待移除 tagggedProperties 为没有装饰器的临时方案
21152
- for(var _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(effectsObject.taggedProperties)), _step1; !(_step1 = _iterator1()).done;){
21153
- var key1 = _step1.value;
21154
- var value1 = effectsObject.taggedProperties[key1];
21155
- if (typeof value1 === "number" || typeof value1 === "string" || typeof value1 === "boolean" || SerializationHelper.checkTypedArray(value1)) {
21156
- // TODO json 数据避免传 typedArray
21157
- serializedData[key1] = value1;
21158
- } else if (isArray(value1)) {
21159
- if (!serializedData[key1]) {
21160
- serializedData[key1] = [];
21161
- }
21162
- SerializationHelper.serializeArrayProperty(value1, serializedData[key1], 0);
21163
- } else if (EffectsObject.is(value1)) {
21164
- // TODO 处理 EffectsObject 递归序列化
21165
- serializedData[key1] = {
21166
- id: value1.getInstanceId()
21167
- };
21168
- } else if (isObject(value1)) {
21169
- if (!serializedData[key1]) {
21170
- serializedData[key1] = {};
21171
- }
21172
- SerializationHelper.serializeObjectProperty(value1, serializedData[key1], 0);
21173
- }
21174
- }
21175
- return serializedData;
21176
- };
21177
- SerializationHelper.deserialize = function deserialize(serializedData, effectsObject) {
21178
- var taggedProperties = effectsObject.taggedProperties;
21179
- var serializedProperties = getMergedStore(effectsObject);
21180
- var engine = effectsObject.engine;
21181
- for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializedData)), _step; !(_step = _iterator()).done;){
21182
- var key = _step.value;
21183
- if (serializedProperties && serializedProperties[key]) {
21184
- continue;
21185
- }
21186
- var value = serializedData[key];
21187
- taggedProperties[key] = SerializationHelper.deserializeProperty(value, engine, 0);
21188
- }
21189
- if (serializedProperties) {
21190
- for(var _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(serializedProperties)), _step1; !(_step1 = _iterator1()).done;){
21191
- var key1 = _step1.value;
21192
- var value1 = serializedData[key1];
21193
- if (value1 === undefined) {
21194
- continue;
21195
- }
21196
- var propertyType = serializedProperties[key1].type;
21197
- // FIXME: taggedProperties 为 readonly,这里存在强制赋值
21198
- // @ts-expect-error
21199
- effectsObject[key1] = SerializationHelper.deserializeProperty(value1, engine, 0, propertyType);
21200
- }
21201
- }
21202
- effectsObject.fromData(taggedProperties);
21203
- };
21204
- SerializationHelper.deserializeAsync = function deserializeAsync(serializedData, effectsObject) {
21205
- return _async_to_generator(function() {
21206
- var taggedProperties, serializedProperties, engine, _iterator, _step, key, value, _iterator1, _step1, key1, value1, propertyType;
21207
- return __generator(this, function(_state) {
21208
- switch(_state.label){
21209
- case 0:
21210
- taggedProperties = effectsObject.taggedProperties;
21211
- serializedProperties = getMergedStore(effectsObject);
21212
- engine = effectsObject.engine;
21213
- _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializedData));
21214
- _state.label = 1;
21215
- case 1:
21216
- if (!!(_step = _iterator()).done) return [
21217
- 3,
21218
- 4
21219
- ];
21220
- key = _step.value;
21221
- if (serializedProperties && serializedProperties[key]) {
21222
- return [
21223
- 3,
21224
- 3
21225
- ];
21226
- }
21227
- value = serializedData[key];
21228
- return [
21229
- 4,
21230
- SerializationHelper.deserializePropertyAsync(value, engine, 0)
21231
- ];
21232
- case 2:
21233
- taggedProperties[key] = _state.sent();
21234
- _state.label = 3;
21235
- case 3:
21236
- return [
21237
- 3,
21238
- 1
21239
- ];
21240
- case 4:
21241
- if (!serializedProperties) return [
21242
- 3,
21243
- 8
21244
- ];
21245
- _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(serializedProperties));
21246
- _state.label = 5;
21247
- case 5:
21248
- if (!!(_step1 = _iterator1()).done) return [
21249
- 3,
21250
- 8
21251
- ];
21252
- key1 = _step1.value;
21253
- value1 = serializedData[key1];
21254
- if (value1 === undefined) {
21255
- return [
21256
- 3,
21257
- 7
21258
- ];
21259
- }
21260
- propertyType = serializedProperties[key1].type;
21261
- return [
21262
- 4,
21263
- SerializationHelper.deserializePropertyAsync(value1, engine, 0, propertyType)
21264
- ];
21265
- case 6:
21266
- // FIXME: taggedProperties 为 readonly,这里存在强制赋值
21267
- // @ts-expect-error
21268
- effectsObject[key1] = _state.sent();
21269
- _state.label = 7;
21270
- case 7:
21271
- return [
21272
- 3,
21273
- 5
21274
- ];
21275
- case 8:
21276
- effectsObject.fromData(taggedProperties);
21277
- return [
21278
- 2
21279
- ];
21280
- }
21281
- });
21282
- })();
21283
- };
21284
- SerializationHelper.checkTypedArray = function checkTypedArray(obj) {
21285
- return _instanceof1(obj, Int8Array) || _instanceof1(obj, Uint8Array) || _instanceof1(obj, Uint8ClampedArray) || _instanceof1(obj, Int16Array) || _instanceof1(obj, Uint16Array) || _instanceof1(obj, Int32Array) || _instanceof1(obj, Uint32Array) || _instanceof1(obj, Float32Array) || _instanceof1(obj, Float64Array) || _instanceof1(obj, ArrayBuffer);
21286
- };
21287
- // check value is { id: 7e69662e964e4892ae8933f24562395b }
21288
- SerializationHelper.checkDataPath = function checkDataPath(value) {
21289
- return !!(isObject(value) && Object.keys(value).length === 1 && "id" in value && isString(value.id) && value.id.length === 32);
21290
- };
21291
- // TODO 测试函数,2.0 上线后移除
21292
- SerializationHelper.checkGLTFNode = function checkGLTFNode(value) {
21293
- return isObject(value) && value.nodeIndex !== undefined && value.isJoint !== undefined;
21294
- };
21295
- SerializationHelper.checkImageSource = function checkImageSource(value) {
21296
- return isCanvas(value) || _instanceof1(value, HTMLImageElement);
21297
- };
21298
- SerializationHelper.deserializeProperty = function deserializeProperty(property, engine, level, type) {
21299
- if (level > 14) {
21300
- console.error("The nested object layers of the serialized data exceed the maximum limit.");
21301
- return;
21302
- }
21303
- // 加载并链接 DataPath 字段表示的 EffectsObject 引用。Class 对象 copy [key, value] 会丢失对象信息,因此只递归数组对象和普通 js Object 结构对象。
21304
- if (isArray(property)) {
21305
- var res = [];
21306
- for(var _iterator = _create_for_of_iterator_helper_loose(property), _step; !(_step = _iterator()).done;){
21307
- var value = _step.value;
21308
- res.push(SerializationHelper.deserializeProperty(value, engine, level + 1, type));
21309
- }
21310
- return res;
21311
- // TODO json 数据避免传 typedArray
21312
- } else if (SerializationHelper.checkDataPath(property)) {
21313
- return engine.assetLoader.loadGUID(property.id);
21314
- } else if (isObject(property) && property.constructor === Object) {
21315
- var res1;
21316
- if (type) {
21317
- res1 = new type();
21318
- } else {
21319
- res1 = {};
21320
- }
21321
- for(var _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(property)), _step1; !(_step1 = _iterator1()).done;){
21322
- var key = _step1.value;
21323
- res1[key] = SerializationHelper.deserializeProperty(property[key], engine, level + 1);
21324
- }
21325
- return res1;
21326
- } else {
21327
- return property;
21328
- }
21329
- };
21330
- SerializationHelper.deserializePropertyAsync = function deserializePropertyAsync(property, engine, level, type) {
21331
- return _async_to_generator(function() {
21332
- var res, _iterator, _step, value, _, res1, res2, _iterator1, _step1, key;
21333
- return __generator(this, function(_state) {
21334
- switch(_state.label){
21335
- case 0:
21336
- if (level > 14) {
21337
- console.error("The nested object layers of the serialized data exceed the maximum limit.");
21338
- return [
21339
- 2
21340
- ];
21341
- }
21342
- if (!isArray(property)) return [
21343
- 3,
21344
- 5
21345
- ];
21346
- res = [];
21347
- _iterator = _create_for_of_iterator_helper_loose(property);
21348
- _state.label = 1;
21349
- case 1:
21350
- if (!!(_step = _iterator()).done) return [
21351
- 3,
21352
- 4
21353
- ];
21354
- value = _step.value;
21355
- _ = res.push;
21356
- return [
21357
- 4,
21358
- SerializationHelper.deserializePropertyAsync(value, engine, level + 1, type)
21359
- ];
21360
- case 2:
21361
- _.apply(res, [
21362
- _state.sent()
21363
- ]);
21364
- _state.label = 3;
21365
- case 3:
21366
- return [
21367
- 3,
21368
- 1
21369
- ];
21370
- case 4:
21371
- return [
21372
- 2,
21373
- res
21374
- ];
21375
- case 5:
21376
- if (!SerializationHelper.checkDataPath(property)) return [
21377
- 3,
21378
- 7
21379
- ];
21380
- return [
21381
- 4,
21382
- engine.assetLoader.loadGUIDAsync(property.id)
21383
- ];
21384
- case 6:
21385
- res1 = _state.sent();
21386
- return [
21387
- 2,
21388
- res1
21389
- ];
21390
- case 7:
21391
- if (!(isObject(property) && property.constructor === Object)) return [
21392
- 3,
21393
- 12
21394
- ];
21395
- if (type) {
21396
- res2 = new type();
21397
- } else {
21398
- res2 = {};
21399
- }
21400
- _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(property));
21401
- _state.label = 8;
21402
- case 8:
21403
- if (!!(_step1 = _iterator1()).done) return [
21404
- 3,
21405
- 11
21406
- ];
21407
- key = _step1.value;
21408
- return [
21409
- 4,
21410
- SerializationHelper.deserializePropertyAsync(property[key], engine, level + 1)
21411
- ];
21412
- case 9:
21413
- res2[key] = _state.sent();
21414
- _state.label = 10;
21415
- case 10:
21416
- return [
21417
- 3,
21418
- 8
21419
- ];
21420
- case 11:
21421
- return [
21422
- 2,
21423
- res2
21424
- ];
21425
- case 12:
21426
- return [
21427
- 2,
21428
- property
21429
- ];
21430
- case 13:
21431
- return [
21432
- 2
21433
- ];
21434
- }
21435
- });
21436
- })();
21437
- };
21438
- SerializationHelper.serializeObjectProperty = function serializeObjectProperty(objectProperty, serializedData, level) {
21439
- if (level > 14) {
21440
- console.error("The nested object layers of the serialized data exceed the maximum limit.");
21441
- return;
21442
- }
21443
- if (!serializedData) {
21444
- serializedData = {};
21445
- }
21446
- for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(objectProperty)), _step; !(_step = _iterator()).done;){
21447
- var key = _step.value;
21448
- var value = objectProperty[key];
21449
- if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || SerializationHelper.checkTypedArray(objectProperty)) {
21450
- // TODO json 数据避免传 typedArray
21451
- serializedData[key] = value;
21452
- } else if (isArray(value)) {
21453
- if (!serializedData[key]) {
21454
- serializedData[key] = [];
21455
- }
21456
- SerializationHelper.serializeArrayProperty(value, serializedData[key], level + 1);
21457
- } else if (EffectsObject.is(value)) {
21458
- // TODO 处理 EffectsObject 递归序列化
21459
- serializedData[key] = {
21460
- id: value.getInstanceId()
21461
- };
21462
- } else if (isObject(value)) {
21463
- if (!serializedData[key]) {
21464
- serializedData[key] = {};
21465
- }
21466
- SerializationHelper.serializeObjectProperty(value, serializedData[key], level + 1);
21467
- }
21468
- }
21469
- };
21470
- SerializationHelper.serializeArrayProperty = function serializeArrayProperty(arrayProperty, serializedData, level) {
21471
- if (level > 14) {
21472
- console.error("The nested object layers of the serialized data exceed the maximum limit.");
21473
- return;
21474
- }
21475
- if (!serializedData) {
21476
- serializedData = [];
21477
- }
21478
- for(var i = 0; i < arrayProperty.length; i++){
21479
- var value = arrayProperty[i];
21480
- if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || SerializationHelper.checkTypedArray(arrayProperty)) {
21481
- // TODO json 数据避免传 typedArray
21482
- serializedData[i] = value;
21483
- } else if (isArray(value)) {
21484
- if (!serializedData[i]) {
21485
- serializedData[i] = [];
21486
- }
21487
- SerializationHelper.serializeArrayProperty(value, serializedData[i], level + 1);
21488
- } else if (EffectsObject.is(value)) {
21489
- // TODO 处理 EffectsObject 递归序列化
21490
- serializedData[i] = {
21491
- id: value.getInstanceId()
21492
- };
21493
- } else if (isObject(value)) {
21494
- if (!serializedData[i]) {
21495
- serializedData[i] = {};
21496
- }
21497
- SerializationHelper.serializeObjectProperty(value, serializedData[i], level + 1);
21498
- }
21499
- }
21500
- };
21501
- return SerializationHelper;
21502
- }();
21503
-
21504
- var _obj$2;
21505
- /**
21506
- * 机型和渲染等级对应表
21507
- *
21508
- * 机型:B-低端机、A-中端机、S-高端机
21509
- * 渲染等级:B-低、A-中、S-高、A+-中高、B+-全部
21510
- *
21511
- * - S(高端机):高、全部、中高
21512
- * - A(中端机):中、全部、中高
21513
- * - B(低端机):低、全部
21514
- * - undefined(全部机型)
21515
- */ var renderLevelPassSet = (_obj$2 = {}, _obj$2[RenderLevel.S] = [
21516
- RenderLevel.S,
21517
- RenderLevel.BPlus,
21518
- RenderLevel.APlus
21519
- ], _obj$2[RenderLevel.A] = [
21520
- RenderLevel.A,
21521
- RenderLevel.BPlus,
21522
- RenderLevel.APlus
21523
- ], _obj$2[RenderLevel.B] = [
21524
- RenderLevel.B,
21525
- RenderLevel.BPlus
21526
- ], _obj$2);
21527
- function passRenderLevel(l, renderLevel) {
21528
- if (!l || !renderLevel) {
21529
- return true;
21530
- }
21531
- var arr = renderLevelPassSet[renderLevel];
21532
- if (arr) {
21533
- return arr.includes(l);
21534
- }
21535
- return false;
21536
- }
21537
-
21538
21059
  /**
21539
21060
  * 合成抽象类:核心对象,通常一个场景只包含一个合成,可能会有多个合成。
21540
21061
  * 合成中包含了相关的 Item 元素,支持对 Item 元素的创建、更新和销毁。
@@ -21600,10 +21121,16 @@ function passRenderLevel(l, renderLevel) {
21600
21121
  _this.rootItem.duration = sourceContent.duration;
21601
21122
  _this.rootItem.endBehavior = sourceContent.endBehavior;
21602
21123
  _this.rootItem.composition = _assert_this_initialized(_this);
21603
- // Create rootCompositionComponent
21604
- _this.rootComposition = _this.rootItem.addComponent(CompositionComponent);
21605
- filterItemsByRenderLevel(sourceContent, _this.getEngine(), scene.renderLevel);
21606
- SerializationHelper.deserialize(sourceContent, _this.rootComposition);
21124
+ // Create rootItem components
21125
+ //@ts-expect-error TODO update spec.
21126
+ var componentPaths = sourceContent.components;
21127
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(componentPaths), _step1; !(_step1 = _iterator1()).done;){
21128
+ var componentPath = _step1.value;
21129
+ var component = _this.getEngine().findObject(componentPath);
21130
+ _this.rootItem.components.push(component);
21131
+ component.item = _this.rootItem;
21132
+ }
21133
+ _this.rootComposition = _this.rootItem.getComponent(CompositionComponent);
21607
21134
  _this.width = width;
21608
21135
  _this.height = height;
21609
21136
  _this.renderOrder = baseRenderOrder;
@@ -21631,7 +21158,7 @@ function passRenderLevel(l, renderLevel) {
21631
21158
  _this.handleItemMessage = handleItemMessage;
21632
21159
  _this.createRenderFrame();
21633
21160
  _this.rendererOptions = null;
21634
- _this.buildItemTree(_this.rootItem);
21161
+ Composition.buildItemTree(_this.rootItem);
21635
21162
  _this.rootComposition.setChildrenRenderOrder(0);
21636
21163
  _this.pluginSystem.resetComposition(_assert_this_initialized(_this), _this.renderFrame);
21637
21164
  return _this;
@@ -21849,38 +21376,6 @@ function passRenderLevel(l, renderLevel) {
21849
21376
  }
21850
21377
  };
21851
21378
  /**
21852
- * 构建父子树,同时保存到 itemCacheMap 中便于查找
21853
- */ _proto.buildItemTree = function buildItemTree(compVFXItem) {
21854
- if (!compVFXItem.composition) {
21855
- return;
21856
- }
21857
- var itemMap = new Map();
21858
- var contentItems = compVFXItem.getComponent(CompositionComponent).items;
21859
- for(var _iterator = _create_for_of_iterator_helper_loose(contentItems), _step; !(_step = _iterator()).done;){
21860
- var item = _step.value;
21861
- itemMap.set(item.id, item);
21862
- }
21863
- for(var _iterator1 = _create_for_of_iterator_helper_loose(contentItems), _step1; !(_step1 = _iterator1()).done;){
21864
- var item1 = _step1.value;
21865
- if (item1.parentId === undefined) {
21866
- item1.setParent(compVFXItem);
21867
- } else {
21868
- var parent = itemMap.get(item1.parentId);
21869
- if (parent) {
21870
- item1.setParent(parent);
21871
- } else {
21872
- throw new Error("The element references a non-existent element, please check the data.");
21873
- }
21874
- }
21875
- }
21876
- for(var _iterator2 = _create_for_of_iterator_helper_loose(contentItems), _step2; !(_step2 = _iterator2()).done;){
21877
- var item2 = _step2.value;
21878
- if (VFXItem.isComposition(item2)) {
21879
- this.buildItemTree(item2);
21880
- }
21881
- }
21882
- };
21883
- /**
21884
21379
  * 更新视频数据到纹理
21885
21380
  * @override
21886
21381
  */ _proto.updateVideo = function updateVideo() {
@@ -22239,6 +21734,30 @@ function passRenderLevel(l, renderLevel) {
22239
21734
  });
22240
21735
  })();
22241
21736
  };
21737
+ /**
21738
+ * @internal
21739
+ * 构建父子树,同时保存到 itemCacheMap 中便于查找
21740
+ */ Composition.buildItemTree = function buildItemTree(compVFXItem) {
21741
+ var itemMap = new Map();
21742
+ var contentItems = compVFXItem.getComponent(CompositionComponent).items;
21743
+ for(var _iterator = _create_for_of_iterator_helper_loose(contentItems), _step; !(_step = _iterator()).done;){
21744
+ var item = _step.value;
21745
+ itemMap.set(item.id, item);
21746
+ }
21747
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(contentItems), _step1; !(_step1 = _iterator1()).done;){
21748
+ var item1 = _step1.value;
21749
+ if (item1.parentId === undefined) {
21750
+ item1.setParent(compVFXItem);
21751
+ } else {
21752
+ var parent = itemMap.get(item1.parentId);
21753
+ if (parent) {
21754
+ item1.setParent(parent);
21755
+ } else {
21756
+ throw new Error("The element references a non-existent element, please check the data.");
21757
+ }
21758
+ }
21759
+ }
21760
+ };
22242
21761
  _create_class(Composition, [
22243
21762
  {
22244
21763
  key: "transform",
@@ -22300,25 +21819,6 @@ function passRenderLevel(l, renderLevel) {
22300
21819
  ]);
22301
21820
  return Composition;
22302
21821
  }(EventEmitter);
22303
- function filterItemsByRenderLevel(composition, engine, renderLevel) {
22304
- var items = [];
22305
- for(var _iterator = _create_for_of_iterator_helper_loose(composition.items), _step; !(_step = _iterator()).done;){
22306
- var itemDataPath = _step.value;
22307
- var itemProps = engine.findEffectsObjectData(itemDataPath.id);
22308
- if (passRenderLevel(itemProps.renderLevel, renderLevel)) {
22309
- items.push(itemDataPath);
22310
- } else {
22311
- // 非预合成元素未达到渲染等级的转化为空节点。
22312
- // 预合成元素有根据 item type 的子元素加载判断,没法保留空节点,这边先整体过滤掉。
22313
- if (itemProps.type !== ItemType.composition) {
22314
- itemProps.components = [];
22315
- items.push(itemDataPath);
22316
- }
22317
- }
22318
- }
22319
- composition.items = items;
22320
- return composition;
22321
- }
22322
21822
 
22323
21823
  var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22324
21824
  _inherits(VFXItem, EffectsObject);
@@ -22331,7 +21831,7 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22331
21831
  */ _this.transform = new Transform();
22332
21832
  /**
22333
21833
  * 元素动画的当前时间
22334
- */ _this.time = 0;
21834
+ */ _this.time = -1;
22335
21835
  /**
22336
21836
  * 元素动画的持续时间
22337
21837
  */ _this.duration = 0;
@@ -22342,9 +21842,8 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22342
21842
  * 元素动画结束时行为(如何处理元素)
22343
21843
  */ _this.endBehavior = EndBehavior.forward;
22344
21844
  _this.type = ItemType.base;
22345
- _this.isDuringPlay = false;
22346
21845
  _this.components = [];
22347
- _this.rendererComponents = [];
21846
+ _this.isDuringPlay = false;
22348
21847
  /**
22349
21848
  * 元素是否激活
22350
21849
  */ _this.active = true;
@@ -22612,6 +22111,25 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22612
22111
  return undefined;
22613
22112
  };
22614
22113
  /**
22114
+ * 复制 VFXItem,返回一个新的 VFXItem
22115
+ * @since 2.4.0
22116
+ * @returns 复制的新 VFXItem
22117
+ */ _proto.duplicate = function duplicate() {
22118
+ var previousObjectIDMap = new Map();
22119
+ this.gatherPreviousObjectID(previousObjectIDMap);
22120
+ // 重新设置当前元素和组件的 ID 以及子元素和子元素组件的 ID,避免实例化新的对象时产生碰撞
22121
+ this.resetGUID();
22122
+ var newItem = this.engine.findObject({
22123
+ id: this.defination.id
22124
+ });
22125
+ newItem.resetGUID();
22126
+ this.resetGUID(previousObjectIDMap);
22127
+ if (this.composition) {
22128
+ newItem.setParent(this.composition.rootItem);
22129
+ }
22130
+ return newItem;
22131
+ };
22132
+ /**
22615
22133
  * @internal
22616
22134
  */ _proto.beginPlay = function beginPlay() {
22617
22135
  this.isDuringPlay = true;
@@ -22706,19 +22224,18 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22706
22224
  if (duration < 0) {
22707
22225
  throw new Error("Item duration can't be less than 0, see " + HELP_LINK["Item duration can't be less than 0"] + ".");
22708
22226
  }
22709
- this.rendererComponents.length = 0;
22710
- for(var _iterator = _create_for_of_iterator_helper_loose(this.components), _step; !(_step = _iterator()).done;){
22711
- var component = _step.value;
22712
- component.item = this;
22713
- if (_instanceof1(component, RendererComponent)) {
22714
- this.rendererComponents.push(component);
22715
- }
22716
- // TODO ParticleSystemRenderer 现在是动态生成的,后面需要在 json 中单独表示为一个组件
22717
- if (_instanceof1(component, ParticleSystem)) {
22718
- if (!this.components.includes(component.renderer)) {
22719
- this.components.push(component.renderer);
22227
+ if (data.components) {
22228
+ this.components.length = 0;
22229
+ for(var _iterator = _create_for_of_iterator_helper_loose(data.components), _step; !(_step = _iterator()).done;){
22230
+ var componentPath = _step.value;
22231
+ var component = this.engine.findObject(componentPath);
22232
+ this.components.push(component);
22233
+ // TODO ParticleSystemRenderer 现在是动态生成的,后面需要在 json 中单独表示为一个组件
22234
+ if (_instanceof1(component, ParticleSystem)) {
22235
+ if (!this.components.includes(component.renderer)) {
22236
+ this.components.push(component.renderer);
22237
+ }
22720
22238
  }
22721
- this.rendererComponents.push(component.renderer);
22722
22239
  }
22723
22240
  }
22724
22241
  if (VFXItem.isComposition(this)) {
@@ -22727,24 +22244,24 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22727
22244
  };
22728
22245
  _proto.toData = function toData() {
22729
22246
  var _this_parent;
22730
- this.taggedProperties.id = this.guid;
22731
- this.taggedProperties.transform = this.transform.toData();
22732
- this.taggedProperties.dataType = DataType.VFXItemData;
22247
+ this.defination.id = this.guid;
22248
+ this.defination.transform = this.transform.toData();
22249
+ this.defination.dataType = DataType.VFXItemData;
22733
22250
  if (((_this_parent = this.parent) == null ? void 0 : _this_parent.name) !== "rootItem") {
22734
22251
  var _this_parent1;
22735
- this.taggedProperties.parentId = (_this_parent1 = this.parent) == null ? void 0 : _this_parent1.guid;
22252
+ this.defination.parentId = (_this_parent1 = this.parent) == null ? void 0 : _this_parent1.guid;
22736
22253
  }
22737
22254
  // TODO 统一 sprite 等其他组件的序列化逻辑
22738
- if (!this.taggedProperties.components) {
22739
- this.taggedProperties.components = [];
22255
+ if (!this.defination.components) {
22256
+ this.defination.components = [];
22740
22257
  for(var _iterator = _create_for_of_iterator_helper_loose(this.components), _step; !(_step = _iterator()).done;){
22741
22258
  var component = _step.value;
22742
22259
  if (_instanceof1(component, EffectComponent)) {
22743
- this.taggedProperties.components.push(component);
22260
+ this.defination.components.push(component);
22744
22261
  }
22745
22262
  }
22746
22263
  }
22747
- this.taggedProperties.content = {};
22264
+ this.defination.content = {};
22748
22265
  };
22749
22266
  _proto.translateByPixel = function translateByPixel(x, y) {
22750
22267
  if (this.composition) {
@@ -22801,17 +22318,52 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22801
22318
  if (!props) {
22802
22319
  throw new Error("Referenced precomposition with Id: " + refId + " does not exist.");
22803
22320
  }
22804
- var compositionComponent = this.addComponent(CompositionComponent);
22805
- filterItemsByRenderLevel(props, this.engine, this.engine.renderLevel);
22806
- SerializationHelper.deserialize(props, compositionComponent);
22807
- for(var _iterator = _create_for_of_iterator_helper_loose(compositionComponent.items), _step; !(_step = _iterator()).done;){
22808
- var vfxItem = _step.value;
22809
- vfxItem.setInstanceId(generateGUID());
22810
- for(var _iterator1 = _create_for_of_iterator_helper_loose(vfxItem.components), _step1; !(_step1 = _iterator1()).done;){
22811
- var component = _step1.value;
22812
- component.setInstanceId(generateGUID());
22321
+ //@ts-expect-error TODO update spec.
22322
+ var componentPaths = props.components;
22323
+ for(var _iterator = _create_for_of_iterator_helper_loose(componentPaths), _step; !(_step = _iterator()).done;){
22324
+ var componentPath = _step.value;
22325
+ var component = this.engine.findObject(componentPath);
22326
+ component.item = this;
22327
+ this.components.push(component);
22328
+ component.setInstanceId(generateGUID());
22329
+ if (_instanceof1(component, CompositionComponent)) {
22330
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(component.items), _step1; !(_step1 = _iterator1()).done;){
22331
+ var vfxItem = _step1.value;
22332
+ vfxItem.setInstanceId(generateGUID());
22333
+ for(var _iterator2 = _create_for_of_iterator_helper_loose(vfxItem.components), _step2; !(_step2 = _iterator2()).done;){
22334
+ var component1 = _step2.value;
22335
+ component1.setInstanceId(generateGUID());
22336
+ }
22337
+ }
22813
22338
  }
22814
22339
  }
22340
+ Composition.buildItemTree(this);
22341
+ };
22342
+ _proto.resetGUID = function resetGUID(previousObjectIDMap) {
22343
+ var _previousObjectIDMap_get;
22344
+ var itemGUID = (_previousObjectIDMap_get = previousObjectIDMap == null ? void 0 : previousObjectIDMap.get(this)) != null ? _previousObjectIDMap_get : generateGUID();
22345
+ this.setInstanceId(itemGUID);
22346
+ for(var _iterator = _create_for_of_iterator_helper_loose(this.components), _step; !(_step = _iterator()).done;){
22347
+ var component = _step.value;
22348
+ var _previousObjectIDMap_get1;
22349
+ var componentGUID = (_previousObjectIDMap_get1 = previousObjectIDMap == null ? void 0 : previousObjectIDMap.get(component)) != null ? _previousObjectIDMap_get1 : generateGUID();
22350
+ component.setInstanceId(componentGUID);
22351
+ }
22352
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(this.children), _step1; !(_step1 = _iterator1()).done;){
22353
+ var child = _step1.value;
22354
+ child.resetGUID(previousObjectIDMap);
22355
+ }
22356
+ };
22357
+ _proto.gatherPreviousObjectID = function gatherPreviousObjectID(previousObjectIDMap) {
22358
+ previousObjectIDMap.set(this, this.getInstanceId());
22359
+ for(var _iterator = _create_for_of_iterator_helper_loose(this.components), _step; !(_step = _iterator()).done;){
22360
+ var component = _step.value;
22361
+ previousObjectIDMap.set(component, component.getInstanceId());
22362
+ }
22363
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(this.children), _step1; !(_step1 = _iterator1()).done;){
22364
+ var child = _step1.value;
22365
+ child.gatherPreviousObjectID(previousObjectIDMap);
22366
+ }
22815
22367
  };
22816
22368
  /**
22817
22369
  *
@@ -22918,9 +22470,11 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22918
22470
  set: function set(value) {
22919
22471
  if (this.listIndex !== value) {
22920
22472
  this.listIndex = value;
22921
- for(var _iterator = _create_for_of_iterator_helper_loose(this.rendererComponents), _step; !(_step = _iterator()).done;){
22922
- var rendererComponent = _step.value;
22923
- rendererComponent.priority = value;
22473
+ for(var _iterator = _create_for_of_iterator_helper_loose(this.components), _step; !(_step = _iterator()).done;){
22474
+ var component = _step.value;
22475
+ if (_instanceof1(component, RendererComponent)) {
22476
+ component.priority = value;
22477
+ }
22924
22478
  }
22925
22479
  }
22926
22480
  }
@@ -22944,9 +22498,6 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
22944
22498
  ]);
22945
22499
  return VFXItem;
22946
22500
  }(EffectsObject);
22947
- __decorate([
22948
- serialize()
22949
- ], VFXItem.prototype, "components", void 0);
22950
22501
  VFXItem = __decorate([
22951
22502
  effectsClass(DataType.VFXItemData)
22952
22503
  ], VFXItem);
@@ -27011,8 +26562,6 @@ var BinaryAsset = /*#__PURE__*/ function(EffectsObject) {
27011
26562
  function BinaryAsset() {
27012
26563
  return EffectsObject.apply(this, arguments);
27013
26564
  }
27014
- var _proto = BinaryAsset.prototype;
27015
- _proto.fromData = function fromData(data) {};
27016
26565
  return BinaryAsset;
27017
26566
  }(EffectsObject);
27018
26567
  __decorate([
@@ -27022,6 +26571,197 @@ BinaryAsset = __decorate([
27022
26571
  effectsClass(DataType.BinaryAsset)
27023
26572
  ], BinaryAsset);
27024
26573
 
26574
+ var SerializationHelper = /*#__PURE__*/ function() {
26575
+ function SerializationHelper() {}
26576
+ SerializationHelper.serialize = function serialize(effectsObject, serializedData) {
26577
+ effectsObject.toData();
26578
+ if (!serializedData) {
26579
+ serializedData = {};
26580
+ }
26581
+ var serializedProperties = getMergedStore(effectsObject);
26582
+ if (serializedProperties) {
26583
+ for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializedProperties)), _step; !(_step = _iterator()).done;){
26584
+ var key = _step.value;
26585
+ var value = effectsObject[key];
26586
+ if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || SerializationHelper.checkTypedArray(value)) {
26587
+ // TODO json 数据避免传 typedArray
26588
+ serializedData[key] = value;
26589
+ } else if (isArray(value)) {
26590
+ if (!serializedData[key]) {
26591
+ serializedData[key] = [];
26592
+ }
26593
+ SerializationHelper.serializeArrayProperty(value, serializedData[key], 0);
26594
+ } else if (EffectsObject.is(value)) {
26595
+ // TODO 处理 EffectsObject 递归序列化
26596
+ serializedData[key] = {
26597
+ id: value.getInstanceId()
26598
+ };
26599
+ } else if (isObject(value)) {
26600
+ if (!serializedData[key]) {
26601
+ serializedData[key] = {};
26602
+ }
26603
+ SerializationHelper.serializeObjectProperty(value, serializedData[key], 0);
26604
+ }
26605
+ }
26606
+ }
26607
+ // TODO 待移除 tagggedProperties 为没有装饰器的临时方案
26608
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(effectsObject.defination)), _step1; !(_step1 = _iterator1()).done;){
26609
+ var key1 = _step1.value;
26610
+ var value1 = effectsObject.defination[key1];
26611
+ if (typeof value1 === "number" || typeof value1 === "string" || typeof value1 === "boolean" || SerializationHelper.checkTypedArray(value1)) {
26612
+ // TODO json 数据避免传 typedArray
26613
+ serializedData[key1] = value1;
26614
+ } else if (isArray(value1)) {
26615
+ if (!serializedData[key1]) {
26616
+ serializedData[key1] = [];
26617
+ }
26618
+ SerializationHelper.serializeArrayProperty(value1, serializedData[key1], 0);
26619
+ } else if (EffectsObject.is(value1)) {
26620
+ // TODO 处理 EffectsObject 递归序列化
26621
+ serializedData[key1] = {
26622
+ id: value1.getInstanceId()
26623
+ };
26624
+ } else if (isObject(value1)) {
26625
+ if (!serializedData[key1]) {
26626
+ serializedData[key1] = {};
26627
+ }
26628
+ SerializationHelper.serializeObjectProperty(value1, serializedData[key1], 0);
26629
+ }
26630
+ }
26631
+ return serializedData;
26632
+ };
26633
+ SerializationHelper.deserialize = function deserialize(serializedData, effectsObject) {
26634
+ effectsObject.defination = serializedData;
26635
+ var serializedProperties = getMergedStore(effectsObject);
26636
+ var engine = effectsObject.engine;
26637
+ if (serializedProperties) {
26638
+ for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(serializedProperties)), _step; !(_step = _iterator()).done;){
26639
+ var key = _step.value;
26640
+ var value = serializedData[key];
26641
+ if (value === undefined) {
26642
+ continue;
26643
+ }
26644
+ var propertyType = serializedProperties[key].type;
26645
+ // FIXME: taggedProperties 为 readonly,这里存在强制赋值
26646
+ effectsObject[key] = SerializationHelper.deserializeProperty(value, engine, 0, propertyType);
26647
+ }
26648
+ }
26649
+ effectsObject.fromData(effectsObject.defination);
26650
+ };
26651
+ SerializationHelper.checkTypedArray = function checkTypedArray(obj) {
26652
+ return _instanceof1(obj, Int8Array) || _instanceof1(obj, Uint8Array) || _instanceof1(obj, Uint8ClampedArray) || _instanceof1(obj, Int16Array) || _instanceof1(obj, Uint16Array) || _instanceof1(obj, Int32Array) || _instanceof1(obj, Uint32Array) || _instanceof1(obj, Float32Array) || _instanceof1(obj, Float64Array) || _instanceof1(obj, ArrayBuffer);
26653
+ };
26654
+ // check value is { id: 7e69662e964e4892ae8933f24562395b }
26655
+ SerializationHelper.checkDataPath = function checkDataPath(value) {
26656
+ return !!(isObject(value) && Object.keys(value).length === 1 && "id" in value && isString(value.id) && value.id.length === 32);
26657
+ };
26658
+ // TODO 测试函数,2.0 上线后移除
26659
+ SerializationHelper.checkGLTFNode = function checkGLTFNode(value) {
26660
+ return isObject(value) && value.nodeIndex !== undefined && value.isJoint !== undefined;
26661
+ };
26662
+ SerializationHelper.checkImageSource = function checkImageSource(value) {
26663
+ return isCanvas(value) || _instanceof1(value, HTMLImageElement);
26664
+ };
26665
+ SerializationHelper.deserializeProperty = function deserializeProperty(property, engine, level, type, overrideDataPath) {
26666
+ if (overrideDataPath === void 0) overrideDataPath = true;
26667
+ if (level > 14) {
26668
+ console.error("The nested object layers of the serialized data exceed the maximum limit.");
26669
+ return;
26670
+ }
26671
+ // 加载并链接 DataPath 字段表示的 EffectsObject 引用。Class 对象 copy [key, value] 会丢失对象信息,因此只递归数组对象和普通 js Object 结构对象。
26672
+ if (isArray(property)) {
26673
+ var res = [];
26674
+ for(var _iterator = _create_for_of_iterator_helper_loose(property), _step; !(_step = _iterator()).done;){
26675
+ var value = _step.value;
26676
+ res.push(SerializationHelper.deserializeProperty(value, engine, level + 1, type, overrideDataPath));
26677
+ }
26678
+ return res;
26679
+ // TODO json 数据避免传 typedArray
26680
+ } else if (SerializationHelper.checkDataPath(property)) {
26681
+ var referenceObject = engine.findObject(property);
26682
+ return overrideDataPath ? referenceObject : property;
26683
+ } else if (isObject(property) && property.constructor === Object) {
26684
+ var res1;
26685
+ if (type) {
26686
+ res1 = new type();
26687
+ } else {
26688
+ res1 = {};
26689
+ }
26690
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(Object.keys(property)), _step1; !(_step1 = _iterator1()).done;){
26691
+ var key = _step1.value;
26692
+ res1[key] = SerializationHelper.deserializeProperty(property[key], engine, level + 1, undefined, overrideDataPath);
26693
+ }
26694
+ return res1;
26695
+ } else {
26696
+ return property;
26697
+ }
26698
+ };
26699
+ SerializationHelper.serializeObjectProperty = function serializeObjectProperty(objectProperty, serializedData, level) {
26700
+ if (level > 14) {
26701
+ console.error("The nested object layers of the serialized data exceed the maximum limit.");
26702
+ return;
26703
+ }
26704
+ if (!serializedData) {
26705
+ serializedData = {};
26706
+ }
26707
+ for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(objectProperty)), _step; !(_step = _iterator()).done;){
26708
+ var key = _step.value;
26709
+ var value = objectProperty[key];
26710
+ if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || SerializationHelper.checkTypedArray(objectProperty)) {
26711
+ // TODO json 数据避免传 typedArray
26712
+ serializedData[key] = value;
26713
+ } else if (isArray(value)) {
26714
+ if (!serializedData[key]) {
26715
+ serializedData[key] = [];
26716
+ }
26717
+ SerializationHelper.serializeArrayProperty(value, serializedData[key], level + 1);
26718
+ } else if (EffectsObject.is(value)) {
26719
+ // TODO 处理 EffectsObject 递归序列化
26720
+ serializedData[key] = {
26721
+ id: value.getInstanceId()
26722
+ };
26723
+ } else if (isObject(value)) {
26724
+ if (!serializedData[key]) {
26725
+ serializedData[key] = {};
26726
+ }
26727
+ SerializationHelper.serializeObjectProperty(value, serializedData[key], level + 1);
26728
+ }
26729
+ }
26730
+ };
26731
+ SerializationHelper.serializeArrayProperty = function serializeArrayProperty(arrayProperty, serializedData, level) {
26732
+ if (level > 14) {
26733
+ console.error("The nested object layers of the serialized data exceed the maximum limit.");
26734
+ return;
26735
+ }
26736
+ if (!serializedData) {
26737
+ serializedData = [];
26738
+ }
26739
+ for(var i = 0; i < arrayProperty.length; i++){
26740
+ var value = arrayProperty[i];
26741
+ if (typeof value === "number" || typeof value === "string" || typeof value === "boolean" || SerializationHelper.checkTypedArray(arrayProperty)) {
26742
+ // TODO json 数据避免传 typedArray
26743
+ serializedData[i] = value;
26744
+ } else if (isArray(value)) {
26745
+ if (!serializedData[i]) {
26746
+ serializedData[i] = [];
26747
+ }
26748
+ SerializationHelper.serializeArrayProperty(value, serializedData[i], level + 1);
26749
+ } else if (EffectsObject.is(value)) {
26750
+ // TODO 处理 EffectsObject 递归序列化
26751
+ serializedData[i] = {
26752
+ id: value.getInstanceId()
26753
+ };
26754
+ } else if (isObject(value)) {
26755
+ if (!serializedData[i]) {
26756
+ serializedData[i] = {};
26757
+ }
26758
+ SerializationHelper.serializeObjectProperty(value, serializedData[i], level + 1);
26759
+ }
26760
+ }
26761
+ };
26762
+ return SerializationHelper;
26763
+ }();
26764
+
27025
26765
  /**
27026
26766
  * @since 2.0.0
27027
26767
  */ var AssetLoader = /*#__PURE__*/ function() {
@@ -27029,9 +26769,10 @@ BinaryAsset = __decorate([
27029
26769
  this.engine = engine;
27030
26770
  }
27031
26771
  var _proto = AssetLoader.prototype;
27032
- _proto.loadGUID = function loadGUID(guid) {
27033
- if (this.engine.objectInstance[guid]) {
27034
- return this.engine.objectInstance[guid];
26772
+ _proto.loadGUID = function loadGUID(dataPath) {
26773
+ var guid = dataPath.id;
26774
+ if (!dataPath) {
26775
+ return null;
27035
26776
  }
27036
26777
  var effectsObjectData = this.findData(guid);
27037
26778
  var effectsObject;
@@ -27066,92 +26807,6 @@ BinaryAsset = __decorate([
27066
26807
  SerializationHelper.deserialize(effectsObjectData, effectsObject);
27067
26808
  return effectsObject;
27068
26809
  };
27069
- // 加载本地文件资产
27070
- _proto.loadGUIDAsync = function loadGUIDAsync(guid) {
27071
- var _this = this;
27072
- return _async_to_generator(function() {
27073
- var effectsObjectData, effectsObject, classConstructor;
27074
- return __generator(this, function(_state) {
27075
- switch(_state.label){
27076
- case 0:
27077
- if (_this.engine.objectInstance[guid]) {
27078
- return [
27079
- 2,
27080
- _this.engine.objectInstance[guid]
27081
- ];
27082
- }
27083
- effectsObjectData = _this.findData(guid);
27084
- if (!!effectsObjectData) return [
27085
- 3,
27086
- 2
27087
- ];
27088
- if (!_this.engine.database) {
27089
- console.error("Object data with uuid: " + guid + " not found.");
27090
- return [
27091
- 2,
27092
- undefined
27093
- ];
27094
- }
27095
- return [
27096
- 4,
27097
- _this.engine.database.loadGUID(guid)
27098
- ];
27099
- case 1:
27100
- effectsObject = _state.sent();
27101
- if (!effectsObject) {
27102
- console.error("Disk data with uuid: " + guid + " not found.");
27103
- return [
27104
- 2,
27105
- undefined
27106
- ];
27107
- }
27108
- _this.engine.addInstance(effectsObject);
27109
- return [
27110
- 2,
27111
- effectsObject
27112
- ];
27113
- case 2:
27114
- switch(effectsObjectData.dataType){
27115
- case DataType.Material:
27116
- effectsObject = Material.create(_this.engine);
27117
- break;
27118
- case DataType.Geometry:
27119
- effectsObject = Geometry.create(_this.engine);
27120
- break;
27121
- case DataType.Texture:
27122
- effectsObject = Texture.create(_this.engine);
27123
- break;
27124
- default:
27125
- {
27126
- classConstructor = AssetLoader.getClass(effectsObjectData.dataType);
27127
- if (classConstructor) {
27128
- effectsObject = new classConstructor(_this.engine);
27129
- }
27130
- }
27131
- }
27132
- if (!effectsObject) {
27133
- console.error("Constructor for DataType: " + effectsObjectData.dataType + " not found.");
27134
- return [
27135
- 2,
27136
- undefined
27137
- ];
27138
- }
27139
- effectsObject.setInstanceId(effectsObjectData.id);
27140
- _this.engine.addInstance(effectsObject);
27141
- return [
27142
- 4,
27143
- SerializationHelper.deserializeAsync(effectsObjectData, effectsObject)
27144
- ];
27145
- case 3:
27146
- _state.sent();
27147
- return [
27148
- 2,
27149
- effectsObject
27150
- ];
27151
- }
27152
- });
27153
- })();
27154
- };
27155
26810
  _proto.findData = function findData(uuid) {
27156
26811
  return this.engine.jsonSceneData[uuid];
27157
26812
  };
@@ -27501,35 +27156,35 @@ function rotationZYXFromQuat(out, quat) {
27501
27156
  ];
27502
27157
  }
27503
27158
  }
27504
- var _obj$1;
27505
- var particleOriginTranslateMap = (_obj$1 = {}, _obj$1[ParticleOrigin.PARTICLE_ORIGIN_CENTER] = [
27159
+ var _obj$2;
27160
+ var particleOriginTranslateMap = (_obj$2 = {}, _obj$2[ParticleOrigin.PARTICLE_ORIGIN_CENTER] = [
27506
27161
  0,
27507
27162
  0
27508
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_CENTER_BOTTOM] = [
27163
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_CENTER_BOTTOM] = [
27509
27164
  0,
27510
27165
  -0.5
27511
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_CENTER_TOP] = [
27166
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_CENTER_TOP] = [
27512
27167
  0,
27513
27168
  0.5
27514
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_LEFT_TOP] = [
27169
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_LEFT_TOP] = [
27515
27170
  -0.5,
27516
27171
  0.5
27517
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_LEFT_CENTER] = [
27172
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_LEFT_CENTER] = [
27518
27173
  -0.5,
27519
27174
  0
27520
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_LEFT_BOTTOM] = [
27175
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_LEFT_BOTTOM] = [
27521
27176
  -0.5,
27522
27177
  -0.5
27523
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_CENTER] = [
27178
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_CENTER] = [
27524
27179
  0.5,
27525
27180
  0
27526
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_BOTTOM] = [
27181
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_BOTTOM] = [
27527
27182
  0.5,
27528
27183
  -0.5
27529
- ], _obj$1[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_TOP] = [
27184
+ ], _obj$2[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_TOP] = [
27530
27185
  0.5,
27531
27186
  0.5
27532
- ], _obj$1);
27187
+ ], _obj$2);
27533
27188
  function getBezierCurveFromHermite(m0, m1, p0, p3) {
27534
27189
  var xStart = p0[0];
27535
27190
  var yStart = p0[1];
@@ -27768,28 +27423,6 @@ var refCompositions = new Map();
27768
27423
  }
27769
27424
  }
27770
27425
  }
27771
- // Composition id 转 guid
27772
- var compositionId = json.compositionId;
27773
- var compositionIdToGUIDMap = {};
27774
- for(var _iterator3 = _create_for_of_iterator_helper_loose(json.compositions), _step3; !(_step3 = _iterator3()).done;){
27775
- var composition = _step3.value;
27776
- var guid = generateGUID();
27777
- compositionIdToGUIDMap[composition.id] = guid;
27778
- if (composition.id === compositionId) {
27779
- json.compositionId = guid;
27780
- }
27781
- composition.id = guid;
27782
- }
27783
- // 预合成元素 refId 同步改为生成的合成 guid
27784
- for(var _iterator4 = _create_for_of_iterator_helper_loose(json.items), _step4; !(_step4 = _iterator4()).done;){
27785
- var item = _step4.value;
27786
- if (item.content) {
27787
- var compositionOptions = item.content.options;
27788
- if (compositionOptions && compositionOptions.refId !== undefined) {
27789
- compositionOptions.refId = compositionIdToGUIDMap[compositionOptions.refId];
27790
- }
27791
- }
27792
- }
27793
27426
  return json;
27794
27427
  }
27795
27428
  function version32Migration(json) {
@@ -27816,21 +27449,68 @@ function version32Migration(json) {
27816
27449
  itemMap.set(item.id, item);
27817
27450
  }
27818
27451
  processContent(mainComp);
27452
+ return json;
27453
+ }
27454
+ function version33Migration(json) {
27819
27455
  // 老 shape 数据兼容
27820
- for(var _iterator3 = _create_for_of_iterator_helper_loose(items), _step3; !(_step3 = _iterator3()).done;){
27821
- var item1 = _step3.value;
27822
- if (item1.type === ItemType.sprite) {
27823
- var spriteComponent = componentMap.get(item1.components[0].id);
27456
+ for(var _iterator = _create_for_of_iterator_helper_loose(json.items), _step; !(_step = _iterator()).done;){
27457
+ var item = _step.value;
27458
+ if (item.type === ItemType.sprite) {
27459
+ var spriteComponent = componentMap.get(item.components[0].id);
27824
27460
  if (spriteComponent) {
27825
27461
  var shape = spriteComponent.renderer.shape;
27826
27462
  var shapeData = void 0;
27827
27463
  if (Number.isInteger(shape)) {
27828
27464
  shapeData = json.shapes[shape];
27465
+ } else {
27466
+ shapeData = shape;
27829
27467
  }
27830
27468
  spriteComponent.renderer.shape = shapeData;
27831
27469
  }
27832
27470
  }
27833
27471
  }
27472
+ // Composition id 转 guid, Composition 分离 CompositionComponent
27473
+ var compositionId = json.compositionId;
27474
+ var compositionIdToGUIDMap = {};
27475
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(json.compositions), _step1; !(_step1 = _iterator1()).done;){
27476
+ var composition = _step1.value;
27477
+ var guid = generateGUID();
27478
+ compositionIdToGUIDMap[composition.id] = guid;
27479
+ if (composition.id === compositionId) {
27480
+ json.compositionId = guid;
27481
+ }
27482
+ composition.id = guid;
27483
+ var compositionComponent = {
27484
+ id: generateGUID(),
27485
+ dataType: "CompositionComponent",
27486
+ items: composition.items,
27487
+ timelineAsset: composition.timelineAsset,
27488
+ sceneBindings: composition.sceneBindings,
27489
+ startTime: composition.startTime
27490
+ };
27491
+ //@ts-expect-error
27492
+ composition.timelineAsset = undefined;
27493
+ //@ts-expect-error
27494
+ composition.sceneBindings = undefined;
27495
+ composition.startTime = undefined;
27496
+ //@ts-expect-error
27497
+ composition.components = [
27498
+ {
27499
+ id: compositionComponent.id
27500
+ }
27501
+ ];
27502
+ json.components.push(compositionComponent);
27503
+ }
27504
+ // 预合成元素 refId 同步改为生成的合成 guid
27505
+ for(var _iterator2 = _create_for_of_iterator_helper_loose(json.items), _step2; !(_step2 = _iterator2()).done;){
27506
+ var item1 = _step2.value;
27507
+ if (item1.content) {
27508
+ var compositionOptions = item1.content.options;
27509
+ if (compositionOptions && compositionOptions.refId !== undefined) {
27510
+ compositionOptions.refId = compositionIdToGUIDMap[compositionOptions.refId];
27511
+ }
27512
+ }
27513
+ }
27834
27514
  return json;
27835
27515
  }
27836
27516
  function processContent(composition) {
@@ -28704,7 +28384,7 @@ function getStandardJSON(json) {
28704
28384
  if (v0.test(json.version)) {
28705
28385
  var _exec;
28706
28386
  reverseParticle = ((_exec = /^(\d+)/.exec(json.version)) == null ? void 0 : _exec[0]) === "0";
28707
- return version32Migration(version31Migration(version30Migration(version21Migration(getStandardJSONFromV0(json)))));
28387
+ return version33Migration(version32Migration(version31Migration(version30Migration(version21Migration(getStandardJSONFromV0(json))))));
28708
28388
  }
28709
28389
  reverseParticle = false;
28710
28390
  var vs = standardVersion.exec(json.version) || [];
@@ -28729,6 +28409,9 @@ function getStandardJSON(json) {
28729
28409
  if (minorVersion < 3) {
28730
28410
  json = version32Migration(json);
28731
28411
  }
28412
+ if (minorVersion < 4) {
28413
+ json = version33Migration(json);
28414
+ }
28732
28415
  }
28733
28416
  return json;
28734
28417
  }
@@ -29012,6 +28695,40 @@ function getStandardItem(item, opt) {
29012
28695
  }
29013
28696
  }
29014
28697
 
28698
+ var _obj$1;
28699
+ /**
28700
+ * 机型和渲染等级对应表
28701
+ *
28702
+ * 机型:B-低端机、A-中端机、S-高端机
28703
+ * 渲染等级:B-低、A-中、S-高、A+-中高、B+-全部
28704
+ *
28705
+ * - S(高端机):高、全部、中高
28706
+ * - A(中端机):中、全部、中高
28707
+ * - B(低端机):低、全部
28708
+ * - undefined(全部机型)
28709
+ */ var renderLevelPassSet = (_obj$1 = {}, _obj$1[RenderLevel.S] = [
28710
+ RenderLevel.S,
28711
+ RenderLevel.BPlus,
28712
+ RenderLevel.APlus
28713
+ ], _obj$1[RenderLevel.A] = [
28714
+ RenderLevel.A,
28715
+ RenderLevel.BPlus,
28716
+ RenderLevel.APlus
28717
+ ], _obj$1[RenderLevel.B] = [
28718
+ RenderLevel.B,
28719
+ RenderLevel.BPlus
28720
+ ], _obj$1);
28721
+ function passRenderLevel(l, renderLevel) {
28722
+ if (!l || !renderLevel) {
28723
+ return true;
28724
+ }
28725
+ var arr = renderLevelPassSet[renderLevel];
28726
+ if (arr) {
28727
+ return arr.includes(l);
28728
+ }
28729
+ return false;
28730
+ }
28731
+
29015
28732
  var Scene;
29016
28733
  (function(Scene) {
29017
28734
  function isJSONObject(scene) {
@@ -29911,7 +29628,9 @@ function createTextureOptionsBySource(image, sourceFrom, id) {
29911
29628
  if (_instanceof1(textureOptions, Texture)) {
29912
29629
  this.engine.addInstance(textureOptions);
29913
29630
  } else {
29914
- textureOptions = this.engine.assetLoader.loadGUID(scene.textureOptions[i].id);
29631
+ textureOptions = this.engine.findObject({
29632
+ id: scene.textureOptions[i].id
29633
+ });
29915
29634
  scene.textureOptions[i] = textureOptions;
29916
29635
  }
29917
29636
  textureOptions.initialize();
@@ -31558,8 +31277,18 @@ var FBGeometryDataT = /*#__PURE__*/ function() {
31558
31277
  _proto.addInstance = function addInstance(effectsObject) {
31559
31278
  this.objectInstance[effectsObject.getInstanceId()] = effectsObject;
31560
31279
  };
31561
- _proto.getInstance = function getInstance(id) {
31562
- return this.objectInstance[id];
31280
+ /**
31281
+ * @ignore
31282
+ */ _proto.findObject = function findObject(guid) {
31283
+ // 编辑器可能传 Class 对象,这边判断处理一下直接返回原对象。
31284
+ if (!(isObject(guid) && guid.constructor === Object)) {
31285
+ return guid;
31286
+ }
31287
+ if (this.objectInstance[guid.id]) {
31288
+ return this.objectInstance[guid.id];
31289
+ }
31290
+ var result = this.assetLoader.loadGUID(guid);
31291
+ return result;
31563
31292
  };
31564
31293
  _proto.removeInstance = function removeInstance(id) {
31565
31294
  delete this.objectInstance[id];
@@ -31573,6 +31302,10 @@ var FBGeometryDataT = /*#__PURE__*/ function() {
31573
31302
  }
31574
31303
  for(var _iterator1 = _create_for_of_iterator_helper_loose(items), _step1; !(_step1 = _iterator1()).done;){
31575
31304
  var vfxItemData = _step1.value;
31305
+ if (!passRenderLevel(vfxItemData.renderLevel, scene.renderLevel)) {
31306
+ vfxItemData.components = [];
31307
+ vfxItemData.type = ItemType.null;
31308
+ }
31576
31309
  this.addEffectsObjectData(vfxItemData);
31577
31310
  }
31578
31311
  for(var _iterator2 = _create_for_of_iterator_helper_loose(materials), _step2; !(_step2 = _iterator2()).done;){
@@ -31627,45 +31360,20 @@ var FBGeometryDataT = /*#__PURE__*/ function() {
31627
31360
  return _async_to_generator(function() {
31628
31361
  var jsonScene, _iterator, _step, itemData, itemType;
31629
31362
  return __generator(this, function(_state) {
31630
- switch(_state.label){
31631
- case 0:
31632
- jsonScene = scene.jsonScene;
31633
- _iterator = _create_for_of_iterator_helper_loose(jsonScene.items);
31634
- _state.label = 1;
31635
- case 1:
31636
- if (!!(_step = _iterator()).done) return [
31637
- 3,
31638
- 4
31639
- ];
31640
- itemData = _step.value;
31641
- itemType = itemData.type;
31642
- if (!(itemType === "ECS" || itemType === "camera" || itemType === ItemType.sprite || itemType === ItemType.particle || itemType === ItemType.mesh || itemType === ItemType.skybox || itemType === ItemType.light || itemType === ItemType.tree || itemType === ItemType.interact || itemType === ItemType.camera)) {
31643
- return [
31644
- 3,
31645
- 3
31646
- ];
31647
- }
31648
- if (!_this.database) return [
31649
- 3,
31650
- 3
31651
- ];
31652
- return [
31653
- 4,
31654
- _this.assetLoader.loadGUIDAsync(itemData.id)
31655
- ];
31656
- case 2:
31657
- _state.sent();
31658
- _state.label = 3;
31659
- case 3:
31660
- return [
31661
- 3,
31662
- 1
31663
- ];
31664
- case 4:
31665
- return [
31666
- 2
31667
- ];
31363
+ jsonScene = scene.jsonScene;
31364
+ for(_iterator = _create_for_of_iterator_helper_loose(jsonScene.items); !(_step = _iterator()).done;){
31365
+ itemData = _step.value;
31366
+ itemType = itemData.type;
31367
+ if (!(itemType === "ECS" || itemType === "camera" || itemType === ItemType.sprite || itemType === ItemType.particle || itemType === ItemType.mesh || itemType === ItemType.skybox || itemType === ItemType.light || itemType === ItemType.tree || itemType === ItemType.interact || itemType === ItemType.camera)) {
31368
+ continue;
31369
+ }
31370
+ if (_this.database) {
31371
+ _this.assetLoader.loadGUID(itemData);
31372
+ }
31668
31373
  }
31374
+ return [
31375
+ 2
31376
+ ];
31669
31377
  });
31670
31378
  })();
31671
31379
  };
@@ -31913,7 +31621,7 @@ registerPlugin("sprite", SpriteLoader, VFXItem);
31913
31621
  registerPlugin("particle", ParticleLoader, VFXItem);
31914
31622
  registerPlugin("cal", CalculateLoader, VFXItem);
31915
31623
  registerPlugin("interact", InteractLoader, VFXItem);
31916
- var version$1 = "2.4.0-beta.0";
31624
+ var version$1 = "2.4.0-beta.1";
31917
31625
  logger.info("Core version: " + version$1 + ".");
31918
31626
 
31919
31627
  var _obj;
@@ -33504,8 +33212,8 @@ setMaxSpriteMeshItemCount(8);
33504
33212
  */ Mesh.create = function(engine, props) {
33505
33213
  return new ThreeMesh(engine, props);
33506
33214
  };
33507
- var version = "2.4.0-beta.0";
33215
+ var version = "2.4.0-beta.1";
33508
33216
  logger.info("THREEJS plugin version: " + version + ".");
33509
33217
 
33510
- export { AbstractPlugin, ActivationPlayable, ActivationPlayableAsset, ActivationTrack, AnimationClip, AnimationClipPlayable, Asset, AssetLoader, AssetManager, AssetService, BYTES_TYPE_MAP, BaseRenderComponent, Behaviour, BezierCurve, BezierCurvePath, BezierCurveQuat, BinaryAsset, COMPRESSED_TEXTURE, CONSTANT_MAP_BLEND, CONSTANT_MAP_DEPTH, CONSTANT_MAP_STENCIL_FUNC, CONSTANT_MAP_STENCIL_OP, COPY_FRAGMENT_SHADER, COPY_MESH_SHADER_ID, COPY_VERTEX_SHADER, CalculateLoader, Camera, CameraController, CameraVFXItemLoader, ColorCurve, ColorPropertyPlayableAsset, ColorPropertyTrack, Component, Composition, CompositionComponent, DEFAULT_FONTS, DEFAULT_FPS, Database, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, EffectComponent, EffectsObject, EffectsPackage, Ellipse, Engine, EventEmitter, EventSystem, Fake3DAnimationMode, Fake3DComponent, FilterMode, Float16ArrayWrapper, FloatPropertyPlayableAsset, FloatPropertyTrack, Framebuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, GraphicsPath, HELP_LINK, HitTestType, InteractComponent, InteractLoader, InteractMesh, Item, KTXTexture, LineSegments, LinearValue, MaskMode, MaskProcessor, MaskRefManager, Material, MaterialDataBlock, MaterialRenderType, MaterialTrack, Mesh, MeshCollider, ObjectBindingTrack, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleBehaviourPlayable, ParticleBehaviourPlayableAsset, ParticleLoader, ParticleMesh, ParticleSystem, ParticleSystemRenderer, ParticleTrack, PassTextureCache, PathSegments, PluginSystem, PolyStar, Polygon, PostProcessVolume, PropertyTrack, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderbuffer, Renderer, RendererComponent, RuntimeClip, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_0, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_SIZE_0, SEMANTIC_PRE_COLOR_ATTACHMENT_0, SEMANTIC_PRE_COLOR_ATTACHMENT_SIZE_0, SPRITE_VERTEX_STRIDE, Scene, SemanticMap, SerializationHelper, Shader, ShaderCompileResultStatus, ShaderFactory, ShaderType, ShaderVariant, ShapeComponent, ShapePath, SpriteColorPlayableAsset, SpriteColorTrack, SpriteComponent, SpriteLoader, StarType, StaticValue, SubCompositionPlayableAsset, SubCompositionTrack, TEMPLATE_USE_OFFSCREEN_CANVAS, TEXTURE_UNIFORM_MAP, TextComponent, TextComponentBase, TextLayout, TextLoader, TextStyle, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, ThreeComposition, ThreeDisplayObject, ThreeEngine, ThreeMaterial, ThreeSpriteComponent, ThreeTextComponent, ThreeTexture, Ticker, TimelineAsset, TimelineClip, TimelinePlayable, TrackAsset, TrackSortWrapper, TrackType, Transform, TransformAnimationPlayable, TransformPlayableAsset, TransformTrack, VFXItem, ValueGetter, Vector2Curve, Vector2PropertyPlayableAsset, Vector2PropertyTrack, Vector4Curve, Vector4PropertyPlayableAsset, Vector4PropertyTrack, addByOrder, addItem, addItemWithOrder, applyMixins, assertExist, asserts, base64ToFile, blend, buildLine, calculateTranslation, canvasPool, closePointEps, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, createCopyShader, createGLContext, createKeyFrameMeta, createShape, createValueGetter, curveEps, decimalEqual, defaultPlugins, deserializeMipmapTexture, earcut, effectsClass, effectsClassStore, enlargeBuffer, ensureFixedNumber, ensureVec3, filterItemsByRenderLevel, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateGUID, generateHalfFloatTexture, generateTransparentTexture, generateWhiteTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMergedStore, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, glType2VertexFormatType, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, isAlipayMiniApp, isAndroid, isArray, isCanvas, isFunction, isIOS, isIOSByUA, isMiniProgram, isObject, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isValidFontFamily, isWebGL2, isWechatMiniApp, itemFrag, itemFrame_frag as itemFrameFrag, itemVert, loadAVIFOptional, loadBinary, loadBlob, loadImage, loadMedia, loadVideo, loadWebPOptional, logger, index as math, maxSpriteMeshItemCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, normalizeColor, numberToFix, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap$1 as particleOriginTranslateMap, particleUniformTypeMap, particleVert, passRenderLevel, pluginLoaderMap, randomInRange, registerPlugin, removeItem, rotateVec2, screenMeshVert, serialize, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxItemCountByGPU, setUniformValue, sortByOrder, index$1 as spec, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vecFill, vecMulCombine, version, vertexFormatType2GLType };
33218
+ export { AbstractPlugin, ActivationPlayable, ActivationPlayableAsset, ActivationTrack, AnimationClip, AnimationClipPlayable, Asset, AssetLoader, AssetManager, AssetService, BYTES_TYPE_MAP, BaseRenderComponent, Behaviour, BezierCurve, BezierCurvePath, BezierCurveQuat, BinaryAsset, COMPRESSED_TEXTURE, CONSTANT_MAP_BLEND, CONSTANT_MAP_DEPTH, CONSTANT_MAP_STENCIL_FUNC, CONSTANT_MAP_STENCIL_OP, COPY_FRAGMENT_SHADER, COPY_MESH_SHADER_ID, COPY_VERTEX_SHADER, CalculateLoader, Camera, CameraController, CameraVFXItemLoader, ColorCurve, ColorPropertyPlayableAsset, ColorPropertyTrack, Component, Composition, CompositionComponent, DEFAULT_FONTS, DEFAULT_FPS, Database, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, EffectComponent, EffectsObject, EffectsPackage, Ellipse, Engine, EventEmitter, EventSystem, Fake3DAnimationMode, Fake3DComponent, FilterMode, Float16ArrayWrapper, FloatPropertyPlayableAsset, FloatPropertyTrack, Framebuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, GraphicsPath, HELP_LINK, HitTestType, InteractComponent, InteractLoader, InteractMesh, Item, KTXTexture, LineSegments, LinearValue, MaskMode, MaskProcessor, MaskRefManager, Material, MaterialDataBlock, MaterialRenderType, MaterialTrack, Mesh, MeshCollider, ObjectBindingTrack, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleBehaviourPlayable, ParticleBehaviourPlayableAsset, ParticleLoader, ParticleMesh, ParticleSystem, ParticleSystemRenderer, ParticleTrack, PassTextureCache, PathSegments, PluginSystem, PolyStar, Polygon, PostProcessVolume, PropertyTrack, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderbuffer, Renderer, RendererComponent, RuntimeClip, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_0, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_SIZE_0, SEMANTIC_PRE_COLOR_ATTACHMENT_0, SEMANTIC_PRE_COLOR_ATTACHMENT_SIZE_0, SPRITE_VERTEX_STRIDE, Scene, SemanticMap, SerializationHelper, Shader, ShaderCompileResultStatus, ShaderFactory, ShaderType, ShaderVariant, ShapeComponent, ShapePath, SpriteColorPlayableAsset, SpriteColorTrack, SpriteComponent, SpriteLoader, StarType, StaticValue, SubCompositionPlayableAsset, SubCompositionTrack, TEMPLATE_USE_OFFSCREEN_CANVAS, TEXTURE_UNIFORM_MAP, TextComponent, TextComponentBase, TextLayout, TextLoader, TextStyle, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, ThreeComposition, ThreeDisplayObject, ThreeEngine, ThreeMaterial, ThreeSpriteComponent, ThreeTextComponent, ThreeTexture, Ticker, TimelineAsset, TimelineClip, TimelinePlayable, TrackAsset, TrackSortWrapper, TrackType, Transform, TransformAnimationPlayable, TransformPlayableAsset, TransformTrack, VFXItem, ValueGetter, Vector2Curve, Vector2PropertyPlayableAsset, Vector2PropertyTrack, Vector4Curve, Vector4PropertyPlayableAsset, Vector4PropertyTrack, addByOrder, addItem, addItemWithOrder, applyMixins, assertExist, asserts, base64ToFile, blend, buildLine, calculateTranslation, canvasPool, closePointEps, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, createCopyShader, createGLContext, createKeyFrameMeta, createShape, createValueGetter, curveEps, decimalEqual, defaultPlugins, deserializeMipmapTexture, earcut, effectsClass, effectsClassStore, enlargeBuffer, ensureFixedNumber, ensureVec3, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateGUID, generateHalfFloatTexture, generateTransparentTexture, generateWhiteTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMergedStore, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, glType2VertexFormatType, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, isAlipayMiniApp, isAndroid, isArray, isCanvas, isFunction, isIOS, isIOSByUA, isMiniProgram, isObject, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isValidFontFamily, isWebGL2, isWechatMiniApp, itemFrag, itemFrame_frag as itemFrameFrag, itemVert, loadAVIFOptional, loadBinary, loadBlob, loadImage, loadMedia, loadVideo, loadWebPOptional, logger, index as math, maxSpriteMeshItemCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, normalizeColor, numberToFix, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap$1 as particleOriginTranslateMap, particleUniformTypeMap, particleVert, passRenderLevel, pluginLoaderMap, randomInRange, registerPlugin, removeItem, rotateVec2, screenMeshVert, serialize, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxItemCountByGPU, setUniformValue, sortByOrder, index$1 as spec, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vecFill, vecMulCombine, version, vertexFormatType2GLType };
33511
33219
  //# sourceMappingURL=index.mjs.map