这是一个小说文本解析和提供显示事件流的软件包。
这是一个小说引擎。
这可以有效帮助显示小说文字内容。
这个库不包含UI层。它仅提供解析和输出流显示事件。(使用示例: EffectiveNovelReader)
此外,这个库没有针对小说游戏进行优化,因为它不具备 if 条件判断、宏、子程序等功能。
如果你将其用于此类目的,请在应用层每次使用时都进行解析。
使用标签来控制它们的显示方式。
这个语法基于 Tyranoscript。
标签必须用 []
括起来。
注释时,请在行首添加 #
。
如果你想使用 #
,写 \\#
标签 | 显示事件 | 描述 |
---|---|---|
n | .newline |
换行 |
tw | .tapWait |
点击等待 |
twn | .tapWaitAndNewline |
点击等待并换行 |
cl | .clear |
清除 |
sleep duration=xxxx | .sleep(duration: Double) |
睡眠指定的时长。时长单位是毫秒。 |
delay speed=xxxx | .delay(speed: Double) |
更改字符显示的延迟速度。速度单位为毫秒。 |
setDefaultDelay speed=xxxx | .setDefaultDelay(speed: Double) |
更改默认的字符显示延迟速度。速度单位为毫秒。 |
resetDelay | .resetDelay |
重置延迟速度 |
e | .end |
停止脚本,小说结束点。 |
# Sample Script
tap waiting and newline[twn]
[cl] cleared text.
very fast stream after this text[delay speed=2][n]
displaying!!!!!!
[resetDelay]reset delay speed.[n]
end. [e]
stateDiagram-v2
direction LR
[*] --> loadWait
loadWait --> prepare: load
prepare --> running: start
running --> loadWait: finish
running --> pause: pause
pause --> running: resume
running --> loadWait: interrupt
pause --> loadWait: interrupt
// 1. get `EFNovelController` instance
let controller = EFNovelController()
// 2. load raw novel text
let result: ValidateResult<EFNovelScript, [ValidationError]> = controller.load(rawText: rawText)
let novelScript: EFNovelScript
switch result {
case .valid(let script):
novelScript = script
case .invalid(let errors):
print(errors)
// handle error.
}
// 3. start() and listening stream
controller.start(script: novelScript)
.sink { event in
switch event {
case .character(let char):
displayCharacter(char)
// and any command handling
}
}
.store(in: &cancellables)
// (4.) show text until wait tag
controller.showTextUntilWaitTag()
// (5.) pause stream.
controller.pause()
// (6.) resume from pause
// If you want to start from any index number, you can use `controller.resume(at: 100)`
controller.resume()
// (7.) interrupt
controller.interrupt()
EffectiveNovelCore 使用 MIT 许可证。