@galacean/effects-core 2.0.0-beta.0 → 2.0.0-beta.2

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/camera.d.ts CHANGED
@@ -159,7 +159,7 @@ export declare class Camera {
159
159
  */
160
160
  getModelViewProjection(out: Matrix4, model: Matrix4): Matrix4;
161
161
  /**
162
- * 获取归一化坐标和 3D 世界坐标的换算比例
162
+ * 获取归一化坐标和 3D 世界坐标的换算比例,使用 ViewProjection 矩阵
163
163
  * @param z - 当前的位置 z
164
164
  */
165
165
  getInverseVPRatio(z: number): Vector3;
@@ -24,6 +24,8 @@ export declare abstract class Component extends EffectsObject {
24
24
  * @internal
25
25
  */
26
26
  export declare abstract class Behaviour extends Component {
27
+ isAwakeCalled: boolean;
28
+ isStartCalled: boolean;
27
29
  private _enabled;
28
30
  /**
29
31
  * 组件是否可以更新,true 更新,false 不更新
@@ -31,7 +33,10 @@ export declare abstract class Behaviour extends Component {
31
33
  get isActiveAndEnabled(): boolean;
32
34
  get enabled(): boolean;
33
35
  set enabled(value: boolean);
34
- isStartCalled: boolean;
36
+ /**
37
+ * 生命周期函数,初始化后调用,生命周期内只调用一次
38
+ */
39
+ awake(): void;
35
40
  /**
36
41
  * 在每次设置 enabled 为 true 时触发
37
42
  */
@@ -296,6 +296,7 @@ export declare class Composition extends EventEmitter<CompositionEvent<Compositi
296
296
  private toLocalTime;
297
297
  private shouldDispose;
298
298
  private getUpdateTime;
299
+ private callAwake;
299
300
  private callStart;
300
301
  private callUpdate;
301
302
  private callLateUpdate;
@@ -1,12 +1,10 @@
1
1
  import type * as spec from '@galacean/effects-specification';
2
2
  import type { Engine } from './engine';
3
- import type { ItemEvent } from './events';
4
- import { EventEmitter } from './events';
5
3
  /**
6
4
  * @since 2.0.0
7
5
  * @internal
8
6
  */
9
- export declare abstract class EffectsObject extends EventEmitter<ItemEvent> {
7
+ export declare abstract class EffectsObject {
10
8
  engine: Engine;
11
9
  static is(obj: unknown): obj is EffectsObject;
12
10
  protected guid: string;
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects runtime core for the web
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 燃然,飂兮,十弦,云垣,茂安,意绮
6
- * Version: v2.0.0-beta.0
6
+ * Version: v2.0.0-beta.2
7
7
  */
8
8
 
9
9
  'use strict';
@@ -4567,97 +4567,15 @@ function getDirectStore(target) {
4567
4567
  return decoratorInitialStore.get(classKey);
4568
4568
  }
4569
4569
 
4570
- function _assert_this_initialized(self) {
4571
- if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
4572
- return self;
4573
- }
4574
-
4575
- var EventEmitter = function EventEmitter() {
4576
- var _this = this;
4577
- var _this1 = this;
4578
- this.listeners = {};
4579
- /**
4580
- * 移除事件监听器
4581
- * @param eventName - 事件名称
4582
- * @param listener - 事件监听器
4583
- * @returns
4584
- */ this.off = function(eventName, listener) {
4585
- if (!_this.listeners[eventName]) {
4586
- return;
4587
- }
4588
- _this.listeners[eventName] = _this.listeners[eventName].filter(function(param) {
4589
- var l = param.listener;
4590
- return l !== listener;
4591
- });
4592
- };
4593
- /**
4594
- * 监听事件
4595
- * @param eventName - 事件名称
4596
- * @param listener - 事件监听器
4597
- * @param options - 事件监听器选项
4598
- * @returns
4599
- */ this.on = function(eventName, listener, options) {
4600
- _this.listeners[eventName] = _this.listeners[eventName] || [];
4601
- _this.listeners[eventName].push({
4602
- listener: listener,
4603
- options: options
4604
- });
4605
- return function() {
4606
- return _this.off(eventName, listener);
4607
- };
4608
- };
4609
- /**
4610
- * 一次性监听事件
4611
- * @param eventName - 事件名称
4612
- * @param listener - 事件监听器
4613
- */ this.once = function(eventName, listener) {
4614
- _this.on(eventName, listener, {
4615
- once: true
4616
- });
4617
- };
4618
- /**
4619
- * 触发事件
4620
- * @param eventName - 事件名称
4621
- * @param args - 事件参数
4622
- */ this.emit = function(eventName) {
4623
- for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
4624
- args[_key - 1] = arguments[_key];
4625
- }
4626
- var _this_listeners_eventName;
4627
- (_this_listeners_eventName = _this1.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.forEach(function(param) {
4628
- var listener = param.listener, options = param.options;
4629
- listener.apply(void 0, [].concat(args));
4630
- if (options == null ? void 0 : options.once) {
4631
- _this1.off(eventName, listener);
4632
- }
4633
- });
4634
- };
4635
- /**
4636
- * 获取事件名称对应的所有监听器
4637
- * @param eventName - 事件名称
4638
- * @returns - 返回事件名称对应的所有监听器
4639
- */ this.getListeners = function(eventName) {
4640
- var _this_listeners_eventName;
4641
- return ((_this_listeners_eventName = _this.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.map(function(param) {
4642
- var listener = param.listener;
4643
- return listener;
4644
- })) || [];
4645
- };
4646
- };
4647
-
4648
4570
  /**
4649
4571
  * @since 2.0.0
4650
4572
  * @internal
4651
- */ var EffectsObject = /*#__PURE__*/ function(EventEmitter) {
4652
- _inherits(EffectsObject, EventEmitter);
4573
+ */ var EffectsObject = /*#__PURE__*/ function() {
4653
4574
  function EffectsObject(engine) {
4654
- var _this;
4655
- _this = EventEmitter.call(this) || this;
4656
- _this.engine = engine;
4657
- _this.guid = generateGUID();
4658
- _this.taggedProperties = {};
4659
- _this.engine.addInstance(_assert_this_initialized(_this));
4660
- return _this;
4575
+ this.engine = engine;
4576
+ this.guid = generateGUID();
4577
+ this.taggedProperties = {};
4578
+ this.engine.addInstance(this);
4661
4579
  }
4662
4580
  var _proto = EffectsObject.prototype;
4663
4581
  _proto.getInstanceId = function getInstanceId() {
@@ -4683,7 +4601,7 @@ var EventEmitter = function EventEmitter() {
4683
4601
  return _instanceof1(obj, EffectsObject) && "guid" in obj;
4684
4602
  };
4685
4603
  return EffectsObject;
4686
- }(EventEmitter);
4604
+ }();
4687
4605
 
4688
4606
  /**
4689
4607
  * @since 2.0.0
@@ -4728,17 +4646,17 @@ var EventEmitter = function EventEmitter() {
4728
4646
  function Behaviour() {
4729
4647
  var _this;
4730
4648
  _this = Component.apply(this, arguments) || this;
4731
- _this._enabled = true;
4649
+ _this.isAwakeCalled = false;
4732
4650
  _this.isStartCalled = false;
4651
+ _this._enabled = true;
4733
4652
  return _this;
4734
4653
  }
4735
4654
  var _proto = Behaviour.prototype;
4736
- // /**
4737
- // * 生命周期函数,初始化后调用,生命周期内只调用一次
4738
- // */
4739
- // awake () {
4740
- // // OVERRIDE
4741
- // }
4655
+ /**
4656
+ * 生命周期函数,初始化后调用,生命周期内只调用一次
4657
+ */ _proto.awake = function awake() {
4658
+ // OVERRIDE
4659
+ };
4742
4660
  /**
4743
4661
  * 在每次设置 enabled 为 true 时触发
4744
4662
  */ _proto.onEnable = function onEnable() {
@@ -4761,6 +4679,10 @@ var EventEmitter = function EventEmitter() {
4761
4679
  };
4762
4680
  _proto.onAttached = function onAttached() {
4763
4681
  this.item.itemBehaviours.push(this);
4682
+ if (!this.isAwakeCalled) {
4683
+ this.awake();
4684
+ this.isAwakeCalled = true;
4685
+ }
4764
4686
  };
4765
4687
  _proto.dispose = function dispose() {
4766
4688
  if (this.item) {
@@ -4785,7 +4707,9 @@ var EventEmitter = function EventEmitter() {
4785
4707
  set: function set(value) {
4786
4708
  this._enabled = value;
4787
4709
  if (value) {
4788
- this.onEnable();
4710
+ if (this.isActiveAndEnabled) {
4711
+ this.onEnable();
4712
+ }
4789
4713
  if (!this.isStartCalled) {
4790
4714
  this.start();
4791
4715
  this.isStartCalled = true;
@@ -13631,6 +13555,11 @@ var SpriteLoader = /*#__PURE__*/ function(AbstractPlugin) {
13631
13555
  return SpriteLoader;
13632
13556
  }(AbstractPlugin);
13633
13557
 
13558
+ function _assert_this_initialized(self) {
13559
+ if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
13560
+ return self;
13561
+ }
13562
+
13634
13563
  /**
13635
13564
  * 动画图,负责更新所有的动画节点
13636
13565
  * @since 2.0.0
@@ -17252,12 +17181,6 @@ exports.ParticleSystem = /*#__PURE__*/ function(Component) {
17252
17181
  area: area
17253
17182
  };
17254
17183
  };
17255
- _proto.onAttached = function onAttached() {
17256
- Component.prototype.onAttached.call(this);
17257
- this.renderer.item = this.item;
17258
- this.item.components.push(this.renderer);
17259
- this.item.rendererComponents.push(this.renderer);
17260
- };
17261
17184
  _proto.fromData = function fromData(data) {
17262
17185
  Component.prototype.fromData.call(this, data);
17263
17186
  var props = data;
@@ -20492,6 +20415,79 @@ exports.PostProcessVolume = __decorate([
20492
20415
  effectsClass("PostProcessVolume")
20493
20416
  ], exports.PostProcessVolume);
20494
20417
 
20418
+ var EventEmitter = function EventEmitter() {
20419
+ var _this = this;
20420
+ var _this1 = this;
20421
+ this.listeners = {};
20422
+ /**
20423
+ * 移除事件监听器
20424
+ * @param eventName - 事件名称
20425
+ * @param listener - 事件监听器
20426
+ * @returns
20427
+ */ this.off = function(eventName, listener) {
20428
+ if (!_this.listeners[eventName]) {
20429
+ return;
20430
+ }
20431
+ _this.listeners[eventName] = _this.listeners[eventName].filter(function(param) {
20432
+ var l = param.listener;
20433
+ return l !== listener;
20434
+ });
20435
+ };
20436
+ /**
20437
+ * 监听事件
20438
+ * @param eventName - 事件名称
20439
+ * @param listener - 事件监听器
20440
+ * @param options - 事件监听器选项
20441
+ * @returns
20442
+ */ this.on = function(eventName, listener, options) {
20443
+ _this.listeners[eventName] = _this.listeners[eventName] || [];
20444
+ _this.listeners[eventName].push({
20445
+ listener: listener,
20446
+ options: options
20447
+ });
20448
+ return function() {
20449
+ return _this.off(eventName, listener);
20450
+ };
20451
+ };
20452
+ /**
20453
+ * 一次性监听事件
20454
+ * @param eventName - 事件名称
20455
+ * @param listener - 事件监听器
20456
+ */ this.once = function(eventName, listener) {
20457
+ _this.on(eventName, listener, {
20458
+ once: true
20459
+ });
20460
+ };
20461
+ /**
20462
+ * 触发事件
20463
+ * @param eventName - 事件名称
20464
+ * @param args - 事件参数
20465
+ */ this.emit = function(eventName) {
20466
+ for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
20467
+ args[_key - 1] = arguments[_key];
20468
+ }
20469
+ var _this_listeners_eventName;
20470
+ (_this_listeners_eventName = _this1.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.forEach(function(param) {
20471
+ var listener = param.listener, options = param.options;
20472
+ listener.apply(void 0, [].concat(args));
20473
+ if (options == null ? void 0 : options.once) {
20474
+ _this1.off(eventName, listener);
20475
+ }
20476
+ });
20477
+ };
20478
+ /**
20479
+ * 获取事件名称对应的所有监听器
20480
+ * @param eventName - 事件名称
20481
+ * @returns - 返回事件名称对应的所有监听器
20482
+ */ this.getListeners = function(eventName) {
20483
+ var _this_listeners_eventName;
20484
+ return ((_this_listeners_eventName = _this.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.map(function(param) {
20485
+ var listener = param.listener;
20486
+ return listener;
20487
+ })) || [];
20488
+ };
20489
+ };
20490
+
20495
20491
  exports.VFXItem = /*#__PURE__*/ function(EffectsObject) {
20496
20492
  _inherits(VFXItem, EffectsObject);
20497
20493
  function VFXItem(engine, props) {
@@ -20526,6 +20522,7 @@ exports.VFXItem = /*#__PURE__*/ function(EffectsObject) {
20526
20522
  * 元素动画的速度
20527
20523
  */ _this.speed = 1;
20528
20524
  _this.listIndex = 0;
20525
+ _this.eventProcessor = new EventEmitter();
20529
20526
  _this.name = "VFXItem";
20530
20527
  _this.transform.name = _this.name;
20531
20528
  _this.transform.engine = engine;
@@ -20536,6 +20533,50 @@ exports.VFXItem = /*#__PURE__*/ function(EffectsObject) {
20536
20533
  }
20537
20534
  var _proto = VFXItem.prototype;
20538
20535
  /**
20536
+ * 元素监听事件
20537
+ * @param eventName - 事件名称
20538
+ * @param listener - 事件监听器
20539
+ * @param options - 事件监听器选项
20540
+ * @returns
20541
+ */ _proto.on = function on(eventName, listener, options) {
20542
+ this.eventProcessor.on(eventName, listener, options);
20543
+ };
20544
+ /**
20545
+ * 移除事件监听器
20546
+ * @param eventName - 事件名称
20547
+ * @param listener - 事件监听器
20548
+ * @returns
20549
+ */ _proto.off = function off(eventName, listener) {
20550
+ this.eventProcessor.off(eventName, listener);
20551
+ };
20552
+ /**
20553
+ * 一次性监听事件
20554
+ * @param eventName - 事件名称
20555
+ * @param listener - 事件监听器
20556
+ */ _proto.once = function once(eventName, listener) {
20557
+ this.eventProcessor.once(eventName, listener);
20558
+ };
20559
+ /**
20560
+ * 触发事件
20561
+ * @param eventName - 事件名称
20562
+ * @param args - 事件参数
20563
+ */ _proto.emit = function emit(eventName) {
20564
+ for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
20565
+ args[_key - 1] = arguments[_key];
20566
+ }
20567
+ var _this_eventProcessor;
20568
+ (_this_eventProcessor = this.eventProcessor).emit.apply(_this_eventProcessor, [].concat([
20569
+ eventName
20570
+ ], args));
20571
+ };
20572
+ /**
20573
+ * 获取事件名称对应的所有监听器
20574
+ * @param eventName - 事件名称
20575
+ * @returns - 返回事件名称对应的所有监听器
20576
+ */ _proto.getListeners = function getListeners(eventName) {
20577
+ return this.eventProcessor.getListeners(eventName);
20578
+ };
20579
+ /**
20539
20580
  * 设置元素的动画速度
20540
20581
  * @param speed - 速度
20541
20582
  */ _proto.setSpeed = function setSpeed(speed) {
@@ -20805,10 +20846,24 @@ exports.VFXItem = /*#__PURE__*/ function(EffectsObject) {
20805
20846
  if (duration <= 0) {
20806
20847
  throw new Error("Item duration can't be less than 0, see " + HELP_LINK["Item duration can't be less than 0"] + ".");
20807
20848
  }
20849
+ this.itemBehaviours.length = 0;
20850
+ this.rendererComponents.length = 0;
20808
20851
  for(var _iterator = _create_for_of_iterator_helper_loose(this.components), _step; !(_step = _iterator()).done;){
20809
20852
  var component = _step.value;
20810
20853
  component.item = this;
20811
- component.onAttached();
20854
+ if (_instanceof1(component, Behaviour)) {
20855
+ this.itemBehaviours.push(component);
20856
+ }
20857
+ if (_instanceof1(component, RendererComponent)) {
20858
+ this.rendererComponents.push(component);
20859
+ }
20860
+ // TODO ParticleSystemRenderer 现在是动态生成的,后面需要在 json 中单独表示为一个组件
20861
+ if (_instanceof1(component, exports.ParticleSystem)) {
20862
+ if (!this.components.includes(component.renderer)) {
20863
+ this.components.push(component.renderer);
20864
+ }
20865
+ this.rendererComponents.push(component.renderer);
20866
+ }
20812
20867
  }
20813
20868
  // renderOrder 在 component 初始化后设置。确保能拿到 rendererComponent。
20814
20869
  this.renderOrder = listIndex;
@@ -24446,15 +24501,20 @@ var tmpScale = new Vector3(1, 1, 1);
24446
24501
  return out.multiplyMatrices(this.viewProjectionMatrix, model);
24447
24502
  };
24448
24503
  /**
24449
- * 获取归一化坐标和 3D 世界坐标的换算比例
24504
+ * 获取归一化坐标和 3D 世界坐标的换算比例,使用 ViewProjection 矩阵
24450
24505
  * @param z - 当前的位置 z
24451
24506
  */ _proto.getInverseVPRatio = function getInverseVPRatio(z) {
24452
24507
  var pos = new Vector3(this.position.x, this.position.y, z);
24453
24508
  var mat = this.getViewProjectionMatrix();
24454
- var inverseVP = this.getInverseViewProjectionMatrix();
24509
+ var inverseMat = this.getInverseViewProjectionMatrix();
24510
+ if (!this.viewportMatrix.isIdentity()) {
24511
+ var viewportMatrix = this.viewportMatrix.clone();
24512
+ inverseMat.premultiply(viewportMatrix);
24513
+ mat.multiply(viewportMatrix.invert());
24514
+ }
24455
24515
  var _mat_projectPoint = mat.projectPoint(pos), nz = _mat_projectPoint.z;
24456
- var _inverseVP_projectPoint = inverseVP.projectPoint(new Vector3(1, 1, nz)), xMax = _inverseVP_projectPoint.x, yMax = _inverseVP_projectPoint.y;
24457
- var _inverseVP_projectPoint1 = inverseVP.projectPoint(new Vector3(-1, -1, nz)), xMin = _inverseVP_projectPoint1.x, yMin = _inverseVP_projectPoint1.y;
24516
+ var _inverseMat_projectPoint = inverseMat.projectPoint(new Vector3(1, 1, nz)), xMax = _inverseMat_projectPoint.x, yMax = _inverseMat_projectPoint.y;
24517
+ var _inverseMat_projectPoint1 = inverseMat.projectPoint(new Vector3(-1, -1, nz)), xMin = _inverseMat_projectPoint1.x, yMin = _inverseMat_projectPoint1.y;
24458
24518
  return new Vector3((xMax - xMin) / 2, (yMax - yMin) / 2, 0);
24459
24519
  };
24460
24520
  /**
@@ -24881,6 +24941,7 @@ var listOrder = 0;
24881
24941
  _this.rendererOptions = null;
24882
24942
  _this.rootComposition.createContent();
24883
24943
  _this.buildItemTree(_this.rootItem);
24944
+ _this.callAwake(_this.rootItem);
24884
24945
  _this.rootItem.onEnd = function() {
24885
24946
  window.setTimeout(function() {
24886
24947
  _this.emit("end", {
@@ -25125,6 +25186,19 @@ var listOrder = 0;
25125
25186
  }
25126
25187
  return t;
25127
25188
  };
25189
+ _proto.callAwake = function callAwake(item) {
25190
+ for(var _iterator = _create_for_of_iterator_helper_loose(item.itemBehaviours), _step; !(_step = _iterator()).done;){
25191
+ var itemBehaviour = _step.value;
25192
+ if (!itemBehaviour.isAwakeCalled) {
25193
+ itemBehaviour.awake();
25194
+ itemBehaviour.isAwakeCalled = true;
25195
+ }
25196
+ }
25197
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(item.children), _step1; !(_step1 = _iterator1()).done;){
25198
+ var child = _step1.value;
25199
+ this.callAwake(child);
25200
+ }
25201
+ };
25128
25202
  _proto.callStart = function callStart(item) {
25129
25203
  for(var _iterator = _create_for_of_iterator_helper_loose(item.itemBehaviours), _step; !(_step = _iterator()).done;){
25130
25204
  var itemBehaviour = _step.value;
@@ -27612,7 +27686,7 @@ registerPlugin("sprite", SpriteLoader, exports.VFXItem, true);
27612
27686
  registerPlugin("particle", ParticleLoader, exports.VFXItem, true);
27613
27687
  registerPlugin("cal", CalculateLoader, exports.VFXItem, true);
27614
27688
  registerPlugin("interact", InteractLoader, exports.VFXItem, true);
27615
- var version = "2.0.0-beta.0";
27689
+ var version = "2.0.0-beta.2";
27616
27690
  logger.info("Core version: " + version + ".");
27617
27691
 
27618
27692
  exports.AbstractPlugin = AbstractPlugin;