steamsheep-ts-game-engine 2.0.0 → 3.0.0

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.
@@ -1,12 +1,37 @@
1
- export { a as GameStore, G as GameStoreActions, c as createGameEngineStore } from '../store-xBiJ2MvB.mjs';
2
- import { G as GameState } from '../types-BLjkeE3R.mjs';
1
+ export { G as GameStore, a as GameStoreActions, c as createGameEngineStore } from '../store-B7yMYHpB.mjs';
2
+ import { a as GameState } from '../types-C3Q7UPWy.mjs';
3
3
  import 'zustand/middleware';
4
4
  import 'zustand';
5
5
 
6
+ /**
7
+ * 快照信息接口
8
+ *
9
+ * 包含快照的元数据和实际状态数据
10
+ */
11
+ interface SnapshotInfo<S extends string, I extends string, F extends string, X = Record<string, unknown>> {
12
+ /** 快照的唯一标识符(自动生成的时间戳) */
13
+ id: string;
14
+ /** 快照名称(可选,用于命名快照) */
15
+ name?: string;
16
+ /** 快照创建时间 */
17
+ timestamp: number;
18
+ /** 快照描述(可选) */
19
+ description?: string;
20
+ /** 实际的游戏状态数据 */
21
+ state: GameState<S, I, F, X>;
22
+ }
6
23
  /**
7
24
  * 历史管理器 - 管理游戏状态的历史快照
8
25
  *
9
- * 提供撤销/重做功能,通过保存游戏状态的快照来实现时间旅行
26
+ * ⚠️ 增强功能:支持命名快照和多级撤销
27
+ *
28
+ * 提供撤销/重做功能,通过保存游戏状态的快照来实现时间旅行。
29
+ *
30
+ * 功能特性:
31
+ * - 多级撤销:支持撤销多个步骤
32
+ * - 命名快照:可以保存和恢复命名的快照
33
+ * - 快照列表:查看所有保存的快照
34
+ * - 自动管理:超过限制时自动清理旧快照
10
35
  *
11
36
  * @template S - 属性名称的字符串字面量类型
12
37
  * @template I - 物品名称的字符串字面量类型
@@ -16,14 +41,29 @@ import 'zustand';
16
41
  * @example
17
42
  * ```typescript
18
43
  * const history = new HistoryManager<'health' | 'mana', 'sword', 'hasKey'>(20);
44
+ *
45
+ * // 保存匿名快照
19
46
  * history.push(currentState);
20
- * const previousState = history.pop(); // 撤销到上一个状态
47
+ *
48
+ * // 保存命名快照
49
+ * history.pushNamed(currentState, 'before_boss_fight', '挑战Boss前');
50
+ *
51
+ * // 撤销到上一个状态
52
+ * const previousState = history.pop();
53
+ *
54
+ * // 恢复到命名快照
55
+ * const savedState = history.restoreNamed('before_boss_fight');
56
+ *
57
+ * // 查看所有快照
58
+ * const snapshots = history.listSnapshots();
21
59
  * ```
22
60
  */
