@galacean/effects-threejs 2.0.0-alpha.30 → 2.0.0-alpha.32

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.js 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.0.0-alpha.30
6
+ * Version: v2.0.0-alpha.32
7
7
  */
8
8
 
9
9
  'use strict';
@@ -4589,15 +4589,97 @@ function getDirectStore(target) {
4589
4589
  return decoratorInitialStore.get(classKey);
4590
4590
  }
4591
4591
 
4592
+ function _assert_this_initialized(self) {
4593
+ if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
4594
+ return self;
4595
+ }
4596
+
4597
+ var EventEmitter = function EventEmitter() {
4598
+ var _this = this;
4599
+ var _this1 = this;
4600
+ this.listeners = {};
4601
+ /**
4602
+ * 移除事件监听器
4603
+ * @param eventName - 事件名称
4604
+ * @param listener - 事件监听器
4605
+ * @returns
4606
+ */ this.off = function(eventName, listener) {
4607
+ if (!_this.listeners[eventName]) {
4608
+ return;
4609
+ }
4610
+ _this.listeners[eventName] = _this.listeners[eventName].filter(function(param) {
4611
+ var l = param.listener;
4612
+ return l !== listener;
4613
+ });
4614
+ };
4615
+ /**
4616
+ * 监听事件
4617
+ * @param eventName - 事件名称
4618
+ * @param listener - 事件监听器
4619
+ * @param options - 事件监听器选项
4620
+ * @returns
4621
+ */ this.on = function(eventName, listener, options) {
4622
+ _this.listeners[eventName] = _this.listeners[eventName] || [];
4623
+ _this.listeners[eventName].push({
4624
+ listener: listener,
4625
+ options: options
4626
+ });
4627
+ return function() {
4628
+ return _this.off(eventName, listener);
4629
+ };
4630
+ };
4631
+ /**
4632
+ * 一次性监听事件
4633
+ * @param eventName - 事件名称
4634
+ * @param listener - 事件监听器
4635
+ */ this.once = function(eventName, listener) {
4636
+ _this.on(eventName, listener, {
4637
+ once: true
4638
+ });
4639
+ };
4640
+ /**
4641
+ * 触发事件
4642
+ * @param eventName - 事件名称
4643
+ * @param args - 事件参数
4644
+ */ this.emit = function(eventName) {
4645
+ for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
4646
+ args[_key - 1] = arguments[_key];
4647
+ }
4648
+ var _this_listeners_eventName;
4649
+ (_this_listeners_eventName = _this1.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.forEach(function(param) {
4650
+ var listener = param.listener, options = param.options;
4651
+ listener.apply(void 0, [].concat(args));
4652
+ if (options == null ? void 0 : options.once) {
4653
+ _this1.off(eventName, listener);
4654
+ }
4655
+ });
4656
+ };
4657
+ /**
4658
+ * 获取事件名称对应的所有监听器
4659
+ * @param eventName - 事件名称
4660
+ * @returns - 返回事件名称对应的所有监听器
4661
+ */ this.getListeners = function(eventName) {
4662
+ var _this_listeners_eventName;
4663
+ return ((_this_listeners_eventName = _this.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.map(function(param) {
4664
+ var listener = param.listener;
4665
+ return listener;
4666
+ })) || [];
4667
+ };
4668
+ };
4669
+
4592
4670
  /**
4593
4671
  * @since 2.0.0
4594
4672
  * @internal
4595
- */ var EffectsObject = /*#__PURE__*/ function() {
4673
+ */ var EffectsObject = /*#__PURE__*/ function(EventEmitter) {
4674
+ _inherits(EffectsObject, EventEmitter);
4596
4675
  function EffectsObject(engine) {
4597
- this.engine = engine;
4598
- this.guid = generateGUID();
4599
- this.taggedProperties = {};
4600
- this.engine.addInstance(this);
4676
+ var _this;
4677
+ _this = EventEmitter.call(this) || this;
4678
+ _this.engine = engine;
4679
+ _this.guid = generateGUID();
4680
+ _this.taggedProperties = {};
4681
+ _this.engine.addInstance(_assert_this_initialized(_this));
4682
+ return _this;
4601
4683
  }
4602
4684
  var _proto = EffectsObject.prototype;
4603
4685
  _proto.getInstanceId = function getInstanceId() {
@@ -4623,7 +4705,7 @@ function getDirectStore(target) {
4623
4705
  return _instanceof1(obj, EffectsObject) && "guid" in obj;
4624
4706
  };
4625
4707
  return EffectsObject;
4626
- }();
4708
+ }(EventEmitter);
4627
4709
 
4628
4710
  /**
4629
4711
  * @since 2.0.0
@@ -8434,7 +8516,8 @@ var seed$a = 1;
8434
8516
  texture = Texture.create(engine, {
8435
8517
  sourceType: exports.TextureSourceType.image,
8436
8518
  image: image,
8437
- id: generateGUID()
8519
+ id: generateGUID(),
8520
+ flipY: true
8438
8521
  });
8439
8522
  texture.initialize();
8440
8523
  return [
@@ -9012,6 +9095,9 @@ exports.MaterialRenderType = void 0;
9012
9095
  * 初始化 GPU 资源
9013
9096
  * @override
9014
9097
  */ _proto.initialize = function initialize() {
9098
+ // OVERRIDE
9099
+ };
9100
+ _proto.createShaderVariant = function createShaderVariant() {
9015
9101
  // OVERRIDE
9016
9102
  };
9017
9103
  _proto.use = function use(render, globalUniforms) {
@@ -12722,6 +12808,7 @@ var GlobalUniforms = function GlobalUniforms() {
12722
12808
  this.floats = {};
12723
12809
  this.ints = {};
12724
12810
  // vector3s: Record<string, vec3> = {};
12811
+ this.vector4s = {};
12725
12812
  this.matrices = {};
12726
12813
  //...
12727
12814
  this.samplers = [] // 存放的sampler名称。
@@ -12958,6 +13045,9 @@ var Renderer = /*#__PURE__*/ function() {
12958
13045
  _proto.setGlobalInt = function setGlobalInt(name, value) {
12959
13046
  // OVERRIDE
12960
13047
  };
13048
+ _proto.setGlobalVector4 = function setGlobalVector4(name, value) {
13049
+ // OVERRIDE
13050
+ };
12961
13051
  _proto.setGlobalMatrix = function setGlobalMatrix(name, value) {
12962
13052
  // OVERRIDE
12963
13053
  };
@@ -13910,6 +14000,8 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
13910
14000
  function SpriteComponent(engine, props) {
13911
14001
  var _this;
13912
14002
  _this = RendererComponent.call(this, engine) || this;
14003
+ _this.cachePrefix = "-";
14004
+ _this.frameAnimationLoop = false;
13913
14005
  _this.frameAnimationTime = 0;
13914
14006
  _this.color = [
13915
14007
  1,
@@ -13933,6 +14025,39 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
13933
14025
  }
13934
14026
  }
13935
14027
  };
14028
+ _this.name = "MSprite" + seed$4++;
14029
+ _this.renderer = {
14030
+ renderMode: RenderMode.BILLBOARD,
14031
+ blending: BlendingMode.ALPHA,
14032
+ texture: _this.engine.emptyTexture,
14033
+ occlusion: false,
14034
+ transparentOcclusion: false,
14035
+ side: SideMode.DOUBLE,
14036
+ mask: 0,
14037
+ maskMode: MaskMode.NONE,
14038
+ order: 0
14039
+ };
14040
+ _this.emptyTexture = _this.engine.emptyTexture;
14041
+ _this.splits = singleSplits;
14042
+ _this.renderInfo = getImageItemRenderInfo(_assert_this_initialized(_this));
14043
+ var geometry = _this.createGeometry(glContext.TRIANGLES);
14044
+ var material = _this.createMaterial(_this.renderInfo, 2);
14045
+ _this.worldMatrix = Matrix4.fromIdentity();
14046
+ _this.material = material;
14047
+ _this.geometry = geometry;
14048
+ _this.material.setVector4("_Color", new Vector4().setFromArray([
14049
+ 1,
14050
+ 1,
14051
+ 1,
14052
+ 1
14053
+ ]));
14054
+ _this.material.setVector4("_TexOffset", new Vector4().setFromArray([
14055
+ 0,
14056
+ 0,
14057
+ 1,
14058
+ 1
14059
+ ]));
14060
+ _this.setItem();
13936
14061
  if (props) {
13937
14062
  _this.fromData(props);
13938
14063
  }
@@ -13986,9 +14111,13 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
13986
14111
  this.frameAnimationTime += dt / 1000;
13987
14112
  var time = this.frameAnimationTime;
13988
14113
  var duration = this.item.duration;
14114
+ if (time > duration && this.frameAnimationLoop) {
14115
+ time = time % duration;
14116
+ }
13989
14117
  var life = Math.min(Math.max(time / duration, 0.0), 1.0);
13990
14118
  var ta = this.textureSheetAnimation;
13991
14119
  if (ta) {
14120
+ var _this_material_getVector4;
13992
14121
  var total = ta.total || ta.row * ta.col;
13993
14122
  var texRectX = 0;
13994
14123
  var texRectY = 0;
@@ -14034,7 +14163,7 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14034
14163
  dy
14035
14164
  ];
14036
14165
  }
14037
- this.material.getVector4("_TexOffset").setFromArray([
14166
+ (_this_material_getVector4 = this.material.getVector4("_TexOffset")) == null ? void 0 : _this_material_getVector4.setFromArray([
14038
14167
  texRectX + texOffset[0],
14039
14168
  texRectH + texRectY - texOffset[1],
14040
14169
  dx,
@@ -14047,12 +14176,9 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14047
14176
  this.item.composition.destroyTextures(this.getTextures());
14048
14177
  }
14049
14178
  };
14050
- _proto.getItemInitData = function getItemInitData(item, idx, pointStartIndex, textureIndex) {
14051
- var geoData = item.geoData;
14052
- if (!geoData) {
14053
- geoData = item.geoData = this.getItemGeometryData(item, idx);
14054
- }
14055
- var index = geoData.index;
14179
+ _proto.getItemInitData = function getItemInitData() {
14180
+ this.geoData = this.getItemGeometryData();
14181
+ var _this_geoData = this.geoData, index = _this_geoData.index, atlasOffset = _this_geoData.atlasOffset;
14056
14182
  var idxCount = index.length;
14057
14183
  // @ts-expect-error
14058
14184
  var indexData = this.wireframe ? new Uint8Array([
@@ -14067,11 +14193,11 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14067
14193
  ]) : new index.constructor(idxCount);
14068
14194
  if (!this.wireframe) {
14069
14195
  for(var i = 0; i < idxCount; i++){
14070
- indexData[i] = pointStartIndex + index[i];
14196
+ indexData[i] = 0 + index[i];
14071
14197
  }
14072
14198
  }
14073
14199
  return {
14074
- atlasOffset: geoData.atlasOffset,
14200
+ atlasOffset: atlasOffset,
14075
14201
  index: indexData
14076
14202
  };
14077
14203
  };
@@ -14082,8 +14208,7 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14082
14208
  addItem(textures, texture);
14083
14209
  }
14084
14210
  texture = this.renderer.texture;
14085
- var textureIndex = texture ? textures.indexOf(texture) : -1;
14086
- var data = this.getItemInitData(this, 0, 0, textureIndex);
14211
+ var data = this.getItemInitData();
14087
14212
  var renderer = this.renderer;
14088
14213
  var texParams = this.material.getVector4("_TexParams");
14089
14214
  texParams.x = renderer.occlusion ? +renderer.transparentOcclusion : 1;
@@ -14174,6 +14299,7 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14174
14299
  setBlendMode(material, states.blendMode);
14175
14300
  setMaskMode(material, states.maskMode);
14176
14301
  setSideMode(material, states.side);
14302
+ material.shader.shaderData.properties = 'uSampler0("uSampler0",2D) = "white" {}';
14177
14303
  if (!material.hasUniform("_Color")) {
14178
14304
  material.setVector4("_Color", new Vector4(0, 0, 0, 1));
14179
14305
  }
@@ -14185,8 +14311,8 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14185
14311
  }
14186
14312
  return material;
14187
14313
  };
14188
- _proto.getItemGeometryData = function getItemGeometryData(item, aIndex) {
14189
- var splits = item.splits, renderer = item.renderer, textureSheetAnimation = item.textureSheetAnimation;
14314
+ _proto.getItemGeometryData = function getItemGeometryData() {
14315
+ var _this = this, splits = _this.splits, renderer = _this.renderer, textureSheetAnimation = _this.textureSheetAnimation;
14190
14316
  var sx = 1, sy = 1;
14191
14317
  if (renderer.shape) {
14192
14318
  var _renderer_shape = renderer.shape, _renderer_shape_index = _renderer_shape.index, index = _renderer_shape_index === void 0 ? [] : _renderer_shape_index, _renderer_shape_aPoint = _renderer_shape.aPoint, aPoint = _renderer_shape_aPoint === void 0 ? [] : _renderer_shape_aPoint;
@@ -14341,7 +14467,6 @@ exports.SpriteComponent = /*#__PURE__*/ function(RendererComponent) {
14341
14467
  this.worldMatrix = Matrix4.fromIdentity();
14342
14468
  this.material = material;
14343
14469
  this.geometry = geometry;
14344
- this.name = "MSprite" + seed$4++;
14345
14470
  var startColor = options.startColor || [
14346
14471
  1,
14347
14472
  1,
@@ -18458,11 +18583,6 @@ var CalculateLoader = /*#__PURE__*/ function(AbstractPlugin) {
18458
18583
  return CalculateLoader;
18459
18584
  }(AbstractPlugin);
18460
18585
 
18461
- function _assert_this_initialized(self) {
18462
- if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
18463
- return self;
18464
- }
18465
-
18466
18586
  var AnimationStream = /*#__PURE__*/ function() {
18467
18587
  function AnimationStream(playable) {
18468
18588
  this.curveValues = {};
@@ -19257,6 +19377,9 @@ function compareTracks(a, b) {
19257
19377
  _this.startTime = 0;
19258
19378
  _this.items = [] // 场景的所有元素
19259
19379
  ;
19380
+ /**
19381
+ * 合成是否冻结标志位
19382
+ */ _this.fezzed = false;
19260
19383
  _this.reusable = false;
19261
19384
  _this.sceneBindings = [];
19262
19385
  _this.graph = new PlayableGraph();
@@ -19293,10 +19416,6 @@ function compareTracks(a, b) {
19293
19416
  };
19294
19417
  _proto.update = function update(dt) {
19295
19418
  var time = this.time;
19296
- // 主合成 rootItem 没有绑定轨道,增加结束行为判断。
19297
- if (this.item.isEnded(this.time) && !this.item.parent) {
19298
- this.item.ended = true;
19299
- }
19300
19419
  this.timelinePlayable.setTime(time);
19301
19420
  this.graph.evaluate(dt);
19302
19421
  };
@@ -19429,6 +19548,8 @@ function compareTracks(a, b) {
19429
19548
  hitPositions: hitPositions,
19430
19549
  behavior: hitParams.behavior
19431
19550
  };
19551
+ // 触发单个元素的点击事件
19552
+ item.emit("click", region);
19432
19553
  regions.push(region);
19433
19554
  if (stop(region)) {
19434
19555
  return {
@@ -20664,8 +20785,6 @@ exports.VFXItem = /*#__PURE__*/ function(EffectsObject) {
20664
20785
  this.parentId = parentId;
20665
20786
  this.duration = duration;
20666
20787
  this.endBehavior = endBehavior;
20667
- //@ts-expect-error
20668
- this.oldId = data.oldId;
20669
20788
  if (!data.content) {
20670
20789
  data.content = {
20671
20790
  options: {}
@@ -24674,89 +24793,93 @@ var listOrder = 0;
24674
24793
  * 合成抽象类:核心对象,通常一个场景只包含一个合成,可能会有多个合成。
24675
24794
  * 合成中包含了相关的 Item 元素,支持对 Item 元素的创建、更新和销毁。
24676
24795
  * 也负责 Item 相关的动画播放控制,和持有渲染帧数据。
24677
- */ var Composition = /*#__PURE__*/ function() {
24796
+ */ var Composition = /*#__PURE__*/ function(EventEmitter) {
24797
+ _inherits(Composition, EventEmitter);
24678
24798
  function Composition(props, scene) {
24679
- var _this = this;
24799
+ var _this;
24800
+ _this = EventEmitter.call(this) || this;
24680
24801
  /**
24681
24802
  * 动画播放速度
24682
- */ this.speed = 1;
24803
+ */ _this.speed = 1;
24683
24804
  /**
24684
24805
  * 用于保存与当前合成相关的插件数据
24685
- */ this.loaderData = {};
24806
+ */ _this.loaderData = {};
24686
24807
  /**
24687
24808
  * 预合成数组
24688
- */ this.refContent = [];
24809
+ */ _this.refContent = [];
24689
24810
  /**
24690
24811
  * 预合成的合成属性,在 content 中会被其元素属性覆盖
24691
- */ this.refCompositionProps = new Map();
24812
+ */ _this.refCompositionProps = new Map();
24692
24813
  // TODO: 待优化
24693
- this.assigned = false;
24814
+ _this.assigned = false;
24694
24815
  /**
24695
24816
  * 销毁状态位
24696
- */ this.destroyed = false;
24697
- this.postLoaders = [];
24817
+ */ _this.destroyed = false;
24818
+ _this.postLoaders = [];
24698
24819
  /**
24699
24820
  * 合成暂停/播放 标识
24700
- */ this.paused = false;
24701
- this.lastVideoUpdateTime = 0;
24702
- var _props_reusable = props.reusable, reusable = _props_reusable === void 0 ? false : _props_reusable, _props_speed = props.speed, speed = _props_speed === void 0 ? 1 : _props_speed, _props_baseRenderOrder = props.baseRenderOrder, baseRenderOrder = _props_baseRenderOrder === void 0 ? 0 : _props_baseRenderOrder, renderer = props.renderer, onPlayerPause = props.onPlayerPause, onMessageItem = props.onMessageItem, onEnd = props.onEnd, event = props.event, width = props.width, height = props.height;
24703
- this.compositionSourceManager = new CompositionSourceManager(scene, renderer.engine);
24821
+ */ _this.paused = false;
24822
+ _this.lastVideoUpdateTime = 0;
24823
+ var _props_reusable = props.reusable, reusable = _props_reusable === void 0 ? false : _props_reusable, _props_speed = props.speed, speed = _props_speed === void 0 ? 1 : _props_speed, _props_baseRenderOrder = props.baseRenderOrder, baseRenderOrder = _props_baseRenderOrder === void 0 ? 0 : _props_baseRenderOrder, renderer = props.renderer, event = props.event, width = props.width, height = props.height, handleItemMessage = props.handleItemMessage;
24824
+ _this.compositionSourceManager = new CompositionSourceManager(scene, renderer.engine);
24704
24825
  scene.jsonScene.imgUsage = undefined;
24705
24826
  if (reusable) {
24706
- this.keepResource = true;
24827
+ _this.keepResource = true;
24707
24828
  scene.textures = undefined;
24708
24829
  scene.consumed = true;
24709
24830
  }
24710
- var _this_compositionSourceManager = this.compositionSourceManager, sourceContent = _this_compositionSourceManager.sourceContent, pluginSystem = _this_compositionSourceManager.pluginSystem, imgUsage = _this_compositionSourceManager.imgUsage, totalTime = _this_compositionSourceManager.totalTime, refCompositionProps = _this_compositionSourceManager.refCompositionProps;
24831
+ var _this_compositionSourceManager = _this.compositionSourceManager, sourceContent = _this_compositionSourceManager.sourceContent, pluginSystem = _this_compositionSourceManager.pluginSystem, imgUsage = _this_compositionSourceManager.imgUsage, totalTime = _this_compositionSourceManager.totalTime, refCompositionProps = _this_compositionSourceManager.refCompositionProps;
24711
24832
  assertExist(sourceContent);
24712
- this.renderer = renderer;
24713
- this.refCompositionProps = refCompositionProps;
24714
- this.rootItem = new exports.VFXItem(this.getEngine(), sourceContent);
24715
- this.rootItem.name = "rootItem";
24716
- this.rootItem.composition = this;
24717
- this.rootComposition = this.rootItem.addComponent(CompositionComponent);
24718
- this.rootComposition.data = sourceContent;
24833
+ _this.renderer = renderer;
24834
+ _this.refCompositionProps = refCompositionProps;
24835
+ _this.rootItem = new exports.VFXItem(_this.getEngine(), sourceContent);
24836
+ _this.rootItem.name = "rootItem";
24837
+ _this.rootItem.composition = _assert_this_initialized(_this);
24838
+ _this.rootComposition = _this.rootItem.addComponent(CompositionComponent);
24839
+ _this.rootComposition.startTime = sourceContent.startTime;
24840
+ _this.rootComposition.data = sourceContent;
24719
24841
  var imageUsage = !reusable && imgUsage;
24720
- this.width = width;
24721
- this.height = height;
24722
- this.renderOrder = baseRenderOrder;
24723
- this.id = sourceContent.id;
24724
- this.renderer = renderer;
24725
- this.texInfo = imageUsage != null ? imageUsage : {};
24726
- this.event = event;
24842
+ _this.width = width;
24843
+ _this.height = height;
24844
+ _this.renderOrder = baseRenderOrder;
24845
+ _this.id = sourceContent.id;
24846
+ _this.renderer = renderer;
24847
+ _this.texInfo = imageUsage != null ? imageUsage : {};
24848
+ _this.event = event;
24727
24849
  var _scene_startTime, _scene_timeInfos_asyncCompile;
24728
- this.statistic = {
24850
+ _this.statistic = {
24729
24851
  loadTime: totalTime != null ? totalTime : 0,
24730
24852
  loadStart: (_scene_startTime = scene.startTime) != null ? _scene_startTime : 0,
24731
24853
  firstFrameTime: 0,
24732
24854
  precompileTime: (_scene_timeInfos_asyncCompile = scene.timeInfos["asyncCompile"]) != null ? _scene_timeInfos_asyncCompile : scene.timeInfos["syncCompile"]
24733
24855
  };
24734
- this.reusable = reusable;
24735
- this.speed = speed;
24736
- this.autoRefTex = !this.keepResource && imageUsage && this.rootItem.endBehavior !== EndBehavior.restart;
24737
- this.name = sourceContent.name;
24738
- this.pluginSystem = pluginSystem;
24739
- this.pluginSystem.initializeComposition(this, scene);
24740
- this.camera = new Camera(this.name, _extends({}, sourceContent == null ? void 0 : sourceContent.camera, {
24856
+ _this.reusable = reusable;
24857
+ _this.speed = speed;
24858
+ _this.autoRefTex = !_this.keepResource && imageUsage && _this.rootItem.endBehavior !== EndBehavior.restart;
24859
+ _this.name = sourceContent.name;
24860
+ _this.pluginSystem = pluginSystem;
24861
+ _this.pluginSystem.initializeComposition(_assert_this_initialized(_this), scene);
24862
+ _this.camera = new Camera(_this.name, _extends({}, sourceContent == null ? void 0 : sourceContent.camera, {
24741
24863
  aspect: width / height
24742
24864
  }));
24743
- this.url = scene.url;
24744
- this.assigned = true;
24745
- this.globalTime = 0;
24746
- this.interactive = true;
24747
- this.onPlayerPause = onPlayerPause;
24748
- this.onMessageItem = onMessageItem;
24749
- this.onEnd = onEnd;
24750
- this.createRenderFrame();
24751
- this.rendererOptions = null;
24752
- this.rootComposition.createContent();
24753
- this.buildItemTree(this.rootItem);
24754
- this.rootItem.onEnd = function() {
24865
+ _this.url = scene.url;
24866
+ _this.assigned = true;
24867
+ _this.globalTime = 0;
24868
+ _this.interactive = true;
24869
+ _this.handleItemMessage = handleItemMessage;
24870
+ _this.createRenderFrame();
24871
+ _this.rendererOptions = null;
24872
+ _this.rootComposition.createContent();
24873
+ _this.buildItemTree(_this.rootItem);
24874
+ _this.rootItem.onEnd = function() {
24755
24875
  window.setTimeout(function() {
24756
- _this.onEnd == null ? void 0 : _this.onEnd.call(_this, _this);
24876
+ _this.emit("end", {
24877
+ composition: _assert_this_initialized(_this)
24878
+ });
24757
24879
  }, 0);
24758
24880
  };
24759
- this.pluginSystem.resetComposition(this, this.renderFrame);
24881
+ _this.pluginSystem.resetComposition(_assert_this_initialized(_this), _this.renderFrame);
24882
+ return _this;
24760
24883
  }
24761
24884
  var _proto = Composition.prototype;
24762
24885
  /**
@@ -24807,7 +24930,7 @@ var listOrder = 0;
24807
24930
  if (this.rootItem.ended && this.reusable) {
24808
24931
  this.restart();
24809
24932
  }
24810
- if (!this.rootComposition.started) {
24933
+ if (this.rootComposition.started) {
24811
24934
  this.gotoAndPlay(this.time - this.startTime);
24812
24935
  } else {
24813
24936
  this.gotoAndPlay(0);
@@ -24830,18 +24953,14 @@ var listOrder = 0;
24830
24953
  * 跳转合成到指定时间播放
24831
24954
  * @param time - 相对 startTime 的时间
24832
24955
  */ _proto.gotoAndPlay = function gotoAndPlay(time) {
24956
+ this.setTime(time);
24833
24957
  this.resume();
24834
- if (!this.rootComposition.started) {
24835
- this.rootComposition.start();
24836
- this.rootComposition.started = true;
24837
- }
24838
- this.forwardTime(time + this.startTime);
24839
24958
  };
24840
24959
  /**
24841
24960
  * 跳转合成到指定时间并暂停
24842
24961
  * @param time - 相对 startTime 的时间
24843
24962
  */ _proto.gotoAndStop = function gotoAndStop(time) {
24844
- this.gotoAndPlay(time);
24963
+ this.setTime(time);
24845
24964
  this.pause();
24846
24965
  };
24847
24966
  /**
@@ -24868,7 +24987,7 @@ var listOrder = 0;
24868
24987
  this.rootComposition.start();
24869
24988
  this.rootComposition.started = true;
24870
24989
  }
24871
- this.forwardTime(time + this.startTime, true);
24990
+ this.forwardTime(time + this.startTime);
24872
24991
  if (pause) {
24873
24992
  this.pause();
24874
24993
  }
@@ -24881,17 +25000,16 @@ var listOrder = 0;
24881
25000
  * 前进合成到指定时间
24882
25001
  * @param time - 相对0时刻的时间
24883
25002
  * @param skipRender - 是否跳过渲染
24884
- */ _proto.forwardTime = function forwardTime(time, skipRender) {
24885
- if (skipRender === void 0) skipRender = false;
25003
+ */ _proto.forwardTime = function forwardTime(time) {
24886
25004
  var deltaTime = time * 1000 - this.rootComposition.time * 1000;
24887
25005
  var reverse = deltaTime < 0;
24888
25006
  var step = 15;
24889
25007
  var t = Math.abs(deltaTime);
24890
25008
  var ss = reverse ? -step : step;
24891
25009
  for(t; t > step; t -= step){
24892
- this.update(ss, skipRender);
25010
+ this.update(ss);
24893
25011
  }
24894
- this.update(reverse ? -t : t, skipRender);
25012
+ this.update(reverse ? -t : t);
24895
25013
  };
24896
25014
  /**
24897
25015
  * 重置状态函数
@@ -24932,8 +25050,9 @@ var listOrder = 0;
24932
25050
  * 是否合成需要重新播放
24933
25051
  * @returns 重新播放合成标志位
24934
25052
  */ _proto.shouldRestart = function shouldRestart() {
24935
- var _this_rootItem = this.rootItem, ended = _this_rootItem.ended, endBehavior = _this_rootItem.endBehavior;
24936
- return ended && endBehavior === EndBehavior.restart;
25053
+ var _this_rootItem = this.rootItem, duration = _this_rootItem.duration, endBehavior = _this_rootItem.endBehavior;
25054
+ var time = this.rootComposition.time;
25055
+ return endBehavior === EndBehavior.restart && duration - time < 0.02;
24937
25056
  };
24938
25057
  /**
24939
25058
  * 是否合成需要销毁
@@ -24942,44 +25061,45 @@ var listOrder = 0;
24942
25061
  if (this.reusable) {
24943
25062
  return false;
24944
25063
  }
24945
- var _this_rootItem = this.rootItem, ended = _this_rootItem.ended, endBehavior = _this_rootItem.endBehavior;
25064
+ var endBehavior = this.rootItem.endBehavior;
25065
+ if (this.rootItem.isEnded(this.time)) {
25066
+ this.rootItem.ended = true;
25067
+ }
24946
25068
  // TODO: 合成结束行为
24947
- return ended && (!endBehavior || endBehavior === END_BEHAVIOR_PAUSE_AND_DESTROY);
25069
+ return this.rootItem.ended && endBehavior === EndBehavior.destroy;
24948
25070
  };
24949
25071
  /**
24950
25072
  * 合成更新,针对所有 item 的更新
24951
25073
  * @param deltaTime - 更新的时间步长
24952
25074
  * @param skipRender - 是否需要渲染
24953
- */ _proto.update = function update(deltaTime, skipRender) {
24954
- if (skipRender === void 0) skipRender = false;
25075
+ */ _proto.update = function update(deltaTime) {
24955
25076
  if (!this.assigned || this.paused) {
24956
25077
  return;
24957
25078
  }
25079
+ var time = this.getUpdateTime(deltaTime * this.speed);
25080
+ this.globalTime += time;
25081
+ this.updateRootComposition();
24958
25082
  if (this.shouldRestart()) {
25083
+ this.emit("end", {
25084
+ composition: this
25085
+ });
24959
25086
  this.restart();
24960
25087
  // restart then tick to avoid flicker
24961
25088
  }
24962
- var time = this.getUpdateTime(deltaTime * this.speed);
24963
- this.globalTime += time;
24964
- if (this.rootComposition.isActiveAndEnabled) {
24965
- var localTime = this.toLocalTime(this.globalTime / 1000);
24966
- this.rootComposition.time = localTime;
24967
- }
24968
25089
  this.updateVideo();
24969
25090
  // 更新 model-tree-plugin
24970
25091
  this.updatePluginLoaders(deltaTime);
24971
25092
  this.callStart(this.rootItem);
24972
25093
  this.callUpdate(this.rootItem, time);
24973
25094
  this.callLateUpdate(this.rootItem, time);
24974
- // this.extraCamera?.getComponent(TimelineComponent)?.update(deltaTime);
24975
25095
  this.updateCamera();
24976
25096
  if (this.shouldDispose()) {
24977
- this.onEnd == null ? void 0 : this.onEnd.call(this, this);
25097
+ this.emit("end", {
25098
+ composition: this
25099
+ });
24978
25100
  this.dispose();
24979
25101
  } else {
24980
- if (!skipRender) {
24981
- this.prepareRender();
24982
- }
25102
+ this.prepareRender();
24983
25103
  }
24984
25104
  };
24985
25105
  _proto.toLocalTime = function toLocalTime(time) {
@@ -24990,13 +25110,20 @@ var listOrder = 0;
24990
25110
  localTime = localTime % duration;
24991
25111
  } else if (this.rootItem.endBehavior === EndBehavior.freeze) {
24992
25112
  localTime = Math.min(duration, localTime);
25113
+ if (localTime === duration) {
25114
+ if (!this.rootComposition.fezzed) {
25115
+ this.rootComposition.fezzed = true;
25116
+ this.emit("end", {
25117
+ composition: this
25118
+ });
25119
+ }
25120
+ }
24993
25121
  }
24994
25122
  }
24995
25123
  return localTime;
24996
25124
  };
24997
25125
  _proto.getUpdateTime = function getUpdateTime(t) {
24998
25126
  var startTimeInMs = this.startTime * 1000;
24999
- // const content = this.rootItem;
25000
25127
  var now = this.rootComposition.time * 1000;
25001
25128
  if (t < 0 && now + t < startTimeInMs) {
25002
25129
  return startTimeInMs - now;
@@ -25144,6 +25271,14 @@ var listOrder = 0;
25144
25271
  });
25145
25272
  };
25146
25273
  /**
25274
+ * 更新主合成组件
25275
+ */ _proto.updateRootComposition = function updateRootComposition() {
25276
+ if (this.rootComposition.isActiveAndEnabled) {
25277
+ var localTime = this.toLocalTime(this.globalTime / 1000);
25278
+ this.rootComposition.time = localTime;
25279
+ }
25280
+ };
25281
+ /**
25147
25282
  * 通过名称获取元素
25148
25283
  * @param name - 元素名称
25149
25284
  * @returns 元素对象
@@ -25192,12 +25327,17 @@ var listOrder = 0;
25192
25327
  * @param type - 交互类型
25193
25328
  */ _proto.addInteractiveItem = function addInteractiveItem(item, type) {
25194
25329
  if (type === InteractType.MESSAGE) {
25195
- this.onMessageItem == null ? void 0 : this.onMessageItem.call(this, {
25330
+ this.handleItemMessage({
25196
25331
  name: item.name,
25197
25332
  phrase: MESSAGE_ITEM_PHRASE_BEGIN,
25198
25333
  id: item.id,
25199
25334
  compositionId: this.id
25200
25335
  });
25336
+ item.emit("message", {
25337
+ name: item.name,
25338
+ phrase: MESSAGE_ITEM_PHRASE_BEGIN,
25339
+ id: item.id
25340
+ });
25201
25341
  return item.id;
25202
25342
  }
25203
25343
  };
@@ -25206,14 +25346,19 @@ var listOrder = 0;
25206
25346
  * @param item - 交互元素
25207
25347
  * @param type - 交互类型
25208
25348
  */ _proto.removeInteractiveItem = function removeInteractiveItem(item, type) {
25209
- // MESSAGE ITEM的结束行为
25349
+ // MESSAGE ITEM 的结束行为
25210
25350
  if (type === InteractType.MESSAGE) {
25211
- this.onMessageItem == null ? void 0 : this.onMessageItem.call(this, {
25351
+ this.handleItemMessage({
25212
25352
  name: item.name,
25213
25353
  phrase: MESSAGE_ITEM_PHRASE_END,
25214
25354
  id: item.id,
25215
25355
  compositionId: this.id
25216
25356
  });
25357
+ item.emit("message", {
25358
+ name: item.name,
25359
+ phrase: MESSAGE_ITEM_PHRASE_END,
25360
+ id: item.id
25361
+ });
25217
25362
  }
25218
25363
  };
25219
25364
  /**
@@ -25309,7 +25454,6 @@ var listOrder = 0;
25309
25454
  this.update = function() {
25310
25455
  logger.error("Update disposed composition: " + _this.name + ".");
25311
25456
  };
25312
- this.onPlayerPause = noop;
25313
25457
  this.dispose = noop;
25314
25458
  if (textures && this.keepResource) {
25315
25459
  textures.forEach(function(tex) {
@@ -25507,7 +25651,7 @@ var listOrder = 0;
25507
25651
  }
25508
25652
  ]);
25509
25653
  return Composition;
25510
- }();
25654
+ }(EventEmitter);
25511
25655
 
25512
25656
  var SIZEOF_SHORT = 2;
25513
25657
  var SIZEOF_INT = 4;
@@ -27471,7 +27615,7 @@ registerPlugin("sprite", SpriteLoader, exports.VFXItem, true);
27471
27615
  registerPlugin("particle", ParticleLoader, exports.VFXItem, true);
27472
27616
  registerPlugin("cal", CalculateLoader, exports.VFXItem, true);
27473
27617
  registerPlugin("interact", InteractLoader, exports.VFXItem, true);
27474
- var version$1 = "2.0.0-alpha.30";
27618
+ var version$1 = "2.0.0-alpha.32";
27475
27619
  logger.info("Core version: " + version$1 + ".");
27476
27620
 
27477
27621
  var _obj;
@@ -27545,6 +27689,13 @@ var _obj3;
27545
27689
  */ _this.uniforms = {};
27546
27690
  var shader = props == null ? void 0 : props.shader;
27547
27691
  var level = engine.gpuCapability.level;
27692
+ _this.shader = new exports.Shader(engine);
27693
+ _this.shader.shaderData = _extends({}, shader, {
27694
+ id: generateGUID(),
27695
+ dataType: DataType.Shader,
27696
+ vertex: (shader == null ? void 0 : shader.vertex) || "",
27697
+ fragment: (shader == null ? void 0 : shader.fragment) || ""
27698
+ });
27548
27699
  for(var i = 0; i < exports.maxSpriteMeshItemCount; i++){
27549
27700
  _this.uniforms["uSampler" + i] = new THREE__namespace.Uniform(null);
27550
27701
  }
@@ -28725,6 +28876,8 @@ var ThreeRenderer = /*#__PURE__*/ function(Renderer) {
28725
28876
  var _this;
28726
28877
  _this = Renderer.call(this) || this;
28727
28878
  _this.engine = new ThreeEngine(gl);
28879
+ _this.engine.renderer = _assert_this_initialized(_this);
28880
+ _this.env = "";
28728
28881
  _this.renderingData = {
28729
28882
  //@ts-expect-error
28730
28883
  currentFrame: {}
@@ -28752,8 +28905,8 @@ var ThreeRenderer = /*#__PURE__*/ function(Renderer) {
28752
28905
  var _this;
28753
28906
  _this = _THREE_Group.call(this) || this;
28754
28907
  _this.compositions = [];
28755
- _this.baseCompositionIndex = 0;
28756
28908
  _this.env = "";
28909
+ _this.baseCompositionIndex = 0;
28757
28910
  var width = options.width, height = options.height, camera = options.camera;
28758
28911
  _this.renderer = new ThreeRenderer(context);
28759
28912
  _this.width = width;
@@ -28822,6 +28975,19 @@ var ThreeRenderer = /*#__PURE__*/ function(Renderer) {
28822
28975
  });
28823
28976
  })();
28824
28977
  };
28978
+ _proto.pause = function pause() {
28979
+ this.dispatchEvent({
28980
+ type: "pause"
28981
+ });
28982
+ this.compositions.forEach(function(composition) {
28983
+ composition.pause();
28984
+ });
28985
+ };
28986
+ _proto.resume = function resume() {
28987
+ this.compositions.forEach(function(composition) {
28988
+ composition.resume();
28989
+ });
28990
+ };
28825
28991
  _proto.createComposition = function createComposition(url, options) {
28826
28992
  if (options === void 0) options = {};
28827
28993
  var _this = this;
@@ -28878,8 +29044,20 @@ var ThreeRenderer = /*#__PURE__*/ function(Renderer) {
28878
29044
  composition = new ThreeComposition(_extends({}, opts, {
28879
29045
  width: _this.width,
28880
29046
  height: _this.height,
28881
- renderer: _this.renderer
29047
+ renderer: _this.renderer,
29048
+ handleItemMessage: function(message) {
29049
+ _this.dispatchEvent({
29050
+ type: "message",
29051
+ message: message
29052
+ });
29053
+ }
28882
29054
  }), scene);
29055
+ composition.on("end", function() {
29056
+ _this.dispatchEvent({
29057
+ type: "end",
29058
+ composition: composition
29059
+ });
29060
+ });
28883
29061
  _this.renderer.engine.setOptions({
28884
29062
  threeCamera: _this.camera,
28885
29063
  threeGroup: _this,
@@ -29104,7 +29282,7 @@ setMaxSpriteMeshItemCount(8);
29104
29282
  */ Mesh.create = function(engine, props) {
29105
29283
  return new ThreeMesh(engine, props);
29106
29284
  };
29107
- var version = "2.0.0-alpha.30";
29285
+ var version = "2.0.0-alpha.32";
29108
29286
  logger.info("THREEJS plugin version: " + version + ".");
29109
29287
 
29110
29288
  exports.AbstractPlugin = AbstractPlugin;
@@ -29142,6 +29320,7 @@ exports.EVENT_TYPE_TOUCH_START = EVENT_TYPE_TOUCH_START;
29142
29320
  exports.EffectsObject = EffectsObject;
29143
29321
  exports.EffectsPackage = EffectsPackage;
29144
29322
  exports.Engine = Engine;
29323
+ exports.EventEmitter = EventEmitter;
29145
29324
  exports.EventSystem = EventSystem;
29146
29325
  exports.Float16ArrayWrapper = Float16ArrayWrapper;
29147
29326
  exports.Framebuffer = Framebuffer;