#dialog #language #branch #events #node #name #execute

besida

定义分支对话的语言

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