@eva/plugin-evax 2.0.1-beta.27 → 2.0.1-beta.28

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.
@@ -2,7 +2,6 @@ globalThis.EVA = globalThis.EVA || {};
2
2
  globalThis.EVA.plugin = globalThis.EVA.plugin || {};
3
3
  var _EVA_IIFE_EVAX = function (exports, eva_js) {
4
4
  'use strict';
5
-
6
5
  class EvaXComponent extends eva_js.Component {
7
6
  constructor(gameObject) {
8
7
  super(gameObject);
@@ -13,16 +13,62 @@ var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
13
13
  var cloneDeep__default = /*#__PURE__*/_interopDefaultLegacy(cloneDeep);
14
14
  var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
15
15
 
16
+ /**
17
+ * EvaX 状态管理组件
18
+ *
19
+ * EvaXComponent 为游戏对象提供响应式状态管理能力,类似于前端框架的状态订阅机制。
20
+ * 通过监听全局 store 的变化,自动触发组件的回调函数,实现数据驱动的游戏逻辑。
21
+ *
22
+ * 主要功能:
23
+ * - 订阅全局 store 的属性变化
24
+ * - 支持深度监听(deep watch)
25
+ * - 自动绑定和解绑事件监听
26
+ * - 提供响应式数据更新机制
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const player = new GameObject('player');
31
+ * player.addComponent(new EvaXComponent({
32
+ * events: {
33
+ * 'store.playerHealth': function(newStore, oldStore) {
34
+ * // 当 playerHealth 改变时触发
35
+ * console.log('血量变化:', oldStore.playerHealth, '->', newStore.playerHealth);
36
+ * },
37
+ * 'store.position': {
38
+ * deep: true, // 深度监听
39
+ * handler: function(newStore, oldStore) {
40
+ * this.gameObject.transform.position = newStore.position;
41
+ * }
42
+ * }
43
+ * }
44
+ * }));
45
+ * ```
46
+ */
16
47
  class EvaXComponent extends eva_js.Component {
48
+ /**
49
+ * 构造 EvaX 组件
50
+ * @param gameObject - 所属的游戏对象
51
+ */
17
52
  constructor(gameObject) {
18
53
  super(gameObject);
54
+ /** 事件监听配置对象,key 为 store 路径,value 为回调函数 */
55
+ // @decorators.IDEProp 复杂编辑后续添加
19
56
  this.events = {};
20
57
  }
58
+ /**
59
+ * 初始化组件
60
+ *
61
+ * 配置组件需要监听的 store 属性和对应的回调函数。
62
+ *
63
+ * @param option - 初始化配置
64
+ * @param option.events - 事件监听配置对象
65
+ */
21
66
  init(option = { events: {} }) {
22
67
  const { events } = option;
23
68
  this.events = events || {};
24
69
  }
25
70
  }
71
+ /** 组件名称 */
26
72
  EvaXComponent.componentName = 'EvaX';
27
73
 
28
74
  /*! *****************************************************************************
@@ -109,11 +155,63 @@ function updateStore(store, newStore, force) {
109
155
  }
110
156
  }
111
157
 
158
+ /**
159
+ * EvaX 状态管理系统
160
+ *
161
+ * EvaXSystem 提供全局状态管理和响应式数据绑定功能,类似于 Vuex 或 Redux。
162
+ * 它维护一个全局 store,并在 store 属性变化时通知订阅的组件。
163
+ * 通过 Object.defineProperty 实现数据劫持,自动追踪依赖和触发更新。
164
+ *
165
+ * 核心特性:
166
+ * - 全局状态 store 管理
167
+ * - 响应式数据绑定(基于 Object.defineProperty)
168
+ * - 支持深度监听对象嵌套属性
169
+ * - 事件驱动的更新机制
170
+ * - 批量更新优化(在 lateUpdate 中统一触发)
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * // 初始化系统并设置初始 store
175
+ * const evaxSystem = new EvaXSystem();
176
+ * game.addSystem(evaxSystem);
177
+ * evaxSystem.init({
178
+ * store: {
179
+ * playerHealth: 100,
180
+ * score: 0,
181
+ * position: { x: 0, y: 0 }
182
+ * }
183
+ * });
184
+ *
185
+ * // 在游戏逻辑中更新 store
186
+ * evaxSystem.store.playerHealth -= 10; // 自动触发订阅者
187
+ *
188
+ * // 手动更新 store(会合并数据)
189
+ * evaxSystem.updateStore({ score: 100 });
190
+ *
191
+ * // 强制更新 store(会完全替换)
192
+ * evaxSystem.forceUpdateStore({ playerHealth: 100 });
193
+ *
194
+ * // 通过事件总线通信
195
+ * evaxSystem.on('gameOver', () => {
196
+ * console.log('游戏结束');
197
+ * });
198
+ * evaxSystem.emit('gameOver');
199
+ * ```
200
+ */
112
201
  let EvaXSystem = class EvaXSystem extends eva_js.System {
113
202
  constructor() {
114
203
  super(...arguments);
204
+ /** 当前帧的 store 变化列表,在 lateUpdate 中批量处理 */
115
205
  this.changeList = [];
116
206
  }
207
+ /**
208
+ * 初始化系统
209
+ *
210
+ * 设置全局 store 并绑定默认的事件监听器。
211
+ *
212
+ * @param params - 初始化参数
213
+ * @param params.store - 初始的全局状态对象
214
+ */
117
215
  init({ store = {} } = { store: {} }) {
118
216
  this.ee = new EventEmitter__default();
119
217
  this.store = store;
@@ -153,6 +251,9 @@ let EvaXSystem = class EvaXSystem extends eva_js.System {
153
251
  case eva_js.OBSERVER_TYPE.ADD:
154
252
  this.add(changed);
155
253
  break;
254
+ // case OBSERVER_TYPE.CHANGE:
255
+ // this.change(changed)
256
+ // break;
156
257
  case eva_js.OBSERVER_TYPE.REMOVE:
157
258
  this.remove(changed);
158
259
  break;
@@ -201,6 +302,7 @@ let EvaXSystem = class EvaXSystem extends eva_js.System {
201
302
  }
202
303
  onDestroy() { }
203
304
  };
305
+ /** 系统名称 */
204
306
  EvaXSystem.systemName = 'EvaX';
205
307
  EvaXSystem = __decorate([
206
308
  eva_js.decorators.componentObserver({
@@ -9,11 +9,57 @@ declare const _default: {
9
9
  };
10
10
  export default _default;
11
11
 
12
+ /**
13
+ * EvaX 状态管理组件
14
+ *
15
+ * EvaXComponent 为游戏对象提供响应式状态管理能力,类似于前端框架的状态订阅机制。
16
+ * 通过监听全局 store 的变化,自动触发组件的回调函数,实现数据驱动的游戏逻辑。
17
+ *
18
+ * 主要功能:
19
+ * - 订阅全局 store 的属性变化
20
+ * - 支持深度监听(deep watch)
21
+ * - 自动绑定和解绑事件监听
22
+ * - 提供响应式数据更新机制
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const player = new GameObject('player');
27
+ * player.addComponent(new EvaXComponent({
28
+ * events: {
29
+ * 'store.playerHealth': function(newStore, oldStore) {
30
+ * // 当 playerHealth 改变时触发
31
+ * console.log('血量变化:', oldStore.playerHealth, '->', newStore.playerHealth);
32
+ * },
33
+ * 'store.position': {
34
+ * deep: true, // 深度监听
35
+ * handler: function(newStore, oldStore) {
36
+ * this.gameObject.transform.position = newStore.position;
37
+ * }
38
+ * }
39
+ * }
40
+ * }));
41
+ * ```
42
+ */
12
43
  export declare class EvaX extends Component<EvaXParams> {
44
+ /** 组件名称 */
13
45
  static componentName: string;
46
+ /**
47
+ * 构造 EvaX 组件
48
+ * @param gameObject - 所属的游戏对象
49
+ */
14
50
  constructor(gameObject: any);
51
+ /** EvaX 系统实例的引用 */
15
52
  evax: EvaXSystem;
53
+ /** 事件监听配置对象,key 为 store 路径,value 为回调函数 */
16
54
  events: Events;
55
+ /**
56
+ * 初始化组件
57
+ *
58
+ * 配置组件需要监听的 store 属性和对应的回调函数。
59
+ *
60
+ * @param option - 初始化配置
61
+ * @param option.events - 事件监听配置对象
62
+ */
17
63
  init(option?: EvaXParams): void;
18
64
  }
19
65
 
@@ -21,14 +67,69 @@ declare interface EvaXParams {
21
67
  events: Events;
22
68
  }
23
69
 
70
+ /**
71
+ * EvaX 状态管理系统
72
+ *
73
+ * EvaXSystem 提供全局状态管理和响应式数据绑定功能,类似于 Vuex 或 Redux。
74
+ * 它维护一个全局 store,并在 store 属性变化时通知订阅的组件。
75
+ * 通过 Object.defineProperty 实现数据劫持,自动追踪依赖和触发更新。
76
+ *
77
+ * 核心特性:
78
+ * - 全局状态 store 管理
79
+ * - 响应式数据绑定(基于 Object.defineProperty)
80
+ * - 支持深度监听对象嵌套属性
81
+ * - 事件驱动的更新机制
82
+ * - 批量更新优化(在 lateUpdate 中统一触发)
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * // 初始化系统并设置初始 store
87
+ * const evaxSystem = new EvaXSystem();
88
+ * game.addSystem(evaxSystem);
89
+ * evaxSystem.init({
90
+ * store: {
91
+ * playerHealth: 100,
92
+ * score: 0,
93
+ * position: { x: 0, y: 0 }
94
+ * }
95
+ * });
96
+ *
97
+ * // 在游戏逻辑中更新 store
98
+ * evaxSystem.store.playerHealth -= 10; // 自动触发订阅者
99
+ *
100
+ * // 手动更新 store(会合并数据)
101
+ * evaxSystem.updateStore({ score: 100 });
102
+ *
103
+ * // 强制更新 store(会完全替换)
104
+ * evaxSystem.forceUpdateStore({ playerHealth: 100 });
105
+ *
106
+ * // 通过事件总线通信
107
+ * evaxSystem.on('gameOver', () => {
108
+ * console.log('游戏结束');
109
+ * });
110
+ * evaxSystem.emit('gameOver');
111
+ * ```
112
+ */
24
113
  export declare class EvaXSystem extends System<EvaXSystemParams> {
114
+ /** 系统名称 */
25
115
  static systemName: string;
116
+ /** 全局状态 store 对象 */
26
117
  store: any;
118
+ /** 内部事件发射器,用于事件通信 */
27
119
  private ee;
120
+ /** 当前帧的 store 变化列表,在 lateUpdate 中批量处理 */
28
121
  changeList: {
29
122
  key: string;
30
123
  oldStore: any;
31
124
  }[];
125
+ /**
126
+ * 初始化系统
127
+ *
128
+ * 设置全局 store 并绑定默认的事件监听器。
129
+ *
130
+ * @param params - 初始化参数
131
+ * @param params.store - 初始的全局状态对象
132
+ */
32
133
  init({ store }?: {
33
134
  store?: {};
34
135
  }): void;
@@ -3,16 +3,62 @@ import EventEmitter from 'eventemitter3';
3
3
  import cloneDeep from 'lodash-es/cloneDeep';
4
4
  import isObject from 'lodash-es/isObject';
5
5
 
6
+ /**
7
+ * EvaX 状态管理组件
8
+ *
9
+ * EvaXComponent 为游戏对象提供响应式状态管理能力,类似于前端框架的状态订阅机制。
10
+ * 通过监听全局 store 的变化,自动触发组件的回调函数,实现数据驱动的游戏逻辑。
11
+ *
12
+ * 主要功能:
13
+ * - 订阅全局 store 的属性变化
14
+ * - 支持深度监听(deep watch)
15
+ * - 自动绑定和解绑事件监听
16
+ * - 提供响应式数据更新机制
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const player = new GameObject('player');
21
+ * player.addComponent(new EvaXComponent({
22
+ * events: {
23
+ * 'store.playerHealth': function(newStore, oldStore) {
24
+ * // 当 playerHealth 改变时触发
25
+ * console.log('血量变化:', oldStore.playerHealth, '->', newStore.playerHealth);
26
+ * },
27
+ * 'store.position': {
28
+ * deep: true, // 深度监听
29
+ * handler: function(newStore, oldStore) {
30
+ * this.gameObject.transform.position = newStore.position;
31
+ * }
32
+ * }
33
+ * }
34
+ * }));
35
+ * ```
36
+ */
6
37
  class EvaXComponent extends Component {
38
+ /**
39
+ * 构造 EvaX 组件
40
+ * @param gameObject - 所属的游戏对象
41
+ */
7
42
  constructor(gameObject) {
8
43
  super(gameObject);
44
+ /** 事件监听配置对象,key 为 store 路径,value 为回调函数 */
45
+ // @decorators.IDEProp 复杂编辑后续添加
9
46
  this.events = {};
10
47
  }
48
+ /**
49
+ * 初始化组件
50
+ *
51
+ * 配置组件需要监听的 store 属性和对应的回调函数。
52
+ *
53
+ * @param option - 初始化配置
54
+ * @param option.events - 事件监听配置对象
55
+ */
11
56
  init(option = { events: {} }) {
12
57
  const { events } = option;
13
58
  this.events = events || {};
14
59
  }
15
60
  }
61
+ /** 组件名称 */
16
62
  EvaXComponent.componentName = 'EvaX';
17
63
 
18
64
  /*! *****************************************************************************
@@ -99,11 +145,63 @@ function updateStore(store, newStore, force) {
99
145
  }
100
146
  }
101
147
 
148
+ /**
149
+ * EvaX 状态管理系统
150
+ *
151
+ * EvaXSystem 提供全局状态管理和响应式数据绑定功能,类似于 Vuex 或 Redux。
152
+ * 它维护一个全局 store,并在 store 属性变化时通知订阅的组件。
153
+ * 通过 Object.defineProperty 实现数据劫持,自动追踪依赖和触发更新。
154
+ *
155
+ * 核心特性:
156
+ * - 全局状态 store 管理
157
+ * - 响应式数据绑定(基于 Object.defineProperty)
158
+ * - 支持深度监听对象嵌套属性
159
+ * - 事件驱动的更新机制
160
+ * - 批量更新优化(在 lateUpdate 中统一触发)
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * // 初始化系统并设置初始 store
165
+ * const evaxSystem = new EvaXSystem();
166
+ * game.addSystem(evaxSystem);
167
+ * evaxSystem.init({
168
+ * store: {
169
+ * playerHealth: 100,
170
+ * score: 0,
171
+ * position: { x: 0, y: 0 }
172
+ * }
173
+ * });
174
+ *
175
+ * // 在游戏逻辑中更新 store
176
+ * evaxSystem.store.playerHealth -= 10; // 自动触发订阅者
177
+ *
178
+ * // 手动更新 store(会合并数据)
179
+ * evaxSystem.updateStore({ score: 100 });
180
+ *
181
+ * // 强制更新 store(会完全替换)
182
+ * evaxSystem.forceUpdateStore({ playerHealth: 100 });
183
+ *
184
+ * // 通过事件总线通信
185
+ * evaxSystem.on('gameOver', () => {
186
+ * console.log('游戏结束');
187
+ * });
188
+ * evaxSystem.emit('gameOver');
189
+ * ```
190
+ */
102
191
  let EvaXSystem = class EvaXSystem extends System {
103
192
  constructor() {
104
193
  super(...arguments);
194
+ /** 当前帧的 store 变化列表,在 lateUpdate 中批量处理 */
105
195
  this.changeList = [];
106
196
  }
197
+ /**
198
+ * 初始化系统
199
+ *
200
+ * 设置全局 store 并绑定默认的事件监听器。
201
+ *
202
+ * @param params - 初始化参数
203
+ * @param params.store - 初始的全局状态对象
204
+ */
107
205
  init({ store = {} } = { store: {} }) {
108
206
  this.ee = new EventEmitter();
109
207
  this.store = store;
@@ -143,6 +241,9 @@ let EvaXSystem = class EvaXSystem extends System {
143
241
  case OBSERVER_TYPE.ADD:
144
242
  this.add(changed);
145
243
  break;
244
+ // case OBSERVER_TYPE.CHANGE:
245
+ // this.change(changed)
246
+ // break;
146
247
  case OBSERVER_TYPE.REMOVE:
147
248
  this.remove(changed);
148
249
  break;
@@ -191,6 +292,7 @@ let EvaXSystem = class EvaXSystem extends System {
191
292
  }
192
293
  onDestroy() { }
193
294
  };
295
+ /** 系统名称 */
194
296
  EvaXSystem.systemName = 'EvaX';
195
297
  EvaXSystem = __decorate([
196
298
  decorators.componentObserver({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eva/plugin-evax",
3
- "version": "2.0.1-beta.27",
3
+ "version": "2.0.1-beta.28",
4
4
  "description": "@eva/plugin-evax",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-evax.esm.js",
@@ -18,7 +18,7 @@
18
18
  "license": "MIT",
19
19
  "homepage": "https://eva.js.org",
20
20
  "dependencies": {
21
- "@eva/eva.js": "2.0.1-beta.27",
21
+ "@eva/eva.js": "2.0.1-beta.28",
22
22
  "eventemitter3": "^3.1.2",
23
23
  "lodash-es": "^4.17.21"
24
24
  }