Skip to content

集成指南

许兴逸 edited this page Sep 29, 2021 · 2 revisions

集成到游戏或引擎

到Lua

你可能需要有自己的增量式素材管线,以保证脚本可以在调试或生成时自动编译到Lua代码,如果可以的话,建议将生成的Lua代码再进一步编译为Lua字节码。
生成的Lua代码为UTF-8编码,宿主端应当考虑对UTF-8编码的支持。

关于如何与生成的Lua代码交互,参见“目标代码”中的“Lua”部分。

到.NET或Unity项目

YukimiScript.Parser使用.NET Standard 2.0作为生成目标,可以被嵌入到大多数的.NET项目中。
对于Unity或.NET项目,可以直接根据“编译”编写加载函数,直接对YukimiScript进行解释执行。

到其他目标

如果需要其他目标,请根据“编译”中的说明编写CodeGen生成适合自己的其他目标代码并实现其命令行工具。

集成YukimiScript到实时可视化剧本编辑器

关于语法高亮,可参考“文法定义”部分进行实现。

关于实时可视化编辑,可以利用模块YukimiScript.Parser.EditorHelper的内容来检查YukimiScript在某一位置的游戏状态。
你可以通过此模块中的Runner<'State>类型来定义一个执行器,该执行器传入一个“当前游戏状态”,返回执行单条指令后的“游戏状态”。
其中预定义的idRunner类型什么也不做,将上一状态原样输出。
mapRunner则可以在给定状态之间的变换函数,替换Runner内部的'State类型,将控制一小部分状态的Runner映射到更大的状态中。
dispatch则可以根据一个CommandCall -> Runner<'State>函数,选择匹配当前命令的状态,把这些控制小状态的Runner组合成一个控制更大状态的Runner。 利用以上工具可以构造出推进整个游戏状态的Runner

之后可以利用YukimiScript.Parser.EditorHelper.run函数,利用Runner运行大块代码,run会提前展开所有的文本语法使其变成文本命令,但不会展开宏,Runner将会直接接收到对宏的调用,如果你需要展开宏,可以编写一个Runner用于所有Runner匹配失败的时候执行展开宏之后的代码。

Clone this wiki locally