@eva/plugin-evax 2.0.1-beta.3 → 2.0.1-beta.30
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/EVA.plugin.EVAX.js +0 -1
- package/dist/plugin-evax.cjs.js +102 -0
- package/dist/plugin-evax.d.ts +101 -0
- package/dist/plugin-evax.esm.js +102 -0
- package/package.json +2 -2
package/dist/EVA.plugin.EVAX.js
CHANGED
package/dist/plugin-evax.cjs.js
CHANGED
|
@@ -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({
|
package/dist/plugin-evax.d.ts
CHANGED
|
@@ -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;
|
package/dist/plugin-evax.esm.js
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "2.0.1-beta.30",
|
|
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.
|
|
21
|
+
"@eva/eva.js": "2.0.1-beta.30",
|
|
22
22
|
"eventemitter3": "^3.1.2",
|
|
23
23
|
"lodash-es": "^4.17.21"
|
|
24
24
|
}
|