23
61
  declare class HistoryManager<S extends string, I extends string, F extends string, X = Record<string, unknown>> {
24
- /** 存储的状态快照数组 */
62
+ /** 存储的状态快照数组(按时间顺序) */
25
63
  private snapshots;
26
- /** 最大快照数量限制 */
64
+ /** 命名快照映射表(name -> snapshot) */
65
+ private namedSnapshots;
66
+ /** 最大快照数量限制(不包括命名快照) */
27
67
  private maxSnapshots;
28
68
  /**
29
69
  * 创建历史管理器实例
@@ -31,24 +71,54 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
31
71
  */
32
72
  constructor(maxSnapshots?: 20);
33
73
  /**
34
- * 保存当前状态快照
74
+ * 保存当前状态快照(匿名快照)
35
75
  *
36
- * 通过深拷贝保存状态,防止后续修改影响历史记录
37
- * 当快照数量超过最大限制时,自动移除最旧的快照
76
+ * 通过深拷贝保存状态,防止后续修改影响历史记录。
77
+ * 当快照数量超过最大限制时,自动移除最旧的快照。
78
+ *
79
+ * 匿名快照用于常规的撤销操作,会受到数量限制。
38
80
  *
39
81
  * @param state - 要保存的游戏状态
82
+ * @param description - 快照描述(可选)
40
83
  *
41
84
  * @example
42
85
  * ```typescript
43
86
  * history.push(gameState);
87
+ * history.push(gameState, '攻击哥布林前');
88
+ * ```
89
+ */
90
+ push(state: GameState<S, I, F, X>, description?: string): void;
91
+ /**
92
+ * 保存命名快照
93
+ *
94
+ * ⚠️ 新功能:保存可以通过名称访问的快照
95
+ *
96
+ * 命名快照不受数量限制,不会被自动清理。
97
+ * 适用于重要的游戏节点,如Boss战前、章节开始等。
98
+ *
99
+ * 如果已存在同名快照,会被覆盖。
100
+ *
101
+ * @param state - 要保存的游戏状态
102
+ * @param name - 快照名称(唯一标识符)
103
+ * @param description - 快照描述(可选)
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * // 保存Boss战前的状态
108
+ * history.pushNamed(gameState, 'before_boss_fight', '挑战最终Boss前');
109
+ *
110
+ * // 保存章节开始的状态
111
+ * history.pushNamed(gameState, 'chapter_2_start', '第二章开始');
44
112
  * ```
45
113
  */
46
- push(state: GameState<S, I, F, X>): void;
114
+ pushNamed(state: GameState<S, I, F, X>, name: string, description?: string): void;
47
115
  /**
48
116
  * 回退到上一个状态(撤销操作)
49
117
  *
50
- * 移除并返回最近的一个快照
51
- * 如果没有可用的快照,返回 undefined
118
+ * 移除并返回最近的一个匿名快照。
119
+ * 如果没有可用的快照,返回 undefined
120
+ *
121
+ * 注意:此操作不会影响命名快照。
52
122
  *
53
123
  * @returns 上一个状态快照,如果历史为空则返回 undefined
54
124
  *
@@ -62,11 +132,96 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
62
132
  * ```
63
133
  */
64
134
  pop(): GameState<S, I, F, X> | undefined;
135
+ /**
136
+ * 恢复到命名快照
137
+ *
138
+ * ⚠️ 新功能:通过名称恢复到指定的快照
139
+ *
140
+ * 返回指定名称的快照状态,但不从历史记录中删除它。
141
+ * 这允许多次恢复到同一个命名快照。
142
+ *
143
+ * @param name - 快照名称
144
+ * @returns 指定名称的状态快照,如果不存在则返回 undefined
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * // 恢复到Boss战前
149
+ * const savedState = history.restoreNamed('before_boss_fight');
150
+ * if (savedState) {
151
+ * restoreState(savedState);
152
+ * } else {
153
+ * console.log('快照不存在');
154
+ * }
155
+ * ```
156
+ */
157
+ restoreNamed(name: string): GameState<S, I, F, X> | undefined;
158
+ /**
159
+ * 删除命名快照
160
+ *
161
+ * 从历史记录中删除指定名称的快照。
162
+ *
163
+ * @param name - 要删除的快照名称
164
+ * @returns 是否成功删除
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * history.deleteNamed('before_boss_fight');
169
+ * ```
170
+ */
171
+ deleteNamed(name: string): boolean;
172
+ /**
173
+ * 检查命名快照是否存在
174
+ *
175
+ * @param name - 快照名称
176
+ * @returns 是否存在指定名称的快照
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * if (history.hasNamed('before_boss_fight')) {
181
+ * console.log('可以恢复到Boss战前');
182
+ * }
183
+ * ```
184
+ */
185
+ hasNamed(name: string): boolean;
186
+ /**
187
+ * 列出所有快照
188
+ *
189
+ * ⚠️ 新功能:获取所有快照的信息列表
190
+ *
191
+ * 返回所有快照(包括匿名和命名快照)的元数据。
192
+ * 不包含实际的状态数据,只包含快照信息。
193
+ *
194
+ * @returns 快照信息数组,按时间倒序排列(最新的在前)
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const snapshots = history.listSnapshots();
199
+ * snapshots.forEach(snap => {
200
+ * console.log(`${snap.name || '匿名'}: ${snap.description || '无描述'}`);
201
+ * console.log(` 时间: ${new Date(snap.timestamp).toLocaleString()}`);
202
+ * });
203
+ * ```
204
+ */
205
+ listSnapshots(): Array<Omit<SnapshotInfo<S, I, F, X>, 'state'>>;
206
+ /**
207
+ * 列出所有命名快照
208
+ *
209
+ * 只返回命名快照的信息列表。
210
+ *
211
+ * @returns 命名快照信息数组
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const namedSnaps = history.listNamedSnapshots();
216
+ * console.log(`共有 ${namedSnaps.length} 个命名快照`);
217
+ * ```
218
+ */
219
+ listNamedSnapshots(): Array<Omit<SnapshotInfo<S, I, F, X>, 'state'>>;
65
220
  /**
66
221
  * 查看最近的快照但不移除
67
222
  *
68
- * 返回最新的快照但不从历史记录中删除它
69
- * 用于预览上一个状态而不实际执行撤销操作
223
+ * 返回最新的匿名快照但不从历史记录中删除它。
224
+ * 用于预览上一个状态而不实际执行撤销操作。
70
225
  *
71
226
  * @returns 最近的状态快照,如果历史为空则返回 undefined
72
227
  *
@@ -82,19 +237,25 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
82
237
  /**
83
238
  * 清空所有历史记录
84
239
  *
85
- * 移除所有保存的快照,释放内存
86
- * 通常在开始新游戏或重置时使用
240
+ * 移除所有保存的快照(包括匿名和命名快照),释放内存。
241
+ * 通常在开始新游戏或重置时使用。
242
+ *
243
+ * @param includeNamed - 是否同时清空命名快照(默认为 false)
87
244
  *
88
245
  * @example
89
246
  * ```typescript
90
- * history.clear(); // 清空所有历史
247
+ * // 只清空匿名快照
248
+ * history.clear();
249
+ *
250
+ * // 清空所有快照(包括命名快照)
251
+ * history.clear(true);
91
252
  * ```
92
253
  */
93
- clear(): void;
254
+ clear(includeNamed?: boolean): void;
94
255
  /**
95
- * 获取当前历史记录数量
256
+ * 获取当前匿名快照数量
96
257
  *
97
- * @returns 当前保存的快照数量
258
+ * @returns 当前保存的匿名快照数量
98
259
  *
99
260
  * @example
100
261
  * ```typescript
@@ -105,6 +266,28 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
105
266
  * ```
106
267
  */
107
268
  get size(): number;
269
+ /**
270
+ * 获取命名快照数量
271
+ *
272
+ * @returns 当前保存的命名快照数量
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * console.log(`命名快照数量: ${history.namedSize}`);
277
+ * ```
278
+ */
279
+ get namedSize(): number;
280
+ /**
281
+ * 获取总快照数量
282
+ *
283
+ * @returns 所有快照的总数量(匿名 + 命名)
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * console.log(`总快照数量: ${history.totalSize}`);
288
+ * ```
289
+ */
290
+ get totalSize(): number;
108
291
  }
