-
Notifications
You must be signed in to change notification settings - Fork 3
集成指南
你可能需要有自己的增量式素材管线,以保证脚本可以在调试或生成时自动编译到Lua代码,如果可以的话,建议将生成的Lua代码再进一步编译为Lua字节码。
生成的Lua代码为UTF-8编码,宿主端应当考虑对UTF-8编码的支持。
关于如何与生成的Lua代码交互,参见“目标代码”中的“Lua”部分。
YukimiScript.Parser
使用.NET Standard 2.0作为生成目标,可以被嵌入到大多数的.NET项目中。
对于Unity或.NET项目,可以直接根据“编译”编写加载函数,直接对YukimiScript进行解释执行。
如果需要其他目标,请根据“编译”中的说明编写CodeGen生成适合自己的其他目标代码并实现其命令行工具。
关于语法高亮,可参考“文法定义”部分进行实现。
关于实时可视化编辑,可以利用模块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匹配失败的时候执行展开宏之后的代码。