formula-gadget
v0.1.4
Published
Game combat formula DSL — compile to bytecode, evaluate in a tiny runtime
Readme
formula-gadget
游戏战斗公式 DSL 的全家桶主包。同时导出编译器与 TypeScript 运行时的完整 API,适合联调、工具链或不需要拆包优化的场景。
生产环境建议按需安装子包以控制打包体积:
- 构建期 →
npm install @formula-gadget/compiler -D- 运行时 →
npm install @formula-gadget/runtime-ts
安装
npm install formula-gadget快速开始
动态编译(调试 / 工具链)
import { FormulaDSL } from "formula-gadget";
const dsl = new FormulaDSL();
const formula = dsl.compileOrThrow(`
base = max(atk - def, 0)
bonus = hp < 30 ? 50 : 0
return base + bonus
`);
console.log(formula.evaluate({ atk: 100, def: 20, hp: 25 })); // 130预编译 + 运行时分离(生产推荐)
// === 构建期 ===
import { compileAndSerialize, createRegistry } from "formula-gadget/build";
const registry = createRegistry();
registry.register("myBuff", () => 0);
const blob = compileAndSerialize("max(atk - def, 0) + myBuff()", registry, undefined, {
ctxSlots: ["atk", "def"],
});
// 将 blob 写入文件或打包
// === 运行时 ===
import { loadFormula, createRuntimeRegistry } from "formula-gadget/runtime";
const registry = createRuntimeRegistry();
registry.register("myBuff", (x) => x * 1.5);
const formula = loadFormula(blob, registry);
formula.evaluate({ atk: 100, def: 20 }); // number子路径导出
| 路径 | 内容 |
|------|------|
| formula-gadget | 完整 API(FormulaDSL、编译器、运行时) |
| formula-gadget/build | 仅编译器 API(@formula-gadget/compiler) |
| formula-gadget/runtime | 仅运行时 API(@formula-gadget/runtime-ts) |
| formula-gadget/wasm | Wasm/SIMD 批处理引擎 |
完整文档
请参阅 GitHub 仓库,内含:
- DSL 语法参考
- 自定义函数与 Registry
- C++ / C# 跨语言运行时接入指南
- 性能优化特性说明(常量折叠、Fast Slots、SIMD 批处理)