109
292
 
110
- export { HistoryManager };
293
+ export { HistoryManager, type SnapshotInfo };
@@ -1,12 +1,37 @@
1
- export { a as GameStore, G as GameStoreActions, c as createGameEngineStore } from '../store-D0SE7zJK.js';
2
- import { G as GameState } from '../types-BLjkeE3R.js';
1
+ export { G as GameStore, a as GameStoreActions, c as createGameEngineStore } from '../store-BKROShPq.js';
2
+ import { a as GameState } from '../types-C3Q7UPWy.js';
3
3
  import 'zustand/middleware';
4
4
  import 'zustand';
5
5
 
6
+ /**
7
+ * 快照信息接口
8
+ *
9
+ * 包含快照的元数据和实际状态数据
10
+ */
11
+ interface SnapshotInfo<S extends string, I extends string, F extends string, X = Record<string, unknown>> {
12
+ /** 快照的唯一标识符(自动生成的时间戳) */
13
+ id: string;
14
+ /** 快照名称(可选,用于命名快照) */
15
+ name?: string;
16
+ /** 快照创建时间 */
17
+ timestamp: number;
18
+ /** 快照描述(可选) */
19
+ description?: string;
20
+ /** 实际的游戏状态数据 */
21
+ state: GameState<S, I, F, X>;
22
+ }
6
23
  /**
7
24
  * 历史管理器 - 管理游戏状态的历史快照
8
25
  *
9
- * 提供撤销/重做功能,通过保存游戏状态的快照来实现时间旅行
26
+ * ⚠️ 增强功能:支持命名快照和多级撤销
27
+ *
28
+ * 提供撤销/重做功能,通过保存游戏状态的快照来实现时间旅行。
29
+ *
30
+ * 功能特性:
31
+ * - 多级撤销:支持撤销多个步骤
32
+ * - 命名快照:可以保存和恢复命名的快照
33
+ * - 快照列表:查看所有保存的快照
34
+ * - 自动管理:超过限制时自动清理旧快照
10
35
  *
11
36
  * @template S - 属性名称的字符串字面量类型
12
37
  * @template I - 物品名称的字符串字面量类型
@@ -16,14 +41,29 @@ import 'zustand';
16
41
  * @example
17
42
  * ```typescript
18
43
  * const history = new HistoryManager<'health' | 'mana', 'sword', 'hasKey'>(20);
44
+ *
45
+ * // 保存匿名快照
19
46
  * history.push(currentState);
20
- * const previousState = history.pop(); // 撤销到上一个状态
47
+ *
48
+ * // 保存命名快照
49
+ * history.pushNamed(currentState, 'before_boss_fight', '挑战Boss前');
50
+ *
51
+ * // 撤销到上一个状态
52
+ * const previousState = history.pop();
53
+ *
54
+ * // 恢复到命名快照
55
+ * const savedState = history.restoreNamed('before_boss_fight');
56
+ *
57
+ * // 查看所有快照
58
+ * const snapshots = history.listSnapshots();
21
59
  * ```
22
60
  */
