feat(script-runtime): 服务器端蓝图执行模块 (#322)
* feat(script-runtime): 添加服务器端蓝图执行模块 - ServerBlueprintVM: 服务器端蓝图虚拟机 - CPULimiter: CPU 时间和步数限制 - IntentCollector: 意图收集系统 - FileMemoryStore: 文件系统持久化 - ServerExecutionContext: 服务器执行上下文 * refactor(script-runtime): 分离引擎接口与游戏逻辑 - 重构 IntentTypes.ts 只保留基础 IIntent 接口和通用常量 - IntentCollector 改为泛型类,支持任意意图类型 - ServerExecutionContext 改为泛型类,支持任意游戏状态类型 - ServerBlueprintVM 改为泛型类,使用 TGameState 和 TIntent 类型参数 - 移除游戏特定类型(IUnitState, ISpawnerState 等),由游戏项目定义 - 添加 IntentKeyExtractor 机制用于防止重复意图 * feat(script-runtime): 添加服务器端游戏循环框架 - PlayerSession: 封装单个玩家的 VM、蓝图和 Memory 状态 - TickScheduler: 管理所有玩家会话,调度每 tick 的蓝图执行 - IIntentProcessor: 意图处理器接口,由游戏项目实现 - IntentProcessorBase: 意图处理器基类,提供常用处理模式 - IntentProcessorRegistry: 按类型注册意图处理器 - GameLoop: 完整的游戏主循环,协调各组件工作 * feat(script-runtime): 添加通用蓝图节点 Memory 节点: - GetMemory: 读取玩家 Memory - SetMemory: 写入玩家 Memory - HasMemoryKey: 检查键是否存在 - DeleteMemory: 删除 Memory 键 Log 节点: - Log: 记录日志 - Warn: 记录警告 - Error: 记录错误 Game 信息节点: - GetTick: 获取当前 tick - GetPlayerId: 获取玩家 ID - GetDeltaTime: 获取增量时间 - GetGameState: 获取游戏状态 提供 registerScriptRuntimeNodes() 用于批量注册节点 * fix(script-runtime): 修复 CI 构建错误 - 更新 tsconfig.json 继承 tsconfig.base.json - 添加 references 到 core 和 blueprint 包 - 更新 pnpm-lock.yaml * fix(script-runtime): 修复 DTS 构建错误 - 添加 tsconfig.build.json 用于 tsup 构建 - 更新 tsup.config.ts 使用 tsconfig.build.json - 分离构建配置和类型检查配置
This commit is contained in:
143
packages/script-runtime/src/index.ts
Normal file
143
packages/script-runtime/src/index.ts
Normal file
@@ -0,0 +1,143 @@
|
||||
/**
|
||||
* @esengine/script-runtime
|
||||
*
|
||||
* Server-side blueprint execution for programmable strategy games
|
||||
* 服务器端蓝图执行,用于可编程策略游戏
|
||||
*
|
||||
* @packageDocumentation
|
||||
*/
|
||||
|
||||
// =============================================================================
|
||||
// VM | Virtual Machine
|
||||
// =============================================================================
|
||||
|
||||
export { ServerBlueprintVM } from './vm/ServerBlueprintVM';
|
||||
export type { ServerVMConfig, TickResult } from './vm/ServerBlueprintVM';
|
||||
|
||||
export { ServerExecutionContext } from './vm/ServerExecutionContext';
|
||||
export type { IGameState, LogEntry } from './vm/ServerExecutionContext';
|
||||
|
||||
export { CPULimiter, DEFAULT_CPU_CONFIG } from './vm/CPULimiter';
|
||||
export type { CPULimiterConfig, CPUStats } from './vm/CPULimiter';
|
||||
|
||||
// =============================================================================
|
||||
// Intent System | 意图系统
|
||||
// =============================================================================
|
||||
|
||||
export { IntentCollector } from './intent/IntentCollector';
|
||||
export type { IIntentCollector } from './intent/IntentCollector';
|
||||
|
||||
export type { IIntent, IntentKeyExtractor, Direction } from './intent/IntentTypes';
|
||||
|
||||
export { defaultIntentKeyExtractor } from './intent/IntentTypes';
|
||||
|
||||
// Result constants
|
||||
export {
|
||||
OK,
|
||||
ERR_GENERIC,
|
||||
ERR_NOT_OWNER,
|
||||
ERR_INVALID_TARGET,
|
||||
ERR_NOT_IN_RANGE,
|
||||
ERR_NOT_ENOUGH_RESOURCES,
|
||||
ERR_BUSY,
|
||||
ERR_INVALID_ARGS,
|
||||
// Direction constants
|
||||
TOP,
|
||||
TOP_RIGHT,
|
||||
RIGHT,
|
||||
BOTTOM_RIGHT,
|
||||
BOTTOM,
|
||||
BOTTOM_LEFT,
|
||||
LEFT,
|
||||
TOP_LEFT
|
||||
} from './intent/IntentTypes';
|
||||
|
||||
// =============================================================================
|
||||
// Persistence | 持久化
|
||||
// =============================================================================
|
||||
|
||||
export { FileMemoryStore } from './persistence/FileMemoryStore';
|
||||
export type { FileMemoryStoreConfig } from './persistence/FileMemoryStore';
|
||||
|
||||
export type {
|
||||
IMemoryStore,
|
||||
PlayerMemory,
|
||||
WorldState,
|
||||
MemoryStoreStats
|
||||
} from './persistence/IMemoryStore';
|
||||
|
||||
// =============================================================================
|
||||
// Service Tokens | 服务令牌
|
||||
// =============================================================================
|
||||
|
||||
export {
|
||||
ScriptRuntimeServiceToken,
|
||||
MemoryStoreToken
|
||||
} from './tokens';
|
||||
|
||||
export type { IScriptRuntimeService } from './tokens';
|
||||
|
||||
// =============================================================================
|
||||
// Server | 服务器端
|
||||
// =============================================================================
|
||||
|
||||
export {
|
||||
// PlayerSession
|
||||
PlayerSession,
|
||||
// TickScheduler
|
||||
TickScheduler,
|
||||
// IntentProcessor
|
||||
IntentProcessorBase,
|
||||
IntentProcessorRegistry,
|
||||
// GameLoop
|
||||
GameLoop,
|
||||
DEFAULT_GAME_LOOP_CONFIG
|
||||
} from './server';
|
||||
|
||||
export type {
|
||||
// Types
|
||||
PlayerTickResult,
|
||||
TickExecutionResult,
|
||||
IntentProcessingResult,
|
||||
GameLoopConfig,
|
||||
GameLoopState,
|
||||
GameLoopEvents,
|
||||
// PlayerSession
|
||||
PlayerSessionConfig,
|
||||
PlayerSessionState,
|
||||
// TickScheduler
|
||||
TickSchedulerConfig,
|
||||
SchedulerStats,
|
||||
// IntentProcessor
|
||||
IIntentProcessor,
|
||||
SingleIntentResult,
|
||||
// GameLoop
|
||||
GameLoopStats
|
||||
} from './server';
|
||||
|
||||
// =============================================================================
|
||||
// Nodes | 蓝图节点
|
||||
// =============================================================================
|
||||
|
||||
export {
|
||||
// Registration
|
||||
registerScriptRuntimeNodes,
|
||||
AllNodeDefinitions,
|
||||
// Memory Nodes
|
||||
GetMemoryTemplate,
|
||||
SetMemoryTemplate,
|
||||
HasMemoryKeyTemplate,
|
||||
DeleteMemoryTemplate,
|
||||
MemoryNodeDefinitions,
|
||||
// Log Nodes
|
||||
LogTemplate,
|
||||
WarnTemplate,
|
||||
ErrorTemplate,
|
||||
LogNodeDefinitions,
|
||||
// Game Info Nodes
|
||||
GetTickTemplate,
|
||||
GetPlayerIdTemplate,
|
||||
GetDeltaTimeTemplate,
|
||||
GetGameStateTemplate,
|
||||
GameInfoNodeDefinitions
|
||||
} from './nodes';
|
||||
Reference in New Issue
Block a user