steamsheep-ts-game-engine 1.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.
- package/README.md +1087 -0
- package/dist/core/index.d.mts +328 -0
- package/dist/core/index.d.ts +328 -0
- package/dist/core/index.js +220 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +195 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/index.d.mts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +1196 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1160 -0
- package/dist/index.mjs.map +1 -0
- package/dist/state/index.d.mts +110 -0
- package/dist/state/index.d.ts +110 -0
- package/dist/state/index.js +479 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/index.mjs +476 -0
- package/dist/state/index.mjs.map +1 -0
- package/dist/store-BP5bpjRr.d.ts +327 -0
- package/dist/store-BeEHel1o.d.mts +327 -0
- package/dist/systems/index.d.mts +318 -0
- package/dist/systems/index.d.ts +318 -0
- package/dist/systems/index.js +347 -0
- package/dist/systems/index.js.map +1 -0
- package/dist/systems/index.mjs +341 -0
- package/dist/systems/index.mjs.map +1 -0
- package/dist/types-CZueoTHl.d.mts +464 -0
- package/dist/types-CZueoTHl.d.ts +464 -0
- package/dist/ui/index.d.mts +56 -0
- package/dist/ui/index.d.ts +56 -0
- package/dist/ui/index.js +412 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +407 -0
- package/dist/ui/index.mjs.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { G as GameState } from '../types-CZueoTHl.mjs';
|
|
2
|
+
export { A as ActionDef, E as EffectDef, b as LocationDef, L as LogEntry, a as NotificationPayload, N as NotificationType, R as RequirementDef, S as StatRequirement, W as WorldState } from '../types-CZueoTHl.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 系统消息常量
|
|
6
|
+
*
|
|
7
|
+
* 使用特殊的标识符(sys: 前缀),让 UI 层知道这需要翻译。
|
|
8
|
+
* 这些常量用于系统级别的提示消息,应该在 UI 层进行本地化处理。
|
|
9
|
+
*/
|
|
10
|
+
declare const SystemMessages: {
|
|
11
|
+
/** 资源不足提示 */
|
|
12
|
+
readonly NOT_ENOUGH_RESOURCES: "sys:not_enough_resources";
|
|
13
|
+
/** 条件不满足提示 */
|
|
14
|
+
readonly REQUIREMENT_NOT_MET: "sys:requirement_not_met";
|
|
15
|
+
/** 操作成功提示 */
|
|
16
|
+
readonly ACTION_SUCCESS: "sys:action_success";
|
|
17
|
+
/** 时间回溯成功提示 */
|
|
18
|
+
readonly UNDO_SUCCESS: "sys:undo_success";
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 全局常量定义
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* 引擎版本
|
|
26
|
+
*/
|
|
27
|
+
declare const ENGINE_VERSION = "1.0.0";
|
|
28
|
+
/**
|
|
29
|
+
* 默认配置
|
|
30
|
+
*/
|
|
31
|
+
declare const DEFAULT_CONFIG: {
|
|
32
|
+
/** 默认存档键名 */
|
|
33
|
+
readonly DEFAULT_SAVE_KEY: "game-save";
|
|
34
|
+
/** 最大日志条数 */
|
|
35
|
+
readonly MAX_LOG_ENTRIES: 50;
|
|
36
|
+
/** 最大历史快照数 */
|
|
37
|
+
readonly MAX_HISTORY_SNAPSHOTS: 20;
|
|
38
|
+
/** 飘字显示时长(毫秒) */
|
|
39
|
+
readonly TOAST_DURATION: 3000;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 日志类型颜色映射
|
|
43
|
+
*/
|
|
44
|
+
declare const LOG_TYPE_COLORS: {
|
|
45
|
+
readonly info: "#3b82f6";
|
|
46
|
+
readonly success: "#10b981";
|
|
47
|
+
readonly warn: "#f59e0b";
|
|
48
|
+
readonly error: "#ef4444";
|
|
49
|
+
readonly result: "#6366f1";
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* 默认属性值
|
|
53
|
+
*/
|
|
54
|
+
declare const DEFAULT_STATS: {
|
|
55
|
+
/** 默认生命值 */
|
|
56
|
+
readonly DEFAULT_HP: 100;
|
|
57
|
+
/** 默认金币 */
|
|
58
|
+
readonly DEFAULT_GOLD: 0;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* 游戏时间常量
|
|
62
|
+
*/
|
|
63
|
+
declare const TIME_CONSTANTS: {
|
|
64
|
+
/** 一天的小时数 */
|
|
65
|
+
readonly HOURS_PER_DAY: 24;
|
|
66
|
+
/** 早晨开始时间 */
|
|
67
|
+
readonly MORNING_START: 6;
|
|
68
|
+
/** 中午开始时间 */
|
|
69
|
+
readonly NOON_START: 12;
|
|
70
|
+
/** 傍晚开始时间 */
|
|
71
|
+
readonly EVENING_START: 18;
|
|
72
|
+
/** 夜晚开始时间 */
|
|
73
|
+
readonly NIGHT_START: 22;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* UI 常量
|
|
77
|
+
*/
|
|
78
|
+
declare const UI_CONSTANTS: {
|
|
79
|
+
/** 侧边栏宽度 */
|
|
80
|
+
readonly SIDEBAR_WIDTH: 288;
|
|
81
|
+
/** 日志栏宽度 */
|
|
82
|
+
readonly LOG_WIDTH: 320;
|
|
83
|
+
/** Toast 容器 z-index */
|
|
84
|
+
readonly TOAST_Z_INDEX: 1000;
|
|
85
|
+
/** Modal 容器 z-index */
|
|
86
|
+
readonly MODAL_Z_INDEX: 2000;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* 验证常量
|
|
90
|
+
*/
|
|
91
|
+
declare const VALIDATION: {
|
|
92
|
+
/** 最小属性值 */
|
|
93
|
+
readonly MIN_STAT_VALUE: 0;
|
|
94
|
+
/** 最大属性值 */
|
|
95
|
+
readonly MAX_STAT_VALUE: 9999;
|
|
96
|
+
/** 最大背包容量 */
|
|
97
|
+
readonly MAX_INVENTORY_SIZE: 100;
|
|
98
|
+
/** 最小动作 ID 长度 */
|
|
99
|
+
readonly MIN_ACTION_ID_LENGTH: 1;
|
|
100
|
+
/** 最大动作 ID 长度 */
|
|
101
|
+
readonly MAX_ACTION_ID_LENGTH: 50;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 工具函数集合
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 生成唯一 ID
|
|
110
|
+
*
|
|
111
|
+
* @returns 唯一标识符字符串
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* const id = generateId(); // "1234567890-abc123"
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
declare function generateId(): string;
|
|
119
|
+
/**
|
|
120
|
+
* 深拷贝对象
|
|
121
|
+
*
|
|
122
|
+
* 使用 JSON 序列化实现深拷贝,注意会丢失函数、Symbol 等特殊类型
|
|
123
|
+
*
|
|
124
|
+
* @param obj - 要拷贝的对象
|
|
125
|
+
* @returns 深拷贝后的对象
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const copy = deepClone(originalObject);
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
declare function deepClone<T>(obj: T): T;
|
|
133
|
+
/**
|
|
134
|
+
* 限制数值在指定范围内
|
|
135
|
+
*
|
|
136
|
+
* @param value - 要限制的值
|
|
137
|
+
* @param min - 最小值
|
|
138
|
+
* @param max - 最大值
|
|
139
|
+
* @returns 限制后的值
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* clamp(150, 0, 100); // 100
|
|
144
|
+
* clamp(-10, 0, 100); // 0
|
|
145
|
+
* clamp(50, 0, 100); // 50
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
declare function clamp(value: number, min: number, max: number): number;
|
|
149
|
+
/**
|
|
150
|
+
* 格式化数字,添加千位分隔符
|
|
151
|
+
*
|
|
152
|
+
* @param num - 要格式化的数字
|
|
153
|
+
* @returns 格式化后的字符串
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* formatNumber(1234567); // "1,234,567"
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
declare function formatNumber(num: number): string;
|
|
161
|
+
/**
|
|
162
|
+
* 获取时间段描述
|
|
163
|
+
*
|
|
164
|
+
* @param hour - 小时数 (0-23)
|
|
165
|
+
* @returns 时间段描述
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* getTimeOfDay(8); // "早晨"
|
|
170
|
+
* getTimeOfDay(14); // "下午"
|
|
171
|
+
* getTimeOfDay(20); // "傍晚"
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
declare function getTimeOfDay(hour: number): string;
|
|
175
|
+
/**
|
|
176
|
+
* 计算百分比
|
|
177
|
+
*
|
|
178
|
+
* @param current - 当前值
|
|
179
|
+
* @param max - 最大值
|
|
180
|
+
* @returns 百分比 (0-100)
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* getPercentage(75, 100); // 75
|
|
185
|
+
* getPercentage(0, 100); // 0
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
declare function getPercentage(current: number, max: number): number;
|
|
189
|
+
/**
|
|
190
|
+
* 随机整数
|
|
191
|
+
*
|
|
192
|
+
* @param min - 最小值(包含)
|
|
193
|
+
* @param max - 最大值(包含)
|
|
194
|
+
* @returns 随机整数
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* randomInt(1, 6); // 1-6 之间的随机整数(模拟骰子)
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
declare function randomInt(min: number, max: number): number;
|
|
202
|
+
/**
|
|
203
|
+
* 从数组中随机选择一个元素
|
|
204
|
+
*
|
|
205
|
+
* @param array - 数组
|
|
206
|
+
* @returns 随机选择的元素,如果数组为空则返回 undefined
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* randomChoice(['剑', '盾', '药水']); // 随机返回一个
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
declare function randomChoice<T>(array: T[]): T | undefined;
|
|
214
|
+
/**
|
|
215
|
+
* 打乱数组顺序(Fisher-Yates 算法)
|
|
216
|
+
*
|
|
217
|
+
* @param array - 要打乱的数组
|
|
218
|
+
* @returns 打乱后的新数组
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* shuffle([1, 2, 3, 4, 5]); // [3, 1, 5, 2, 4]
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
declare function shuffle<T>(array: T[]): T[];
|
|
226
|
+
/**
|
|
227
|
+
* 延迟执行
|
|
228
|
+
*
|
|
229
|
+
* @param ms - 延迟毫秒数
|
|
230
|
+
* @returns Promise
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ```typescript
|
|
234
|
+
* await delay(1000); // 延迟 1 秒
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
declare function delay(ms: number): Promise<void>;
|
|
238
|
+
/**
|
|
239
|
+
* 检查对象是否为空
|
|
240
|
+
*
|
|
241
|
+
* @param obj - 要检查的对象
|
|
242
|
+
* @returns 是否为空
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* isEmpty({}); // true
|
|
247
|
+
* isEmpty({ a: 1 }); // false
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
declare function isEmpty(obj: object): boolean;
|
|
251
|
+
/**
|
|
252
|
+
* 安全地获取嵌套属性
|
|
253
|
+
*
|
|
254
|
+
* @param obj - 对象
|
|
255
|
+
* @param path - 属性路径,用点分隔
|
|
256
|
+
* @param defaultValue - 默认值
|
|
257
|
+
* @returns 属性值或默认值
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* const obj = { a: { b: { c: 123 } } };
|
|
262
|
+
* get(obj, 'a.b.c', 0); // 123
|
|
263
|
+
* get(obj, 'a.x.y', 0); // 0
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
declare function get<T>(obj: unknown, path: string, defaultValue?: T): T;
|
|
267
|
+
/**
|
|
268
|
+
* 防抖函数
|
|
269
|
+
*
|
|
270
|
+
* @param fn - 要防抖的函数
|
|
271
|
+
* @param wait - 等待时间(毫秒)
|
|
272
|
+
* @returns 防抖后的函数
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* ```typescript
|
|
276
|
+
* const debouncedSave = debounce(() => saveGame(), 1000);
|
|
277
|
+
* debouncedSave(); // 1秒内多次调用只执行最后一次
|
|
278
|
+
* ```
|
|
279
|
+
*/
|
|
280
|
+
declare function debounce<T extends (...args: never[]) => unknown>(fn: T, wait: number): (...args: Parameters<T>) => void;
|
|
281
|
+
/**
|
|
282
|
+
* 节流函数
|
|
283
|
+
*
|
|
284
|
+
* @param fn - 要节流的函数
|
|
285
|
+
* @param wait - 等待时间(毫秒)
|
|
286
|
+
* @returns 节流后的函数
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```typescript
|
|
290
|
+
* const throttledUpdate = throttle(() => updateUI(), 100);
|
|
291
|
+
* throttledUpdate(); // 100ms 内只执行一次
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
declare function throttle<T extends (...args: never[]) => unknown>(fn: T, wait: number): (...args: Parameters<T>) => void;
|
|
295
|
+
/**
|
|
296
|
+
* 格式化游戏时间
|
|
297
|
+
*
|
|
298
|
+
* @param day - 天数
|
|
299
|
+
* @param time - 小时数
|
|
300
|
+
* @returns 格式化的时间字符串
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* ```typescript
|
|
304
|
+
* formatGameTime(5, 14); // "第 5 天 下午 2:00"
|
|
305
|
+
* ```
|
|
306
|
+
*/
|
|
307
|
+
declare function formatGameTime(day: number, time: number): string;
|
|
308
|
+
/**
|
|
309
|
+
* 计算两个状态之间的差异
|
|
310
|
+
*
|
|
311
|
+
* @param oldState - 旧状态
|
|
312
|
+
* @param newState - 新状态
|
|
313
|
+
* @returns 差异对象
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```typescript
|
|
317
|
+
* const diff = getStateDiff(oldState, newState);
|
|
318
|
+
* console.log(diff.stats); // { hp: -10, gold: 5 }
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
declare function getStateDiff<S extends string, I extends string, F extends string, X>(oldState: GameState<S, I, F, X>, newState: GameState<S, I, F, X>): {
|
|
322
|
+
stats: Partial<Record<S, number>>;
|
|
323
|
+
itemsAdded: I[];
|
|
324
|
+
itemsRemoved: I[];
|
|
325
|
+
flagsChanged: Partial<Record<F, boolean>>;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
export { DEFAULT_CONFIG, DEFAULT_STATS, ENGINE_VERSION, GameState, LOG_TYPE_COLORS, SystemMessages, TIME_CONSTANTS, UI_CONSTANTS, VALIDATION, clamp, debounce, deepClone, delay, formatGameTime, formatNumber, generateId, get, getPercentage, getStateDiff, getTimeOfDay, isEmpty, randomChoice, randomInt, shuffle, throttle };
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { G as GameState } from '../types-CZueoTHl.js';
|
|
2
|
+
export { A as ActionDef, E as EffectDef, b as LocationDef, L as LogEntry, a as NotificationPayload, N as NotificationType, R as RequirementDef, S as StatRequirement, W as WorldState } from '../types-CZueoTHl.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 系统消息常量
|
|
6
|
+
*
|
|
7
|
+
* 使用特殊的标识符(sys: 前缀),让 UI 层知道这需要翻译。
|
|
8
|
+
* 这些常量用于系统级别的提示消息,应该在 UI 层进行本地化处理。
|
|
9
|
+
*/
|
|
10
|
+
declare const SystemMessages: {
|
|
11
|
+
/** 资源不足提示 */
|
|
12
|
+
readonly NOT_ENOUGH_RESOURCES: "sys:not_enough_resources";
|
|
13
|
+
/** 条件不满足提示 */
|
|
14
|
+
readonly REQUIREMENT_NOT_MET: "sys:requirement_not_met";
|
|
15
|
+
/** 操作成功提示 */
|
|
16
|
+
readonly ACTION_SUCCESS: "sys:action_success";
|
|
17
|
+
/** 时间回溯成功提示 */
|
|
18
|
+
readonly UNDO_SUCCESS: "sys:undo_success";
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 全局常量定义
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* 引擎版本
|
|
26
|
+
*/
|
|
27
|
+
declare const ENGINE_VERSION = "1.0.0";
|
|
28
|
+
/**
|
|
29
|
+
* 默认配置
|
|
30
|
+
*/
|
|
31
|
+
declare const DEFAULT_CONFIG: {
|
|
32
|
+
/** 默认存档键名 */
|
|
33
|
+
readonly DEFAULT_SAVE_KEY: "game-save";
|
|
34
|
+
/** 最大日志条数 */
|
|
35
|
+
readonly MAX_LOG_ENTRIES: 50;
|
|
36
|
+
/** 最大历史快照数 */
|
|
37
|
+
readonly MAX_HISTORY_SNAPSHOTS: 20;
|
|
38
|
+
/** 飘字显示时长(毫秒) */
|
|
39
|
+
readonly TOAST_DURATION: 3000;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 日志类型颜色映射
|
|
43
|
+
*/
|
|
44
|
+
declare const LOG_TYPE_COLORS: {
|
|
45
|
+
readonly info: "#3b82f6";
|
|
46
|
+
readonly success: "#10b981";
|
|
47
|
+
readonly warn: "#f59e0b";
|
|
48
|
+
readonly error: "#ef4444";
|
|
49
|
+
readonly result: "#6366f1";
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* 默认属性值
|
|
53
|
+
*/
|
|
54
|
+
declare const DEFAULT_STATS: {
|
|
55
|
+
/** 默认生命值 */
|
|
56
|
+
readonly DEFAULT_HP: 100;
|
|
57
|
+
/** 默认金币 */
|
|
58
|
+
readonly DEFAULT_GOLD: 0;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* 游戏时间常量
|
|
62
|
+
*/
|
|
63
|
+
declare const TIME_CONSTANTS: {
|
|
64
|
+
/** 一天的小时数 */
|
|
65
|
+
readonly HOURS_PER_DAY: 24;
|
|
66
|
+
/** 早晨开始时间 */
|
|
67
|
+
readonly MORNING_START: 6;
|
|
68
|
+
/** 中午开始时间 */
|
|
69
|
+
readonly NOON_START: 12;
|
|
70
|
+
/** 傍晚开始时间 */
|
|
71
|
+
readonly EVENING_START: 18;
|
|
72
|
+
/** 夜晚开始时间 */
|
|
73
|
+
readonly NIGHT_START: 22;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* UI 常量
|
|
77
|
+
*/
|
|
78
|
+
declare const UI_CONSTANTS: {
|
|
79
|
+
/** 侧边栏宽度 */
|
|
80
|
+
readonly SIDEBAR_WIDTH: 288;
|
|
81
|
+
/** 日志栏宽度 */
|
|
82
|
+
readonly LOG_WIDTH: 320;
|
|
83
|
+
/** Toast 容器 z-index */
|
|
84
|
+
readonly TOAST_Z_INDEX: 1000;
|
|
85
|
+
/** Modal 容器 z-index */
|
|
86
|
+
readonly MODAL_Z_INDEX: 2000;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* 验证常量
|
|
90
|
+
*/
|
|
91
|
+
declare const VALIDATION: {
|
|
92
|
+
/** 最小属性值 */
|
|
93
|
+
readonly MIN_STAT_VALUE: 0;
|
|
94
|
+
/** 最大属性值 */
|
|
95
|
+
readonly MAX_STAT_VALUE: 9999;
|
|
96
|
+
/** 最大背包容量 */
|
|
97
|
+
readonly MAX_INVENTORY_SIZE: 100;
|
|
98
|
+
/** 最小动作 ID 长度 */
|
|
99
|
+
readonly MIN_ACTION_ID_LENGTH: 1;
|
|
100
|
+
/** 最大动作 ID 长度 */
|
|
101
|
+
readonly MAX_ACTION_ID_LENGTH: 50;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 工具函数集合
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 生成唯一 ID
|
|
110
|
+
*
|
|
111
|
+
* @returns 唯一标识符字符串
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* const id = generateId(); // "1234567890-abc123"
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
declare function generateId(): string;
|
|
119
|
+
/**
|
|
120
|
+
* 深拷贝对象
|
|
121
|
+
*
|
|
122
|
+
* 使用 JSON 序列化实现深拷贝,注意会丢失函数、Symbol 等特殊类型
|
|
123
|
+
*
|
|
124
|
+
* @param obj - 要拷贝的对象
|
|
125
|
+
* @returns 深拷贝后的对象
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* const copy = deepClone(originalObject);
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
declare function deepClone<T>(obj: T): T;
|
|
133
|
+
/**
|
|
134
|
+
* 限制数值在指定范围内
|
|
135
|
+
*
|
|
136
|
+
* @param value - 要限制的值
|
|
137
|
+
* @param min - 最小值
|
|
138
|
+
* @param max - 最大值
|
|
139
|
+
* @returns 限制后的值
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* clamp(150, 0, 100); // 100
|
|
144
|
+
* clamp(-10, 0, 100); // 0
|
|
145
|
+
* clamp(50, 0, 100); // 50
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
declare function clamp(value: number, min: number, max: number): number;
|
|
149
|
+
/**
|
|
150
|
+
* 格式化数字,添加千位分隔符
|
|
151
|
+
*
|
|
152
|
+
* @param num - 要格式化的数字
|
|
153
|
+
* @returns 格式化后的字符串
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* formatNumber(1234567); // "1,234,567"
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
declare function formatNumber(num: number): string;
|
|
161
|
+
/**
|
|
162
|
+
* 获取时间段描述
|
|
163
|
+
*
|
|
164
|
+
* @param hour - 小时数 (0-23)
|
|
165
|
+
* @returns 时间段描述
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* getTimeOfDay(8); // "早晨"
|
|
170
|
+
* getTimeOfDay(14); // "下午"
|
|
171
|
+
* getTimeOfDay(20); // "傍晚"
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
declare function getTimeOfDay(hour: number): string;
|
|
175
|
+
/**
|
|
176
|
+
* 计算百分比
|
|
177
|
+
*
|
|
178
|
+
* @param current - 当前值
|
|
179
|
+
* @param max - 最大值
|
|
180
|
+
* @returns 百分比 (0-100)
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* getPercentage(75, 100); // 75
|
|
185
|
+
* getPercentage(0, 100); // 0
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
declare function getPercentage(current: number, max: number): number;
|
|
189
|
+
/**
|
|
190
|
+
* 随机整数
|
|
191
|
+
*
|
|
192
|
+
* @param min - 最小值(包含)
|
|
193
|
+
* @param max - 最大值(包含)
|
|
194
|
+
* @returns 随机整数
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* randomInt(1, 6); // 1-6 之间的随机整数(模拟骰子)
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
declare function randomInt(min: number, max: number): number;
|
|
202
|
+
/**
|
|
203
|
+
* 从数组中随机选择一个元素
|
|
204
|
+
*
|
|
205
|
+
* @param array - 数组
|
|
206
|
+
* @returns 随机选择的元素,如果数组为空则返回 undefined
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* randomChoice(['剑', '盾', '药水']); // 随机返回一个
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
declare function randomChoice<T>(array: T[]): T | undefined;
|
|
214
|
+
/**
|
|
215
|
+
* 打乱数组顺序(Fisher-Yates 算法)
|
|
216
|
+
*
|
|
217
|
+
* @param array - 要打乱的数组
|
|
218
|
+
* @returns 打乱后的新数组
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* shuffle([1, 2, 3, 4, 5]); // [3, 1, 5, 2, 4]
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
declare function shuffle<T>(array: T[]): T[];
|
|
226
|
+
/**
|
|
227
|
+
* 延迟执行
|
|
228
|
+
*
|
|
229
|
+
* @param ms - 延迟毫秒数
|
|
230
|
+
* @returns Promise
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ```typescript
|
|
234
|
+
* await delay(1000); // 延迟 1 秒
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
declare function delay(ms: number): Promise<void>;
|
|
238
|
+
/**
|
|
239
|
+
* 检查对象是否为空
|
|
240
|
+
*
|
|
241
|
+
* @param obj - 要检查的对象
|
|
242
|
+
* @returns 是否为空
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* isEmpty({}); // true
|
|
247
|
+
* isEmpty({ a: 1 }); // false
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
declare function isEmpty(obj: object): boolean;
|
|
251
|
+
/**
|
|
252
|
+
* 安全地获取嵌套属性
|
|
253
|
+
*
|
|
254
|
+
* @param obj - 对象
|
|
255
|
+
* @param path - 属性路径,用点分隔
|
|
256
|
+
* @param defaultValue - 默认值
|
|
257
|
+
* @returns 属性值或默认值
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* const obj = { a: { b: { c: 123 } } };
|
|
262
|
+
* get(obj, 'a.b.c', 0); // 123
|
|
263
|
+
* get(obj, 'a.x.y', 0); // 0
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
declare function get<T>(obj: unknown, path: string, defaultValue?: T): T;
|
|
267
|
+
/**
|
|
268
|
+
* 防抖函数
|
|
269
|
+
*
|
|
270
|
+
* @param fn - 要防抖的函数
|
|
271
|
+
* @param wait - 等待时间(毫秒)
|
|
272
|
+
* @returns 防抖后的函数
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* ```typescript
|
|
276
|
+
* const debouncedSave = debounce(() => saveGame(), 1000);
|
|
277
|
+
* debouncedSave(); // 1秒内多次调用只执行最后一次
|
|
278
|
+
* ```
|
|
279
|
+
*/
|
|
280
|
+
declare function debounce<T extends (...args: never[]) => unknown>(fn: T, wait: number): (...args: Parameters<T>) => void;
|
|
281
|
+
/**
|
|
282
|
+
* 节流函数
|
|
283
|
+
*
|
|
284
|
+
* @param fn - 要节流的函数
|
|
285
|
+
* @param wait - 等待时间(毫秒)
|
|
286
|
+
* @returns 节流后的函数
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```typescript
|
|
290
|
+
* const throttledUpdate = throttle(() => updateUI(), 100);
|
|
291
|
+
* throttledUpdate(); // 100ms 内只执行一次
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
declare function throttle<T extends (...args: never[]) => unknown>(fn: T, wait: number): (...args: Parameters<T>) => void;
|
|
295
|
+
/**
|
|
296
|
+
* 格式化游戏时间
|
|
297
|
+
*
|
|
298
|
+
* @param day - 天数
|
|
299
|
+
* @param time - 小时数
|
|
300
|
+
* @returns 格式化的时间字符串
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* ```typescript
|
|
304
|
+
* formatGameTime(5, 14); // "第 5 天 下午 2:00"
|
|
305
|
+
* ```
|
|
306
|
+
*/
|
|
307
|
+
declare function formatGameTime(day: number, time: number): string;
|
|
308
|
+
/**
|
|
309
|
+
* 计算两个状态之间的差异
|
|
310
|
+
*
|
|
311
|
+
* @param oldState - 旧状态
|
|
312
|
+
* @param newState - 新状态
|
|
313
|
+
* @returns 差异对象
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* ```typescript
|
|
317
|
+
* const diff = getStateDiff(oldState, newState);
|
|
318
|
+
* console.log(diff.stats); // { hp: -10, gold: 5 }
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
declare function getStateDiff<S extends string, I extends string, F extends string, X>(oldState: GameState<S, I, F, X>, newState: GameState<S, I, F, X>): {
|
|
322
|
+
stats: Partial<Record<S, number>>;
|
|
323
|
+
itemsAdded: I[];
|
|
324
|
+
itemsRemoved: I[];
|
|
325
|
+
flagsChanged: Partial<Record<F, boolean>>;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
export { DEFAULT_CONFIG, DEFAULT_STATS, ENGINE_VERSION, GameState, LOG_TYPE_COLORS, SystemMessages, TIME_CONSTANTS, UI_CONSTANTS, VALIDATION, clamp, debounce, deepClone, delay, formatGameTime, formatNumber, generateId, get, getPercentage, getStateDiff, getTimeOfDay, isEmpty, randomChoice, randomInt, shuffle, throttle };
|