23
61
  declare class HistoryManager<S extends string, I extends string, F extends string, X = Record<string, unknown>> {
24
- /** 存储的状态快照数组 */
62
+ /** 存储的状态快照数组(按时间顺序) */
25
63
  private snapshots;
26
- /** 最大快照数量限制 */
64
+ /** 命名快照映射表(name -> snapshot) */
65
+ private namedSnapshots;
66
+ /** 最大快照数量限制(不包括命名快照) */
27
67
  private maxSnapshots;
28
68
  /**
29
69
  * 创建历史管理器实例
@@ -31,24 +71,54 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
31
71
  */
32
72
  constructor(maxSnapshots?: 20);
33
73
  /**
34
- * 保存当前状态快照
74
+ * 保存当前状态快照(匿名快照)
35
75
  *
36
- * 通过深拷贝保存状态,防止后续修改影响历史记录
37
- * 当快照数量超过最大限制时,自动移除最旧的快照
76
+ * 通过深拷贝保存状态,防止后续修改影响历史记录。
77
+ * 当快照数量超过最大限制时,自动移除最旧的快照。
78
+ *
79
+ * 匿名快照用于常规的撤销操作,会受到数量限制。
38
80
  *
39
81
  * @param state - 要保存的游戏状态
82
+ * @param description - 快照描述(可选)
40
83
  *
41
84
  * @example
42
85
  * ```typescript
43
86
  * history.push(gameState);
87
+ * history.push(gameState, '攻击哥布林前');
88
+ * ```
89
+ */
90
+ push(state: GameState<S, I, F, X>, description?: string): void;
91
+ /**
92
+ * 保存命名快照
93
+ *
94
+ * ⚠️ 新功能:保存可以通过名称访问的快照
95
+ *
96
+ * 命名快照不受数量限制,不会被自动清理。
97
+ * 适用于重要的游戏节点,如Boss战前、章节开始等。
98
+ *
99
+ * 如果已存在同名快照,会被覆盖。
100
+ *
101
+ * @param state - 要保存的游戏状态
102
+ * @param name - 快照名称(唯一标识符)
103
+ * @param description - 快照描述(可选)
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * // 保存Boss战前的状态
108
+ * history.pushNamed(gameState, 'before_boss_fight', '挑战最终Boss前');
109
+ *
110
+ * // 保存章节开始的状态
111
+ * history.pushNamed(gameState, 'chapter_2_start', '第二章开始');
44
112
  * ```
45
113
  */
46
- push(state: GameState<S, I, F, X>): void;
114
+ pushNamed(state: GameState<S, I, F, X>, name: string, description?: string): void;
47
115
  /**
48
116
  * 回退到上一个状态(撤销操作)
49
117
  *
50
- * 移除并返回最近的一个快照
51
- * 如果没有可用的快照,返回 undefined
118
+ * 移除并返回最近的一个匿名快照。
119
+ * 如果没有可用的快照,返回 undefined
120
+ *
121
+ * 注意:此操作不会影响命名快照。
52
122
  *
53
123
  * @returns 上一个状态快照,如果历史为空则返回 undefined
54
124
  *
@@ -62,11 +132,96 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
62
132
  * ```
63
133
  */
64
134
  pop(): GameState<S, I, F, X> | undefined;
135
+ /**
136
+ * 恢复到命名快照
137
+ *
138
+ * ⚠️ 新功能:通过名称恢复到指定的快照
139
+ *
140
+ * 返回指定名称的快照状态,但不从历史记录中删除它。
141
+ * 这允许多次恢复到同一个命名快照。
142
+ *
143
+ * @param name - 快照名称
144
+ * @returns 指定名称的状态快照,如果不存在则返回 undefined
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * // 恢复到Boss战前
149
+ * const savedState = history.restoreNamed('before_boss_fight');
150
+ * if (savedState) {
151
+ * restoreState(savedState);
152
+ * } else {
153
+ * console.log('快照不存在');
154
+ * }
155
+ * ```
156
+ */
157
+ restoreNamed(name: string): GameState<S, I, F, X> | undefined;
158
+ /**
159
+ * 删除命名快照
160
+ *
161
+ * 从历史记录中删除指定名称的快照。
162
+ *
163
+ * @param name - 要删除的快照名称
164
+ * @returns 是否成功删除
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * history.deleteNamed('before_boss_fight');
169
+ * ```
170
+ */
171
+ deleteNamed(name: string): boolean;
172
+ /**
173
+ * 检查命名快照是否存在
174
+ *
175
+ * @param name - 快照名称
176
+ * @returns 是否存在指定名称的快照
177
+ *
178
+ * @example
179
+ * ```typescript
180
+ * if (history.hasNamed('before_boss_fight')) {
181
+ * console.log('可以恢复到Boss战前');
182
+ * }
183
+ * ```
184
+ */
185
+ hasNamed(name: string): boolean;
186
+ /**
187
+ * 列出所有快照
188
+ *
189
+ * ⚠️ 新功能:获取所有快照的信息列表
190
+ *
191
+ * 返回所有快照(包括匿名和命名快照)的元数据。
192
+ * 不包含实际的状态数据,只包含快照信息。
193
+ *
194
+ * @returns 快照信息数组,按时间倒序排列(最新的在前)
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const snapshots = history.listSnapshots();
199
+ * snapshots.forEach(snap => {
200
+ * console.log(`${snap.name || '匿名'}: ${snap.description || '无描述'}`);
201
+ * console.log(` 时间: ${new Date(snap.timestamp).toLocaleString()}`);
202
+ * });
203
+ * ```
204
+ */
205
+ listSnapshots(): Array<Omit<SnapshotInfo<S, I, F, X>, 'state'>>;
206
+ /**
207
+ * 列出所有命名快照
208
+ *
209
+ * 只返回命名快照的信息列表。
210
+ *
211
+ * @returns 命名快照信息数组
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const namedSnaps = history.listNamedSnapshots();
216
+ * console.log(`共有 ${namedSnaps.length} 个命名快照`);
217
+ * ```
218
+ */
219
+ listNamedSnapshots(): Array<Omit<SnapshotInfo<S, I, F, X>, 'state'>>;
65
220
  /**
66
221
  * 查看最近的快照但不移除
67
222
  *
68
- * 返回最新的快照但不从历史记录中删除它
69
- * 用于预览上一个状态而不实际执行撤销操作
223
+ * 返回最新的匿名快照但不从历史记录中删除它。
224
+ * 用于预览上一个状态而不实际执行撤销操作。
70
225
  *
71
226
  * @returns 最近的状态快照,如果历史为空则返回 undefined
72
227
  *
@@ -82,19 +237,25 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
82
237
  /**
83
238
  * 清空所有历史记录
84
239
  *
85
- * 移除所有保存的快照,释放内存
86
- * 通常在开始新游戏或重置时使用
240
+ * 移除所有保存的快照(包括匿名和命名快照),释放内存。
241
+ * 通常在开始新游戏或重置时使用。
242
+ *
243
+ * @param includeNamed - 是否同时清空命名快照(默认为 false)
87
244
  *
88
245
  * @example
89
246
  * ```typescript
90
- * history.clear(); // 清空所有历史
247
+ * // 只清空匿名快照
248
+ * history.clear();
249
+ *
250
+ * // 清空所有快照(包括命名快照)
251
+ * history.clear(true);
91
252
  * ```
92
253
  */
93
- clear(): void;
254
+ clear(includeNamed?: boolean): void;
94
255
  /**
95
- * 获取当前历史记录数量
256
+ * 获取当前匿名快照数量
96
257
  *
97
- * @returns 当前保存的快照数量
258
+ * @returns 当前保存的匿名快照数量
98
259
  *
99
260
  * @example
100
261
  * ```typescript
@@ -105,6 +266,28 @@ declare class HistoryManager<S extends string, I extends string, F extends strin
105
266
  * ```
106
267
  */
107
268
  get size(): number;
269
+ /**
270
+ * 获取命名快照数量
271
+ *
272
+ * @returns 当前保存的命名快照数量
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * console.log(`命名快照数量: ${history.namedSize}`);
277
+ * ```
278
+ */
279
+ get namedSize(): number;
280
+ /**
281
+ * 获取总快照数量
282
+ *
283
+ * @returns 所有快照的总数量(匿名 + 命名)
284
+ *
285
+ * @example
286
+ * ```typescript
287
+ * console.log(`总快照数量: ${history.totalSize}`);
288
+ * ```
289
+ */
290
+ get totalSize(): number;
108
291
  }
109
292
 
110
- export { HistoryManager };
293
+ export { HistoryManager, type SnapshotInfo };