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:
YHH
2025-12-25 11:00:43 +08:00
committed by GitHub
parent a75c61c049
commit 6b8b65ae16
25 changed files with 4961 additions and 0 deletions

View 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';