2 个版本
0.1.1 | 2023 年 9 月 3 日 |
---|---|
0.1.0 | 2023 年 8 月 20 日 |
#42 in #dialog
9KB
193 行
Besida (¨бесіда¨) ─ 定义对话的语言
实现:
- Besida:一个结构体,它通过对话文件的路径(示例)初始化,并将其解析为 对话节点
- 对话节点:包含说话者姓名和他们的讲话(以 事件 和纯文本形式)
- 事件:枚举,驱动设计 - 在遍历事件时进行模式匹配,这使得按照所提出格式编写对话时按顺序执行动作变得非常容易
接下来,我想添加更多的事件,例如说话者的表情/情感、文本速度控制、文本高亮或一般样式。还有更好的方法来读取匹配时的动作。
这是一个与 godot-rust 的示例,其中 event_tick
由字母显示计时器触发以模拟键入
#[func]
fn event_tick(&mut self) {
let Some(node) = self.besida.get_node_mut() else { return };
let Some(event) = node.get_event() else { return };
let mut dialogue_box = self
.base
.get_parent()
.unwrap()
.get_node_as::<DialogueBox>("DialogueBox");
match event {
Event::PrintChar(char) => {
let speech = dialogue_box.bind().get_speech();
let new_speech = format!("{}{}", speech, char);
dialogue_box.bind_mut().set_speech(new_speech.into());
}
_ => {},
}
node.next_event();
}
依赖项
~1MB
~20K SLoC